Next.js SEO

Generating Metadata

Dynamic metadata, generateMetadata, Open Graph, and Twitter cards.

Advertisement

Generating Metadata

Dynamic metadata, generateMetadata, Open Graph, and Twitter cards.

Overview

Dynamic metadata improves SEO and social sharing.

Key Concepts

  • generateMetadata — Dynamic metadata per page
  • Open Graph — Social media previews
  • Twitter Cards — Twitter-specific metadata
  • Canonical URLs — Prevent duplicate content
  • Alternate Languages — Multi-language SEO

Code Examples

// app/blog/[slug]/page.js
export async function generateMetadata({ params }) {
  const post = await getPost(params.slug);
  
  return {
    title: post.title,
    description: post.excerpt,
    openGraph: {
      title: post.title,
      description: post.excerpt,
      url: `https://example.com/blog/${post.slug}`,
      images: [{ url: post.coverImage, width: 1200, height: 630 }],
      type: 'article',
      publishedTime: post.publishedAt,
      authors: [post.author.name]
    },
    twitter: {
      card: 'summary_large_image',
      title: post.title,
      description: post.excerpt,
      images: [post.coverImage]
    },
    alternates: {
      canonical: `https://example.com/blog/${post.slug}`
    }
  };
}

// app/products/[id]/page.js
export async function generateMetadata({ params }) {
  const product = await getProduct(params.id);
  
  return {
    title: `${product.name} | My Store`,
    description: product.description,
    openGraph: {
      title: product.name,
      description: product.description,
      images: product.images
    }
  };
}

// Static metadata
export const metadata = {
  title: {
    template: '%s | My Store',
    default: 'My Store'
  },
  description: 'Best products at great prices'
};

Practice

Implement dynamic metadata for a blog with Open Graph and Twitter cards.