Trois requêtes vers /sitemap.xml ont reçu un 404 sur ce site pendant les 14,8 jours de journaux que nous avons étudiés. Notre robots.txt renvoie les robots vers sitemap-index.xml, le nom de fichier que notre générateur écrit : les clients qui ont demandé le nom conventionnel devinaient, et devinaient mal. La correction tenait en une ligne de notre script de build. La leçon dépasse un nom de fichier : un sitemap que les robots ne trouvent pas, ou qui liste des URL que vous ne voudriez pas voir indexées, ne sert à personne.
Ce que Google fait d’un sitemap
Google parle d’un sitemap comme d’un « simple indice », pas d’un ordre. Il ne promet pas d’explorer ni d’indexer chaque URL que vous listez, et il trouve de toute façon la plupart des pages par les liens. Sur un petit site où chaque page est liée depuis une autre, le sitemap n’est pas ce qui rend l’exploration possible. Il vous donne une liste avec laquelle comparer le site, et un endroit où Google lit vos URL et leurs dates de modification.
Le format est simple. Un sitemap peut être un fichier XML, un flux RSS ou Atom, ou une simple liste d’URL en texte, et chaque fichier peut contenir jusqu’à 50 000 URL ou 50 Mo non compressés. Les URL doivent être absolues et le fichier en UTF-8. Parmi les champs facultatifs, Google n’utilise lastmod que s’il est constamment exact, et il ignore complètement priority et changefreq : inutile de passer du temps à les régler.
Le sitemap est aussi le plus faible des signaux que Google cite pour choisir entre des URL dupliquées. Les redirections et rel=canonical passent avant lui. Listez la version canonique de chaque page, et réglez les doublons ailleurs : balise canonical et URL dupliquées explique comment.
Un fichier minimal valide
Voici tout ce dont un petit site a besoin :
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/</loc>
<lastmod>2026-10-07</lastmod>
</url>
<url>
<loc>https://example.com/guides/xml-sitemap-guide/</loc>
<lastmod>2026-10-13</lastmod>
</url>
</urlset>
Réglez lastmod sur la date à laquelle le contenu a changé d’une façon qu’un lecteur remarquerait, pas sur la date de génération du fichier. Un générateur qui appose la date du jour sur chaque URL rend le champ inutile, et Google ne l’utilise que s’il se montre fiable. Si une URL contient une esperluette, écrivez-la &, comme dans n’importe quel fichier XML.
Placez le fichier à la racine du site. Le protocole sitemap limite un fichier aux URL situées à son propre chemin ou en dessous : /catalog/sitemap.xml ne peut donc pas lister des pages sous /news/, alors qu’un fichier à la racine peut tout lister.
Ce qui entre, ce qui reste dehors
Notre règle est courte : seulement des pages canoniques, indexables, qui répondent 200.
| À inclure | À laisser de côté | Pourquoi |
|---|---|---|
| Les URL qui répondent 200 | Les URL redirigées (301, 302), les pages 404 et 410 | Le sitemap doit lister la destination, pas le chemin pour y arriver |
| La version canonique unique de chaque page | Les variantes avec paramètres, session, impression ou suivi | Les doublons éparpillent le signal |
| Les pages que vous voulez voir dans les résultats | Les pages qui portent noindex | Vous demanderiez à Google d’indexer et de ne pas indexer la même URL |
| Les pages que Google a le droit d’explorer | Les URL bloquées dans robots.txt | Même contradiction, et Google ne peut de toute façon pas voir la page |
| Les guides, les outils, les pages de catégorie, les pages qui portent du contenu | Remerciement, connexion, panier, résultats de recherche interne, archives de tags vides | Des pages sans issue ou sans contenu propre : la règle publicitaire de Google cite d’ailleurs les pages de remerciement parmi les pages sans issue |
Une fois le fichier propre, sa longueur devient un chiffre utile. Si votre sitemap liste 40 pages et que la Search Console en rapporte bien moins d’indexées, l’écart est votre liste de tâches. Un sitemap gonflé masque ce signal.
Les erreurs qui font perdre son temps à un sitemap
Le mauvais protocole ou le mauvais hôte. Un site servi sur https://example.com dont le sitemap liste des URL en http:// ou en www liste en réalité des redirections. Les générateurs construisent souvent les URL à partir d’une adresse de site configurée : vérifiez d’abord ce réglage.
Un slash final qui ne correspond pas à celui du site. Si /guides/xml-sitemap-guide redirige vers /guides/xml-sitemap-guide/, le sitemap doit contenir la seconde forme, celle que le serveur finit par servir.
Des pages redirigées, supprimées ou en noindex restées dans le fichier. Les pages bougent, et le sitemap est la dernière chose que l’on met à jour. Le générer à chaque build, à partir de la même source que les pages, supprime toute cette famille d’erreurs.
Un lastmod qui ne change jamais, ou qui change toujours. Les deux habituent Google à l’ignorer.
Un sitemap que personne ne trouve. Envoyer le fichier sur le serveur ne suffit pas. Il faut le déclarer dans robots.txt, le soumettre dans la Search Console, ou le placer là où un robot regarde.
Notre cas : un sitemap au mauvais nom
Notre générateur écrit sitemap-index.xml, qui pointe vers le fichier enfant sitemap-0.xml. Notre robots.txt déclare l’index. Les robots qui lisent la ligne Sitemap: le trouvent. Les 3 requêtes vers /sitemap.xml venaient de clients qui ont sauté la ligne et tenté le nom habituel, et ils ont reçu un 404.
Nous l’avons corrigé avec une étape de build qui copie l’index vers /sitemap.xml, si bien que les deux adresses renvoient le même fichier. C’est un petit changement, et nous ne l’avons trouvé que parce que nous lisons nos journaux. Le vérificateur AdSense suit le même ordre qu’un robot soigneux : il utilise d’abord les lignes Sitemap: du robots.txt, et ce n’est qu’à défaut qu’il essaie /sitemap.xml puis /sitemap_index.xml. Un site dont le fichier porte un autre nom et qui ne le déclare pas dans robots.txt échoue à ce contrôle alors que le sitemap existe.
Soumettez-le, puis vérifiez-le
- Ajoutez une ligne
Sitemap:absolue aurobots.txt:Sitemap: https://example.com/sitemap.xml. Elle fonctionne n’importe où dans le fichier, vous pouvez en lister plusieurs, et elle n’appartient à aucun groupeUser-agent. - Dans la Search Console, ouvrez le rapport Sitemaps, saisissez le chemin et soumettez-le. Un statut de réussite signifie que Google a récupéré et analysé le fichier, ce qui n’est pas la même chose qu’indexer chaque URL qu’il contient.
- Testez vous-même les entrées. Cette boucle demande chaque URL du sitemap et affiche celles qui ne répondent pas 200, c’est-à-dire les redirections, les erreurs et tout ce que vous n’auriez pas dû lister :
curl -s https://example.com/sitemap.xml | grep -o '<loc>[^<]*</loc>' | sed -e 's/<[^>]*>//g' -e 's/&/\&/g' |
while read -r url; do
printf '%s %s\n' "$(curl -s -o /dev/null -w '%{http_code}' "$url")" "$url"
done | grep -v '^200 '
Aucune sortie signifie que toutes les entrées répondent 200. Pour compter les entrées, utilisez curl -s URL | grep -o '<loc>' | wc -l. La boucle fait une requête par URL, ce qui convient à un site de moins de quelques centaines de pages ; pour un index de sitemaps, lancez-la sur chaque fichier enfant.
Laissez ensuite les outils vérifier le reste. Le testeur robots.txt signale l’absence de ligne Sitemap: et tout sitemap déclaré qui ne répond pas par un statut de succès, et l’analyse SEO vous dit si la page que vous testez figure dans votre sitemap. Pour le fichier qui renvoie les robots vers le sitemap, lisez les erreurs de robots.txt qui bloquent Google et AdSense.
Réponses rapides
Ai-je besoin d'un fichier d'index de sitemaps ?
Seulement si un fichier dépasserait 50 000 URL ou 50 Mo non compressés, la limite que Google donne par fichier, ou si vous voulez regrouper les URL par section. Notre générateur écrit un index de toute façon, et les robots le lisent sans difficulté.
À quelle fréquence le sitemap doit-il changer ?
Chaque fois que l'ensemble des pages change : une page ajoutée, supprimée ou déplacée. Le montage le plus simple et le plus sûr consiste à le générer à chaque build, pour qu'il ne prenne jamais de retard sur le site.