Sitemap généré depuis le registre + audit CI
Le sitemap n'est pas un fichier maintenu à la main. Il est généré depuis getIndexableRoutes() à chaque build. Si une page n'est pas dans le registre, elle n'est pas dans le sitemap. Point.
Pipeline build
"scripts": {
"prebuild": "tsx scripts/generate-sitemap.ts",
"build": "vite build",
"postbuild": "tsx scripts/audit-seo.ts && tsx scripts/validate-jsonld.ts"
}Split en 3 fichiers + index
sitemap-main.xml— home, services, à propossitemap-pages.xml— pages programmatiques (villes, comparatifs)sitemap-blog.xml— articlessitemap.xml— index qui pointe vers les 3
Google plafonne à 50k URLs par sitemap. Splitter dès maintenant évite la refonte à 10k URLs.
lastmod = signal de fraîcheur
<lastmod>{route.dateModified ?? buildTimestamp}</lastmod>Bumper dateModified manuellement quand un contenu pivot est révisé → Google recrawle. Ne jamais mettre la date du build sur toutes les routes (faux signal, pénalité possible).
Audit CI : 3 garde-fous
- Parité registre ↔ filesystem : toute
page.tsxdoit être dans le registre ou explicitementnoindex. - Parité registre ↔ sitemap : toute route
indexable:truedoit être dans le bon sitemap. - Validation JSON-LD : crawl des pages indexables → extraction des blobs → validation Schema.org. Échec CI si invalide.
À retenir
Sitemap = sortie du registre. Audit CI = filet de sécurité. Aucune régression SEO ne passe en silence.
Partager