Sitemap XML et robots.txt dans React Router 7 : SEO efficace
Apprends à générer sitemap XML et robots.txt sur-mesure avec React Router 7 pour booster ton SEO et accélérer l’indexation Google.
À quoi servent les fichiers sitemap.xml et un robots.txt ?
Le bot de Google découvre déjà ta page d’accueil, puis clique sur chaque lien interne. Mais :
- ce crawl peut prendre des semaines ;
- il gaspille son budget sur tes pages de connexion et d’inscription, sans intérêt business.
Deux fichiers très simples règlent ça :
| Fichier | Rôle |
|---|---|
sitemap.xml | Liste exhaustive des pages que tu veux indexer. |
robots.txt | Règles « autorise / bloque » pour tous les crawlers. |
Grâce aux resource routes de React Router 7, ces fichiers sont générés à la volée côté serveur – zéro build script externe.
1. Créer une resource route sitemap.xml
Une resource route n’exporte pas de composant React par défaut : elle renvoie une Response.
Ajoute le fichier suivant :
1import { href } from "react-router"; // helper typé2import { serverEnv } from "~/server/env.server";// variables d'env validées par Zod34// ① Pages que tu souhaites indexer5const pages = [6href("/"), // page d'accueil7href("/blog"), // listing blog8// tu peux générer dynamiquement les /blog/:slug depuis la BD ici9];1011export function loader() {12const { FRONTEND_URL } = serverEnv;1314// ② Transforme chaque URL en bloc <url>15const urls = pages16.map(17(path) => `<url>18<loc>${FRONTEND_URL}${path}</loc>19</url>`20)21.join("\n");2223// ③ Enveloppe le tout dans <urlset>24const xml = `<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">25${urls}26</urlset>`;2728// ④ Retourne la réponse XML29return new Response(xml, {30headers: { "Content-Type": "application/xml" },31});32}
Points clés reformulés du transcript
- On exporte uniquement
loader; aucune balise React n’est rendue. href()assure le typage et évite les fautes de routes.- L’URL doit être absolue (
FRONTEND_URL) sinon Google l’ignore. - Un
urlsetminimaliste : pas delastmod, pas depriority– recommandé par les agences SEO que j’ai consultées : plus léger, plus rapide à parser.
2. Générer robots.txt
Même technique, mais en texte brut :
1import { serverEnv } from "~/server/env.server";23export function loader() {4const { FRONTEND_URL } = serverEnv;56const txt = `7User-Agent: *8Allow: /9Disallow: /login10Disallow: /register1112Sitemap: ${FRONTEND_URL}/sitemap.xml13`.trim();1415return new Response(txt, {16headers: { "Content-Type": "text/plain" },17});18}
Ici :
Allow: /laisse crawler l’ensemble du site,Disallowbloque les pages sans valeur SEO,- la dernière ligne renvoie vers ton sitemap.
Note
Ces règles s’appliquent à tous les robots (User-Agent: *).
Tu peux affiner par bot (ex. User-Agent: ChatGPT-User) mais c’est rarement utile.
3. Tester localement
1npm run dev2open http://localhost:5173/sitemap.xml3open http://localhost:5173/robots.txt
Tu dois voir :
- un XML propre, indenté, commençant par
<urlset>; - un
.txtclair, content-typetext/plain.
4. Déclarer le sitemap à Google
- Connecte-toi à la Search Console.
- Ajoute ton domaine (racine + version HTTPS).
- Menu « Sitemaps » → colle
https://mon-domaine.com/sitemap.xml.
Google confirme : « Découvert : X URLs » Tu viens d’économiser des semaines de crawl aléatoire.
5. Foire aux questions
| Question | Réponse courte |
|---|---|
Je veux mes articles /blog/:slug | Boucle sur await prisma.article.findMany() et pousse chaque slug dans pages. |
Dois-je ajouter <changefreq> ? | Non. Google l’ignore la plupart du temps. Plus léger = mieux. |
6. Checklist avant prod
-
sitemap.xmlaccessible sans auth. - Balises
<loc>absolues (HTTP S + domaine prod). -
robots.txtbloque/login,/register, tous les slugs sensibles. - Entrée Search Console créée et sitemap soumis.
- Pipeline CI déployée (voir le module Déploiement).
Tip
7. Ce que tu as appris
- Resource routes → fichiers statiques dynamiques sans composant React.
- Génération XML et txt côté serveur avec les bons headers.
- Enrichir ton SEO sans dépendances tierces.
- Utiliser
serverEnvvalidé par Zod pour éviter les URLs manquantes en prod.
Important
Pousse ces deux nouveaux fichiers, vérifie la CI et file soumettre ton
sitemap !
Dans la prochaine leçon on attaquera les données structurées : JSON-LD
Article, Organization, Breadcrumb.
C’est la cerise qui fait briller ton résultat dans la SERP ⭐️
Comprendre les concepts fondamentaux
Quelle est la principale différence entre les composants client et serveur dans React ?
Optimisation des performances
Quelle technique est recommandée pour éviter les rendus inutiles dans React ?
Architecture des données
Quel hook permet de gérer les effets de bord dans un composant React ?