Generate dynamic SEO metadata based on page params and fetched data.
import type { Metadata } from class=class="text-emerald-400">"text-emerald-400">'next'
interface PageProps {
params: Promise<{ slug: string }>
}
async function getPost(slug: string) {
const res = await fetch(class="text-emerald-400">`https:class=class="text-emerald-400">"text-gray">//api.example.com/posts/${slug}`, {
next: { revalidate: 3600 },
})
if (!res.ok) return null
return res.json()
}
export async function generateMetadata({ params }: PageProps): Promise<Metadata> {
const { slug } = await params
const post = await getPost(slug)
if (!post) return { title: class=class="text-emerald-400">"text-emerald-400">'Not Found' }
return {
title: class="text-emerald-400">`${post.title} | My Blog`,
description: post.excerpt,
openGraph: {
title: post.title,
description: post.excerpt,
images: [post.coverImage],
},
}
}
export default async function PostPage({ params }: PageProps) {
const { slug } = await params
const post = await getPost(slug)
if (!post) return <div>Not found</div>
return <article><h1>{post.title}</h1><p>{post.content}</p></article>
}Use generateMetadata in any page.tsx to set dynamic titles, descriptions, and Open Graph tags. Next.js calls this function at build time for static pages and at request time for dynamic ones.
Let's discuss how we can bring your idea to life. From initial concept to production-ready product — we've got you covered.