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.

4 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%

À 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 :

FichierRôle
sitemap.xmlListe exhaustive des pages que tu veux indexer.
robots.txtRè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 :

app/routes/[sitemap.xml].tsx
1
import { href } from "react-router"; // helper typé
2
import { serverEnv } from "~/server/env.server";// variables d'env validées par Zod
3
4
// ① Pages que tu souhaites indexer
5
const pages = [
6
href("/"), // page d'accueil
7
href("/blog"), // listing blog
8
// tu peux générer dynamiquement les /blog/:slug depuis la BD ici
9
];
10
11
export function loader() {
12
const { FRONTEND_URL } = serverEnv;
13
14
// ② Transforme chaque URL en bloc <url>
15
const urls = pages
16
.map(
17
(path) => `<url>
18
<loc>${FRONTEND_URL}${path}</loc>
19
</url>`
20
)
21
.join("\n");
22
23
// ③ Enveloppe le tout dans <urlset>
24
const xml = `<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
25
${urls}
26
</urlset>`;
27
28
// ④ Retourne la réponse XML
29
return new Response(xml, {
30
headers: { "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 urlset minimaliste : pas de lastmod, pas de priority – 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 :

app/routes/[robots.txt].tsx
1
import { serverEnv } from "~/server/env.server";
2
3
export function loader() {
4
const { FRONTEND_URL } = serverEnv;
5
6
const txt = `
7
User-Agent: *
8
Allow: /
9
Disallow: /login
10
Disallow: /register
11
12
Sitemap: ${FRONTEND_URL}/sitemap.xml
13
`.trim();
14
15
return new Response(txt, {
16
headers: { "Content-Type": "text/plain" },
17
});
18
}

Ici :

  • Allow: / laisse crawler l’ensemble du site,
  • Disallow bloque les pages sans valeur SEO,
  • la dernière ligne renvoie vers ton sitemap.

3. Tester localement

Terminal
1
npm run dev
2
open http://localhost:5173/sitemap.xml
3
open http://localhost:5173/robots.txt

Tu dois voir :

  • un XML propre, indenté, commençant par <urlset>;
  • un .txt clair, content-type text/plain.

4. Déclarer le sitemap à Google

  1. Connecte-toi à la Search Console.
  2. Ajoute ton domaine (racine + version HTTPS).
  3. 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

QuestionRéponse courte
Je veux mes articles /blog/:slugBoucle 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.xml accessible sans auth.
  • Balises <loc> absolues (HTTP S + domaine prod).
  • robots.txt bloque /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).

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 serverEnv validé par Zod pour éviter les URLs manquantes en prod.
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