Configurer les balises meta SEO dans React Router 7

Apprends à créer et gérer les balises meta title et description pour optimiser le SEO de tes pages avec React Router 7. Méthode claire et rapide.

5 min read
Déverrouillez votre potentiel

avec React Router 7

Vous en avez marre de...

❌ perdre du temps à chercher des informations éparpillées
❌ ne pas avoir de retour sur votre progression
Assistant IA spécialisé

Posez vos questions 24/7 à notre IA experte en React Router 7

Quiz interactifs

Validez vos acquis avec des quiz personnalisés et un feedback instantané

9 modules
57 leçons
Accès à vie
299.49
-35%

Pourquoi rajouter des balises meta ?

Les balises title et description aident Google, et les SERP à indéxer tes pages.

Dans cette leçon tu vas :

  1. Créer un composant <MetaTags> réutilisable.
  2. Injecter automatiquement title, description et image Open-Graph.
  3. Générer ces balises depuis tes loaders pour qu’elles soient dynamiques.
  4. Vérifier le rendu exact avec un outil gratuit.

Objectif : toute nouvelle page bénéficie d’un SEO basique en 30 s chrono.


1. Créer un composant MetaTags réutilisable

Plutôt que copier/coller trois balises dans chaque fichier, on centralise dans app/components/MetaTags.tsx.

app/components/MetaTags.tsx
1
export function MetaTags({
2
title,
3
description,
4
imageUrl = "https://algomax.fr/images/me-converted.webp",
5
}: {
6
title: string
7
description: string
8
imageUrl?: string
9
}) {
10
return (
11
<>
12
<title>{title}</title>
13
14
{/* SEO classique */}
15
<meta name="description" content={description} />
16
17
{/* Open Graph : réseaux sociaux (LinkedIn, Twitter, Slack…) */}
18
<meta property="og:title" content={title} />
19
<meta property="og:description" content={description} />
20
<meta property="og:image" content={imageUrl} />
21
</>
22
)
23
}

Pourquoi un composant plutôt qu’un export meta()

Depuis React 19, Remix/React Router recommande d’écrire les balises inline (plus simple, aucune API à maintenir). Nous suivons cette voie pour rester à jour.


2. Brancher MetaTags sur une page statique

Prenons la page d’accueil.

app/routes/index.tsx
1
import { MetaTags } from "~/components/MetaTags";
2
3
export default function Home() {
4
return (
5
<>
6
<MetaTags
7
title="Le site personnel de Virgile"
8
description="Je raconte ma vie de dev React JS, Remix et Tailwind."
9
/>
10
11
{/* contenu visuel de la page */}
12
<main className="px-8 py-4">
13
<h1 className="text-3xl font-bold">Bienvenue !</h1>
14
</main>
15
</>
16
);
17
}

Ouvre DevTools → onglet Elements<head> : tu dois voir un <title> + <meta name="description"> fraîchement générés.


3. Rendre les metas dynamiques pour un article

Les pages statiques c’est facile à implémenter. Comment. avec un blog et des pages dynamiques ? Créons un loader qui récupère l’article et passe ses données au composant.

app/routes/blog.$slug.tsx
1
import { MetaTags } from "~/components/MetaTags";
2
import { fetchArticle } from "~/server/articles.server";
3
4
export async function loader({ params }: Route.LoaderArgs) {
5
const article = await fetchArticle({ slug: params.slug });
6
if (!article)
7
throw new Response("Article introuvable", { status: 404 });
8
return article;
9
}
10
11
export default function ArticlePage() {
12
const article = useLoaderData<typeof loader>();
13
14
return (
15
<>
16
<MetaTags
17
title={article.title}
18
description={article.description}
19
imageUrl={article.image}
20
/>
21
22
{/* reste de la mise en page */}
23
<h1>{article.title}</h1>
24
</>
25
);
26
}

Désormais :

  • title + description changent pour chaque slug.

