Dans cette leçon on va apprendre à référencer vos pages React Router 7 : créer la fonction meta pour titles, descriptions et images OG dynamiques.
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é
Dans cette leçon, tu vas découvrir comment ajouter des balises meta dans tes routes React Router 7 pour améliorer le référencement sur Google et la prévisualisation sur les réseaux sociaux (Twitter, Facebook, LinkedIn…). On voit :
meta
root.tsx
Les moteurs de recherche (Google, Bing…) et les réseaux sociaux lisent les balises <title>
et <meta name="description">
pour :
Sans ces balises, Google va extraire du contenu aléatoire de ta page, et tes partages sur Slack, Twitter, Facebook risquent d’être peu explicites.
root.tsx
Commence par définir un titre et une description par défaut dans le point d’entrée de ton app (root.tsx
). Ces valeurs seront utilisées si aucune route ne surcharge meta
.
1import { Meta, Links, Outlet, Scripts } from "react-router";23export function meta() {4return [5{ title: "Mon super site | Algomax" },6{ name: "description", content: "Découvre React Router 7 avec Algomax" },7];8}910// … dans ton composant Layout()11<head>12<Meta /> // ^? Insère les balises meta dynamiques13<Links />14</head>
Les balises définies ici servent de fallback. Toute route peut les remplacer
en exportant sa propre fonction meta
.
Pour une page statique, par exemple la liste des utilisateurs, ajoute un export meta()
dans app/routes/users.tsx
:
1export function meta() {2return [3{ title: "Liste des utilisateurs" },4{ name: "description", content: "Tous les utilisateurs enregistrés" },5{ property: "og:title", content: "Utilisateurs Algomax" },6];7}89export default function Users() {10// render…11}
Les balises renvoyées par cette fonction remplaceront celles du root.tsx
uniquement pour cette route.
Sur une route dynamique ($userSlug.tsx
), on utilise les données chargées par le loader
pour créer un titre personnalisé :
1import { useLoaderData } from "react-router";2import type { Route } from "./+types/users.$userSlug";34export async function loader({ params }: Route.LoaderArgs) {5const user = await getUserBySlug(params.userSlug);6if (!user) throw new Response("Not found", { status: 404 });7return { user };8}910export function meta({ data }: Route.MetaArgs<Route.Info>) {11if (!data) {12return [13{ title: "Utilisateur non trouvé" },14{ name: "description", content: "Ce profil n'existe pas" },15];16}17return [18{ title: `${data.user.name} • Profil` },19{20name: "description",21content: `Découvre le profil de ${data.user.name} sur Algomax`,22},23{24property: "og:image",25content: data.user.avatarUrl, // ^? URL de l’image de profil26},27];28}2930export default function UserProfile() {31const { user } = useLoaderData<typeof loader>();32// render…33}
Dans
meta({ data })
,data
est le résultat duloader
. Sidata
estundefined
à cause d’une erreur 404, on renvoie un meta adapté.
Ne référence pas une page 404 dans Google ! Dans le module SEO, tu verras comment
bloquer l’indexation avec robots.txt
ou <meta name="robots" content="noindex">
.
export function meta()
permet de définir toutes les balises meta pour une route<Meta />
dans root.tsx
injecte ces balises dans le <head>
/about.tsx
, ajoute un meta()
avec un titre et une description centrés sur ta formation./merci
), exporte un meta <meta name="robots" content="noindex" />
.users.$userSlug.tsx
pour inclure <meta property="og:image"
seulement si l’utilisateur a un coverUrl
.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 ?