Code Reference

Metadata

Next.js · Reference cheat sheet

Metadata

Next.js · Reference cheat sheet


📋 Overview

App Router metadata APIs set <title>, <meta>, Open Graph, icons, and more — statically via metadata export or dynamically via generateMetadata.

🔧 Core concepts

APIWhen
export const metadataStatic, known at build
generateMetadataDynamic per request/params
generateViewportViewport / theme-color
File conventionsfavicon.ico, opengraph-image.tsx, icon.tsx
FieldPurpose
titleDocument title (supports template)
descriptionMeta description
openGraph / twitterSocial cards
robotsIndexing directives
alternates.canonicalCanonical URL

💡 Examples

Static metadata:

import type { Metadata } from "next";

export const metadata: Metadata = {
  title: { default: "My App", template: "%s · My App" },
  description: "Product docs and dashboard",
};

Dynamic metadata:

export async function generateMetadata({
  params,
}: {
  params: Promise<{ slug: string }>;
}): Promise<Metadata> {
  const { slug } = await params;
  return { title: slug };
}

Root layout title template:

// app/layout.tsx
export const metadata = {
  title: { default: "Home", template: "%s | Acme" },
};

⚠️ Pitfalls

  • Metadata in Client Components is ignored — keep it in Server layouts/pages.
  • Duplicate titles across nested layouts can fight; use template deliberately.
  • Social crawlers need absolute OG image URLs in production.

On this page