Bonjour ! Dans la leçon précédente, nous avons établi pourquoi le rendu côté serveur (SSR) est fondamental pour le SEO, car il fournit aux moteurs de recherche une page HTML complète et directement indexable. Vous avez compris la différence critique entre le CSR, que vous connaissez bien avec React, et le SSR, que des frameworks comme Next.js nous permettent d'implémenter.
Aujourd'hui, nous passons de la théorie à la pratique. L'objectif est d'implémenter les balises meta essentielles (title, description, et Open Graph) dans une application React/Next.js. Ces balises sont la première chose que Google et les utilisateurs voient dans les résultats de recherche ou sur les réseaux sociaux. Elles sont donc cruciales pour le SEO et le taux de clics.
Grâce à votre expérience avec React, vous allez voir à quel point Next.js simplifie ce qui nécessiterait des bibliothèques externes (comme react-helmet) dans une application React standard.
1. L'API Metadata de Next.js : La pierre angulaire
Dans une application React classique (CSR), la gestion des balises de l'en-tête <head> pour chaque "page" est délicate, car il n'y a qu'un seul fichier index.html. Next.js, avec son App Router, résout ce problème de manière élégante grâce à son API Metadata.
Cette API vous permet de définir les métadonnées de chaque page directement dans vos composants, de manière statique ou dynamique. Next.js se charge ensuite de les placer correctement dans le <head> du HTML final généré côté serveur.
2. Métadonnées Statiques : Les bases pour chaque page
Commençons par le cas le plus simple : une page dont le titre et la description ne changent pas, comme une page "À propos" ou la page d'accueil.
Next.js utilise un système hiérarchique :
- Métadonnées globales : définies dans le fichier
layout.js(ou.tsx) à la racine. Elles servent de base et de fallback pour toutes les pages de votre site. - Métadonnées spécifiques : définies dans un fichier
page.js. Elles fusionnent avec les métadonnées du layout et remplacent les champs qui sont redéfinis (comme letitle).
La vidéo suivante montre très clairement ce mécanisme.
Next.js & SEO - Pourquoi Next est meilleur que React ?
Regardez ces extraits de la vidéo "Next.js & SEO" de la chaîne École du Web. Ils montrent comment définir des métadonnées globales dans le layout.js et comment les surcharger pour une page spécifique.
Regardez de 00:47 à 02:02. Concentrez-vous sur la syntaxe de l'objet metadata et comment le fait de le définir dans un fichier page.js surcharge le titre défini dans layout.js.
Voici comment cela se traduit en code :
Exemple pour des métadonnées globales dans app/layout.js:
// app/layout.js
export const metadata = {
title: 'Mon Super Site', // Titre par défaut
description: 'La description par défaut de mon super site.',
};
export default function RootLayout({ children }) {
return (
<html lang="fr">
<body>{children}</body>
</html>
);
}
Exemple pour surcharger les métadonnées dans app/about/page.js:
// app/about/page.js
export const metadata = {
title: 'À Propos - Mon Super Site', // Titre spécifique pour cette page
description: 'Découvrez l\'histoire de notre entreprise.',
};
export default function AboutPage() {
return <h1>À Propos de nous</h1>;
}
Avec cette configuration, la page "À propos" aura son propre titre, mais si d'autres métadonnées étaient définies dans le layout (par exemple, des mots-clés), elle les hériterait.
3. Optimiser pour les Réseaux Sociaux avec Open Graph
Lorsque vous partagez un lien sur des plateformes comme LinkedIn, Facebook ou X (Twitter), la plateforme scanne la page pour créer un aperçu avec une image, un titre et une description. Le protocole Open Graph (OG) permet de contrôler précisément cet aperçu.