4. Rendre le listing cliquable sans casser la sémantique

Dans le transcript tu as vu un mini hack : un <Link> en position: absolute qui couvre la carte entière.

app/components/ArticleCard.tsx
1
import { Link, href } from "react-router";
2
3
export function ArticleCard({ article }: { article: Article }) {
4
return (
5
<article className="relative rounded-xl shadow-lg overflow-hidden">
6
<img src={article.image} alt={article.title} />
7
<h2 className="p-4 text-xl font-bold">{article.title}</h2>
8
9
{/* lien invisible sur toute la card */}
10
<Link
11
to={href("/blog/:slug", { slug: article.slug })}
12
className="absolute inset-0 z-10"
13
/>
14
</article>
15
);
16
}
  • Accessibilité OK (le h2 reste dans le flux).
  • SEO OK : le lien entoure réellement le titre de l’article.

5. Vérifier le rendu avec un outil gratuit

Installe l’extension Meta SEO Inspector (Chrome/Firefox).

  1. Rafraîchis la page /blog/react-router-7-et-seo.
  2. Clique sur l’icône → tu dois voir title, description, og:image.
  3. Zéro “missing tag” = mission accomplie.

Autre option : metatags.io te montre le rendu Google, Facebook, LinkedIn et Slack en collant simplement l’URL (ton site doit être mis en ligne).


6. Que faire des pages « Login » ou « Reset password » ?

Ces pages n’ont aucun intérêt à être référencées.

app/routes/login.tsx
1
import { MetaTags } from "~/components/MetaTags";
2
3
export default function Login() {
4
return (
5
<>
6
<MetaTags
7
title="Connexion – Algomax"
8
description="Accède à ton dashboard…"
9
/>
10
{/* formulaire */}
11
</>
12
);
13
}

On peut demander gentiment aux moteurs de ne pas indexer via :

{2} app/routes/login.tsx
1
<meta name="robots" content="noindex" />

7. Checklist rapide avant de pousser en production

✔︎Question
Chaque nouvelle route appelle <MetaTags> ?
Le titre contient < 60 caractères ?
La description < 160 caractères ?
Un og:image pertinent est fourni ?
Les pages sensibles possèdent noindex ?

Passe le script :

Terminal
1
npm run dev

…puis visite les pages clés, extension ouverte. ✅ = feu vert pour déployer.


8. Prochaine étape

Dans la leçon suivante nous verrons robots.txt et sitemap.xml (générés comme resource routes). Google saura quelles pages crawler… et lesquelles ignorer 😉.

Premium
Quiz interactif
Testez vos connaissances et validez votre compréhension du module avec notre quiz interactif.
1

Comprendre les concepts fondamentaux

Quelle est la principale différence entre les composants client et serveur dans React ?

Les composants client s'exécutent uniquement dans le navigateur
Les composants serveur peuvent utiliser useState
Les composants client sont plus rapides
Il n'y a aucune différence significative
2

Optimisation des performances

Quelle technique est recommandée pour éviter les rendus inutiles dans React ?

Utiliser React.memo pour les composants fonctionnels
Ajouter plus d'états locaux
Éviter d'utiliser les props
Toujours utiliser les class components
3

Architecture des données

Quel hook permet de gérer les effets de bord dans un composant React ?

useEffect
useState
useMemo
useContext
4

Gestion des erreurs

Comment implémenter la gestion des erreurs pour les requêtes API dans React ?

Utiliser try/catch avec async/await
Ignorer les erreurs
Toujours afficher un message d'erreur
Rediriger l'utilisateur
5

Déploiement et CI/CD

Quelle est la meilleure pratique pour déployer une application React en production ?

Utiliser un service CI/CD comme GitHub Actions
Copier les fichiers manuellement via FTP
Envoyer le code source complet
Ne jamais mettre à jour l'application

Débloquez ce quiz et tous les autres contenus premium en achetant ce cours