đ Ajout de MĂ©tadonnĂ©es Dynamiques avec generateMetadata
dans Next.js
Dans Next.js 13+, generateMetadata
permet de gĂ©nĂ©rer dynamiquement les mĂ©tadonnĂ©es dâune page en fonction de paramĂštres (ex : un slug
dâarticle de blog) ou dâune requĂȘte Ă une API.
1ïžâŁ Pourquoi utiliser generateMetadata
?
â
SEO dynamique : Permet dâadapter le title
, description
et og:image
Ă chaque page.
â
Performance : Métadonnées générées cÎté serveur, avant le rendu de la page.
â
Optimisation des réseaux sociaux : Chaque page peut avoir une image de partage unique.
2ïžâŁ Exemples dâutilisation
đ Cas 1 : MĂ©tadonnĂ©es basĂ©es sur un slug
đ But : Chaque page dâarticle de blog aura ses propres mĂ©tadonnĂ©es (title
, description
, og:image
).
import { Metadata } from "next";
type Props = {
params: { slug: string };
};
// Simulation de rĂ©cupĂ©ration des donnĂ©es dâun article (via API ou base de donnĂ©es)
async function getArticle(slug: string) {
const articles = {
"nextjs-guide": {
title: "Guide Next.js 13+ : Tout savoir",
description: "Découvrez toutes les nouveautés de Next.js 13 avec App Router.",
image: "/nextjs-guide.jpg",
},
"seo-optimization": {
title: "SEO en 2025 : Les bonnes pratiques",
description: "Optimisez votre site pour les moteurs de recherche avec ces conseils.",
image: "/seo-2025.jpg",
},
};
return articles[slug] || { title: "Article introuvable", description: "", image: "" };
}
// Générer dynamiquement les métadonnées
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const article = await getArticle(params.slug);
return {
title: article.title,
description: article.description,
openGraph: {
title: article.title,
description: article.description,
images: [{ url: article.image }],
},
};
}
export default function BlogPost({ params }: Props) {
return (
<div>
<h1>Article : {params.slug}</h1>
<p>Contenu de lâarticle...</p>
</div>
);
}
â Effet :
- Si on visite
/blog/nextjs-guide
, la page aura :- title : Guide Next.js 13+ : Tout savoir
- description : Découvrez toutes les nouveautés de Next.js 13 avec App Router.
- og:image :
/nextjs-guide.jpg
đ Cas 2 : MĂ©tadonnĂ©es basĂ©es sur une API externe
đ But : RĂ©cupĂ©rer les mĂ©tadonnĂ©es dâun produit depuis une API.
import { Metadata } from "next";
type Props = {
params: { id: string };
};
async function fetchProduct(id: string) {
const res = await fetch(`https://fakestoreapi.com/products/${id}`);
const product = await res.json();
return product;
}
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const product = await fetchProduct(params.id);
return {
title: product.title,
description: product.description,
openGraph: {
title: product.title,
description: product.description,
images: [{ url: product.image }],
},
};
}
export default async function ProductPage({ params }: Props) {
const product = await fetchProduct(params.id);
return (
<div>
<h1>{product.title}</h1>
<p>{product.description}</p>
<img src={product.image} alt={product.title} width={300} />
</div>
);
}
â Effet :
- Pour
/product/1
, la page affiche les métadonnées du produit récupérées via API. - Optimisation SEO et réseaux sociaux (
og:title
,og:image
).
đŻ Conclusion : Pourquoi utiliser generateMetadata
?
â
SEO dynamique et performant (cÎté serveur).
â
Personnalisation des métadonnées par page.
â
Optimisé pour le partage sur les réseaux sociaux (Open Graph, Twitter Card).