Next.js intègre la gestion des balises Open Graph directement dans son API Metadata.
Next.js & SEO - Pourquoi Next est meilleur que React ?
La suite de la vidéo "Next.js & SEO" explique comment ajouter des métadonnées Open Graph.
Regardez la section de 02:02 à 02:46. Notez comment l'objet openGraph est simplement une propriété de l'objet metadata principal. Next.js génère ensuite automatiquement toutes les balises og:* correspondantes.
Voici un exemple complet pour notre page "À propos", enrichie pour les réseaux sociaux :
Exemple dans app/about/page.js avec Open Graph:
// app/about/page.js
export const metadata = {
title: 'À Propos - Mon Super Site',
description: 'Découvrez l\'histoire de notre entreprise.',
openGraph: {
title: 'À Propos - Mon Super Site',
description: 'Découvrez l\'histoire de notre entreprise et de notre équipe passionnée.',
images: [
{
url: 'https://www.votresite.com/images/equipe.jpg', // URL absolue de l'image
width: 1200,
height: 630,
alt: 'L\'équipe de Mon Super Site',
},
],
locale: 'fr_FR',
type: 'website',
},
};
export default function AboutPage() {
return <h1>À Propos de nous</h1>;
}
4. Métadonnées Dynamiques : S'adapter au contenu
Le vrai défi se présente avec les pages dont le contenu est dynamique : articles de blog, fiches produits, profils utilisateurs, etc. Le titre et la description doivent correspondre au contenu spécifique de la page.
Pour cela, Next.js propose la fonction asynchrone generateMetadata. Cette fonction s'exécute côté serveur et vous donne accès aux paramètres de la route (par exemple, l'ID d'un produit).
L'article et la vidéo ci-dessous vous montrent en détail comment implémenter cette fonction.
Optimiser le SEO de votre site Next.js en 2025 : Le Guide Ultime
L'article "Optimiser le SEO de votre site Next.js" de Lodgic Dev fournit un exemple de code concis pour generateMetadata ainsi que des conseils pratiques pour rédiger des balises efficaces.
Lisez la section "Balises Meta Essentielles". Concentrez-vous sur l'exemple de code generateMetadata et les conseils pour les balises title et description (longueur, mots-clés, etc.).
La vidéo suivante vous guidera pas à pas dans la création d'une page à métadonnées dynamiques.
Apprendre NextJS - 12. Metadata
La vidéo "Apprendre NextJS - 12. Metadata" de Ben BK est excellente pour visualiser l'implémentation de generateMetadata. L'exemple est très clair et pratique.
Regardez de 02:29 à 04:22. Suivez comment l'auteur transforme une page produit statique en une page avec un titre dynamique qui inclut l'ID du produit récupéré depuis l'URL.
Exemple pour une page produit dynamique app/products/[id]/page.js:
// app/products/[id]/page.js
// Fonction pour simuler la récupération des données d'un produit
async function getProduct(id) {
// Dans une vraie application, vous feriez un appel à votre API Spring Boot ici.
// Exemple: const res = await fetch(`https://api.monsite.com/products/${id}`);
// const product = await res.json();
// return product;
return {
id: id,
name: `Produit Fantastique #${id}`,
shortDescription: `Ceci est la description courte et percutante du Produit Fantastique #${id}.`,
imageUrl: `https://picsum.photos/seed/${id}/1200/630`,
};
}
export async function generateMetadata({ params }) {
const product = await getProduct(params.id);
return {
title: `${product.name} | Notre Boutique`,
description: product.shortDescription,
openGraph: {
title: `${product.name} | Notre Boutique`,
description: product.shortDescription,
images: [
{
url: product.imageUrl,
width: 1200,
height: 630,
alt: product.name,
}
],
},
};
}
export default async function ProductPage({ params }) {
const product = await getProduct(params.id);
return (
<div>
<h1>{product.name}</h1>
<p>{product.shortDescription}</p>
{/* Reste du contenu de la page produit */}
</div>
);
}
Ce qui est puissant ici, c'est que generateMetadata s'exécute sur le serveur. Lorsque le robot de Google arrive sur /products/123, Next.js a déjà appelé votre API, construit les métadonnées avec les informations du produit 123, et les a insérées dans le HTML avant de l'envoyer. C'est l'essence même du SSR appliqué au SEO.
Conclusion
Vous avez maintenant les outils pratiques pour gérer l'un des aspects les plus fondamentaux du SEO technique dans Next.js. Vous avez transformé la nécessité théorique du SSR, vue dans la leçon précédente, en une implémentation concrète.
Points clés à retenir :
- API
Metadata: La manière unifiée de Next.js pour gérer toutes les balises<head>, en remplaçant des outils commereact-helmet. - Métadonnées statiques : Exportez un objet
const metadatadepuis vos fichierslayout.js(pour les valeurs par défaut) etpage.js(pour les valeurs spécifiques à une page). - Métadonnées dynamiques : Exportez une fonction
async function generateMetadata({ params })pour générer des métadonnées basées sur des données dynamiques (ID de produit, slug d'article, etc.) récupérées côté serveur. - Open Graph : Intégrez un objet
openGraphdans vos métadonnées pour contrôler l'affichage de vos liens sur les réseaux sociaux, un facteur clé pour le marketing et le trafic.
Prochaine étape :
Maintenant que vous maîtrisez les balises de base, nous allons aller plus loin pour aider Google à comprendre la nature de votre contenu. Dans la prochaine leçon, nous apprendrons à structurer les données avec JSON-LD (Schema.org) pour générer des rich snippets. Ce sont ces résultats de recherche enrichis (avec des étoiles d'avis, des prix, des dates d'événements, etc.) qui peuvent considérablement augmenter votre visibilité et votre taux de clics.