foundation
Metadata
Generate titles, descriptions, Open Graph data, canonical links, and route-specific metadata safely.
The Metadata API in App Router generates `<title>`, descriptions, Open Graph, Twitter cards, robots, and canonical links from static exports or `generateMetadata` async functions per route.
export async function generateMetadata({ params }: { params: { slug: string } }) {
const post = await getPost(params.slug);
return { title: post.title, description: post.summary, alternates: { canonical: post.url } };
}
Dynamic metadata must not leak private data into HTML for unauthorized viewers.
On interviews: static versus dynamic metadata, canonical URLs, and social preview debugging.
Common pitfalls: duplicate titles across routes, missing OG images, and client-only title updates for SEO-critical pages.
The trade-off is build-time simplicity versus per-request metadata cost.
Checklist:
- Unique title and description per route.
- Canonical for duplicate paths.
- OG image with stable absolute URL.
- generateMetadata respects auth scope.