SEO and Metadata Strategy
When to use this skill
- Any page intended for public discovery (Tours, Destinations, Blog).
- Creating dynamic OpenGraph (OG) images for social media sharing.
Workflow
- Use
export const metadatafor static pages. - Use
export async function generateMetadatafor dynamic routes (tours/[id]). - Fetch the tour data inside
generateMetadatato populate tags.
Example (Dynamic Metadata)
export async function generateMetadata({ params }): Promise<Metadata> {
const { id } = await params;
const tour = await TourService.getById(id);
return {
title: `${tour.title} | Tourly`,
description: tour.description.substring(0, 160),
openGraph: {
images: [tour.images[0]],
},
};
}
Instructions
- Memoization: Next.js automatically deduplicates fetch requests between
generateMetadataand your Page component. - Defaults: Set a global
title.templateinroot layout.tsx(e.g.,%s | Tourly). - Canonical: Always include
canonicalURLs to prevent duplicate content issues.