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.
avec React Router 7
Posez vos questions 24/7 à notre IA experte en React Router 7
Validez vos acquis avec des quiz personnalisés et un feedback instantané
Les balises title
et description
aident Google, et les SERP à indéxer tes pages.
Dans cette leçon tu vas :
<MetaTags>
réutilisable.title
, description
et image Open-Graph.Objectif : toute nouvelle page bénéficie d’un SEO basique en 30 s chrono.
Plutôt que copier/coller trois balises dans chaque fichier,
on centralise dans app/components/MetaTags.tsx
.
1export function MetaTags({2title,3description,4imageUrl = "https://algomax.fr/images/me-converted.webp",5}: {6title: string7description: string8imageUrl?: string9}) {10return (11<>12<title>{title}</title>1314{/* SEO classique */}15<meta name="description" content={description} />1617{/* 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}
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.
L’ancienne signature export const meta: MetaFunction = () => […]
fonctionne toujours. Dans une prochaîne leçon, nous l'utiliserons de nouveau.
Prenons la page d’accueil.
1import { MetaTags } from "~/components/MetaTags";23export default function Home() {4return (5<>6<MetaTags7title="Le site personnel de Virgile"8description="Je raconte ma vie de dev React JS, Remix et Tailwind."9/>1011{/* 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.
h1
venuLes 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.
1import { MetaTags } from "~/components/MetaTags";2import { fetchArticle } from "~/server/articles.server";34export async function loader({ params }: Route.LoaderArgs) {5const article = await fetchArticle({ slug: params.slug });6if (!article)7throw new Response("Article introuvable", { status: 404 });8return article;9}1011export default function ArticlePage() {12const article = useLoaderData<typeof loader>();1314return (15<>16<MetaTags17title={article.title}18description={article.description}19imageUrl={article.image}20/>2122{/* reste de la mise en page */}23<h1>{article.title}</h1>24</>25);26}
Désormais :
title
+ description
changent pour chaque slug.Dans le transcript tu as vu un mini hack :
un <Link>
en position: absolute
qui couvre la carte entière.
1import { Link, href } from "react-router";23export function ArticleCard({ article }: { article: Article }) {4return (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>89{/* lien invisible sur toute la card */}10<Link11to={href("/blog/:slug", { slug: article.slug })}12className="absolute inset-0 z-10"13/>14</article>15);16}
h2
reste dans le flux).Installe l’extension Meta SEO Inspector (Chrome/Firefox).
/blog/react-router-7-et-seo
.title
, description
, og:image
.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).
Ces pages n’ont aucun intérêt à être référencées.
1import { MetaTags } from "~/components/MetaTags";23export default function Login() {4return (5<>6<MetaTags7title="Connexion – Algomax"8description="Accède à ton dashboard…"9/>10{/* formulaire */}11</>12);13}
On peut demander gentiment aux moteurs de ne pas indexer via :
1<meta name="robots" content="noindex" />
Indexer les pages d’authentification gaspille le budget de crawl
et peut exposer des URL indésirables dans la SERP.
✔︎ | 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 :
1npm run dev
…puis visite les pages clés, extension ouverte. ✅ = feu vert pour déployer.
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 😉.
Push tes changements (branche dev
ou main
).
Observe la CI, puis partage l’URL sur Slack :
si tu vois l’image et le titre corrects, tu viens de poser la première pierre
de ton SEO.
Quelle est la principale différence entre les composants client et serveur dans React ?
Quelle technique est recommandée pour éviter les rendus inutiles dans React ?
Quel hook permet de gérer les effets de bord dans un composant React ?
Comment implémenter la gestion des erreurs pour les requêtes API dans React ?
Quelle est la meilleure pratique pour déployer une application React en production ?