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.
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é
Le bot de Google découvre déjà ta page d’accueil, puis clique sur chaque lien interne. Mais :
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.
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}
loader
; aucune balise React n’est rendue.href()
assure le typage et évite les fautes de routes.FRONTEND_URL
) sinon Google l’ignore.urlset
minimaliste : pas de lastmod
, pas de priority
– recommandé par les agences SEO que j’ai consultées : plus léger, plus rapide à parser.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,Disallow
bloque les pages sans valeur SEO,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.
1npm run dev2open http://localhost:5173/sitemap.xml3open http://localhost:5173/robots.txt
Tu dois voir :
<urlset>
;.txt
clair, content-type text/plain
.https://mon-domaine.com/sitemap.xml
.Google confirme : « Découvert : X URLs » Tu viens d’économiser des semaines de crawl aléatoire.
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. |
sitemap.xml
accessible sans auth.<loc>
absolues (HTTP S + domaine prod).robots.txt
bloque /login
, /register
, tous les slugs sensibles.serverEnv
validé par Zod pour éviter les URLs manquantes en prod.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 ⭐️
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 ?