Le sitemap XML, c'est le fichier qui liste les URLs de votre site que vous voulez voir indexées par Google. Bien construit, il accélère la découverte de vos pages. Mal construit, il envoie des signaux contradictoires qui freinent votre indexation. Les 7 erreurs qu'on rencontre le plus souvent, et ce qu'elles coûtent.
lastmoddoit refléter la vraie date de modification du contenu, sinon Google finit par l'ignorer.- Un sitemap ne contient que des URLs indexables en 200 : pas de noindex, pas de redirections, pas de paramètres de filtre.
priorityest un signal relatif entre vos pages, pas un levier de ranking.- Déclarez le sitemap dans robots.txt et segmentez en sitemap index au-delà de 50 000 URLs.
Erreur 1 : un lastmod figé ou inexact#
Ce que ça coûte : Google utilise lastmod pour décider quand revenir crawler une page. Un lastmod toujours à la date du jour (parce qu'il pointe sur la date de génération du sitemap, pas sur la vraie modification du contenu) finit par être ignoré : le moteur ne sait plus quelles pages ont réellement changé.
La règle est simple : lastmod reflète la date de dernière modification du contenu, rien d'autre.
Le bon vs le mauvais lastmod, pour vos devs
// Mauvais : la date de génération du sitemap, jamais stable
{ url: 'https://seodev.fr/blog/post', lastModified: new Date() }
// Bon : la vraie date de modif du contenu
{ url: `https://seodev.fr/blog/${post.slug}`, lastModified: new Date(post.updatedAt) }Erreur 2 : inclure des URLs en noindex#
Ce que ça coûte : une URL en noindex placée dans le sitemap envoie deux ordres contradictoires (« indexe-la » via le sitemap, « ne l'indexe pas » via la balise). Google tranche dans le doute, et ça brouille la lecture de tout votre site. C'est l'une des causes classiques quand un site n'apparaît pas sur Google.
La règle : ne mettre dans le sitemap que les URLs que vous voulez réellement voir indexées. Tout le reste (pages noindex, espaces privés) en est exclu à la génération.
Erreur 3 : inclure des redirections#
Ce que ça coûte : une URL qui répond en 301 ou 302 dans le sitemap fait perdre du temps de crawl et signale une liste mal tenue. Le sitemap ne doit contenir que des URLs qui répondent en 200.
Vérifier les codes de réponse en une commande, pour vos devs
while IFS= read -r url; do
status=$(curl -s -o /dev/null -w "%{http_code}" "$url")
echo "$status $url"
done < sitemap-urls.txt | grep -v "^200"Tout ce qui sort de ce filtre n'a rien à faire dans le sitemap.
Erreur 4 : laisser passer les paramètres de tri et de filtre#
Ce que ça coûte : les URLs à paramètres (?sort=prix&couleur=rouge) multiplient les variantes d'une même page et diluent le crawl sur des pages quasi identiques.
Mauvais https://monsite.fr/produits?sort=prix&couleur=rouge
Bon https://monsite.fr/produits
Bon https://monsite.fr/produits/rouge (si page canonique séparée)
Ces URLs doivent avoir un canonical vers l'URL propre et rester hors du sitemap.
Erreur 5 : remplir priority au hasard#
Ce que ça coûte : rien de direct, et c'est justement le piège. priority est un signal relatif entre vos propres pages, pas un levier de classement. Mettre 1.0 partout revient à n'envoyer aucun signal de hiérarchie.
Une échelle qui a du sens :
- Homepage :
1.0 - Pages piliers et catégories :
0.8 - Articles récents :
0.7 - Articles anciens :
0.5 - Pages légales :
0.3
Erreur 6 : oublier de déclarer le sitemap dans robots.txt#
Ce que ça coûte : sans la ligne Sitemap: dans le robots.txt, Google découvre votre sitemap plus tard, voire pas du tout s'il n'est pas soumis dans la Search Console. C'est une ligne, souvent oubliée.
# robots.txt
User-agent: *
Allow: /
Sitemap: https://monsite.fr/sitemap.xml
Erreur 7 : un seul sitemap pour 50 000+ URLs#
Ce que ça coûte : au-delà de 50 000 URLs ou 50 MB, le fichier dépasse la limite officielle et n'est plus lu correctement. C'est le quotidien des gros catalogues, où il faut passer à un sitemap index qui référence plusieurs fichiers segmentés. On détaille cette logique dans nos règles d'indexation e-commerce à 50 000 URLs.
Notre sitemap de référence#
Sur un site Next.js, le sitemap se génère depuis le code et reste donc toujours à jour : chaque nouvelle page entre automatiquement, avec sa vraie date de modification.
Le sitemap Next.js qu'on réutilise, pour vos devs
// app/sitemap.ts
import type { MetadataRoute } from 'next'
import { getAllPosts } from '@/shared/content/posts'
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const posts = await getAllPosts()
const siteUrl = process.env.NEXT_PUBLIC_SITE_URL ?? 'https://seodev.fr'
const staticPages: MetadataRoute.Sitemap = [
{ url: siteUrl, lastModified: new Date(), changeFrequency: 'weekly', priority: 1 },
{ url: `${siteUrl}/blog`, lastModified: new Date(), changeFrequency: 'daily', priority: 0.8 },
]
const blogPages: MetadataRoute.Sitemap = posts.map((post) => ({
url: `${siteUrl}/blog/${post.slug}`,
lastModified: new Date(post.updatedISO ?? post.dateISO),
changeFrequency: 'monthly',
priority: 0.7,
}))
return [...staticPages, ...blogPages]
}Un sitemap valide, à jour et sans erreur, c'est la base d'une indexation propre, pas un bonus. Si vous voulez vérifier que le vôtre coche toutes ces cases, c'est ce qu'on contrôle dans notre audit SEO technique.
Questions fréquentes
À quoi sert le sitemap XML pour le SEO ?
Le sitemap XML liste les URLs que vous voulez voir indexées et aide Google à les découvrir plus vite. Il ne garantit pas l'indexation, mais il accélère le crawl et signale les mises à jour via le champ lastmod.
Faut-il mettre toutes les pages dans le sitemap ?
Non. Le sitemap ne doit contenir que des URLs indexables qui répondent en 200 : pas de pages noindex, pas de redirections, pas d'URLs avec paramètres de filtre. Inclure ces URLs envoie des signaux contradictoires à Google.
Quelle est la limite de taille d'un sitemap XML ?
Un fichier sitemap est limité à 50 000 URLs et 50 MB. Au-delà, il faut passer à un sitemap index qui référence plusieurs fichiers segmentés, par type de page ou par section du site.
Le champ priority du sitemap influence-t-il le ranking ?
Non, priority est un signal relatif entre vos propres pages, pas un levier de classement. Mettre 1.0 partout n'a aucun effet. Il sert surtout à hiérarchiser vos pages aux yeux du crawler.