Skip to Content
🎉 Utilisez JS efficacement →
Next.jsSEO 📈generateMetadata

🚀 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).

app/blog/[slug]/page.tsx
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.

app/product/[id]/page.tsx
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).

mis Ă  jour le