0Pricing
React Academy · Leçon

API de métadonnées et SEO dans l’App Router

Exportez des objets de métadonnées statiques et dynamiques pour définir les titres, descriptions et balises OG des pages.

API de métadonnées et SEO dans l’App Router est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage React Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours React Academy comprend 4 leçons au total.

Pourquoi les métadonnées sont importantes

De bonnes métadonnées (titre, description, balises OG) améliorent le classement SEO et les aperçus lors des partages sur les réseaux sociaux. Le routeur d’application de Next.js fournit une API Metadata avec vérification de types qui génère les balises <head> côté serveur.

Export de métadonnées statiques

Exportez un objet metadata depuis n’importe quel page.tsx ou layout.tsx pour définir les balises statiques de ce segment.

import type { Metadata } from 'next';

export const metadata: Metadata = {
  title: 'My App',
  description: 'The best app ever built',
  keywords: ['react', 'nextjs', 'typescript'],
};

export default function Page() { return <main>Hello</main>; }

Modèles de titres

Utilisez title.template dans une mise en page afin que les pages enfants obtiennent automatiquement un titre formaté sans répéter le nom du site.

// app/layout.tsx
export const metadata: Metadata = {
  title: {
    template: '%s | My App',
    default: 'My App',
  },
};

// app/about/page.tsx
export const metadata: Metadata = {
  title: 'About', // renders as "About | My App"
};

Métadonnées dynamiques avec generateMetadata

Exportez une fonction asynchrone generateMetadata pour les routes qui nécessitent des balises fondées sur les données : elle reçoit params et les métadonnées parentes.

export async function generateMetadata({ params }: { params: { id: string } }): Promise<Metadata> {
  const product = await getProduct(params.id);
  return {
    title: product.name,
    description: product.summary,
    openGraph: {
      title: product.name,
      images: [product.imageUrl],
    },
  };
}

Balises Open Graph

La clé openGraph définit les balises OG pour les partages sur Facebook, LinkedIn et Slack.

export const metadata: Metadata = {
  openGraph: {
    title: 'My Product',
    description: 'Buy now!',
    url: 'https://example.com/product',
    siteName: 'My App',
    images: [{ url: 'https://example.com/og.png', width: 1200, height: 630 }],
    type: 'website',
    locale: 'en_US',
  },
};

Balises Twitter Card

La clé twitter définit les métadonnées spécifiques aux cartes Twitter pour afficher des aperçus enrichis dans les tweets.

twitter: {
  card: 'summary_large_image',
  title: 'My Product',
  description: 'Buy now!',
  images: ['https://example.com/twitter.png'],
  creator: '@myhandle',
},

Robots et URL canoniques

Contrôlez l’exploration avec robots et définissez des URL canoniques pour éviter les pénalités liées au contenu dupliqué.

export const metadata: Metadata = {
  robots: { index: true, follow: true, googleBot: { index: true } },
  alternates: { canonical: 'https://example.com/products' },
};

Favicons et icônes

Placez les fichiers d’icônes dans app/ en utilisant les noms réservés (icon.png, apple-icon.png, favicon.ico) ou déclarez-les dans metadata.icons.

// Convention: place app/icon.png → auto-detected as favicon

// Or declare explicitly:
export const metadata: Metadata = {
  icons: {
    icon: '/icon.png',
    apple: '/apple-icon.png',
    shortcut: '/shortcut-icon.png',
  },
};

Générer des images OG avec ImageResponse

Utilisez ImageResponse depuis next/og dans un route.ts pour générer des images OG dynamiques avec du JSX rendu en PNG.

// app/og/route.ts
import { ImageResponse } from 'next/og';

export async function GET(req: Request) {
  const { searchParams } = new URL(req.url);
  const title = searchParams.get('title') ?? 'Default';
  return new ImageResponse(
    <div style={{ fontSize: 48, background: '#fff', width: '100%', height: '100%' }}>
      {title}
    </div>,
    { width: 1200, height: 630 }
  );
}

Données structurées (JSON-LD)

Ajoutez des données structurées JSON-LD en injectant une balise <script> dans le JSX de la page — elles ne font pas partie de l’API Metadata, mais fonctionnent avec celle-ci.

export default function ProductPage({ product }) {
  const jsonLd = {
    '@context': 'https://schema.org',
    '@type': 'Product',
    name: product.name,
    price: product.price,
  };
  return (
    <>
      <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} />
      <h1>{product.name}</h1>
    </>
  );
}

Vérifier les métadonnées

Utilisez les DevTools du navigateur (onglet Réseau, affichage de la source HTML) ou des outils comme opengraph.xyz pour vérifier que vos métadonnées sont correctement rendues dans le HTML du serveur.

Vérification rapide

Quelle fonctionnalité de l’API Metadata de Next.js permet aux pages enfants d’hériter d’un suffixe de titre partagé et de le personnaliser, comme « About | My App » ?

Récapitulatif

Exportez metadata pour les balises statiques ou generateMetadata() pour les balises dynamiques. Utilisez title.template dans les mises en page pour des titres DRY, définissez openGraph et twitter pour les aperçus sociaux, et utilisez ImageResponse dans un gestionnaire de route pour fournir des images OG dynamiques.

Questions Fréquemment Posées

La leçon « API de métadonnées et SEO dans l’App Router » est-elle gratuite ?

Oui — le texte complet de « API de métadonnées et SEO dans l’App Router » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours React Academy, passe à CoddyKit PRO. Le cours React Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « API de métadonnées et SEO dans l’App Router » ?

Exportez des objets de métadonnées statiques et dynamiques pour définir les titres, descriptions et balises OG des pages. Tu pratiques React Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer React Academy ?

Aucune expérience préalable n'est requise. React Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « API de métadonnées et SEO dans l’App Router » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon React Academy ?

Oui. Chaque leçon React Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Conventions de fichiers de l’App Router
  2. Composants serveur et client dans Next.js
  3. Routes dynamiques et groupes de routes
  4. API de métadonnées et SEO dans l’App Router
← Retour à React Academy