Sitemap XML : guide complet pour une indexation optimale
Qu'est-ce qu'un sitemap XML ?
Un sitemap XML est un fichier au format XML qui liste toutes les URLs indexables d'un site, accompagnées de métadonnées : date de dernière modification, fréquence de changement estimée et priorité relative. Il sert de carte d'indexation aux robots de crawl (Googlebot, Bingbot, GPTBot, PerplexityBot) pour découvrir les pages plus rapidement et plus efficacement.
Contrairement au plan du site (sitemap HTML, visible par l'utilisateur), le sitemap XML est destiné exclusivement aux machines. Il n'apparaît jamais dans le menu de navigation.
Pourquoi un sitemap est indispensable
Même avec un maillage interne parfait, le sitemap XML apporte 3 avantages concrets :
- Découverte accélérée : une page publiée ce jour est soumise au crawl en quelques heures (vs plusieurs jours en attendant qu'un lien interne soit suivi).
- Signal de fraîcheur : la balise
<lastmod>indique au robot que la page a été modifiée → priorisation du re-crawl. - Couverture complète : les pages orphelines (peu ou pas de liens internes) sont quand même découvertes via le sitemap.
Sur un site de 50 pages avec un bon maillage, l'impact est modeste. Sur un site en construction (comme YperLine en phase de lancement), le sitemap est critique : il garantit que chaque page publiée est découverte immédiatement, même si le maillage n'est pas encore complet.
Le format XML : structure et balises
Structure minimale
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://yperline.net/seo-technique</loc>
<lastmod>2026-10-11</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<!-- plus d'URLs... -->
</urlset>
Les 4 balises par URL
| Balise | Obligatoire ? | Description |
|---|---|---|
<loc> | Oui | URL complète et absolue (https://…) |
<lastmod> | Non (recommandé) | Date de dernière modification (format YYYY-MM-DD) |
<changefreq> | Non | Fréquence estimée : always, hourly, daily, weekly, monthly, yearly, never |
<priority> | Non | Priorité relative de 0.0 à 1.0 (1.0 = la plus importante) |
Namespace images (optionnel)
Si vos pages contiennent des images importantes (produits, illustrations), vous pouvez ajouter un namespace images :
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>https://yperline.net/seo-technique</loc>
<image:image>
<image:loc>https://yperline.net/images/seo-technique.webp</image:loc>
</image:image>
</url>
</urlset>
Les 7 règles d'or
| # | Règle | Détail |
|---|---|---|
| 1 | URLs propres uniquement | Sans .php, sans ?paramètre, sans #fragment. /seo-technique et non /seo-technique.php |
| 2 | Uniquement les pages indexables | Exclure : 404, pages noindex, pages de paiement, pages de test, pages de login |
| 3 | 50 000 URLs max par fichier | Au-delà, utiliser un sitemap index qui référence plusieurs sitemaps |
| 4 | 1 Mo max par fichier | Compresser en gzip si nécessaire (la plupart des serveurs le font automatiquement) |
| 5 | Referencé dans robots.txt | Sitemap: https://yperline.net/sitemap.xml |
| 6 | Généré dynamiquement | Basé sur la BDD (table seo), pas un fichier statique à mettre à jour manuellement |
| 7 | Content-Type correct | application/xml; charset=utf-8 dans les headers HTTP |
Générer un sitemap dynamique (PHP)
Le sitemap doit être généré à la volée depuis la base de données, pas stocké en fichier statique. Voici le pattern recommandé :
<?php
header("Content-Type: application/xml; charset=utf-8");
echo '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL;
$base_url = "https://" . $_SERVER['HTTP_HOST'] . "/";
$stmt = $pdo->query("SELECT page_slug, updated_at FROM seo ORDER BY updated_at DESC");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$slug = preg_replace('/\.php$/', '', ltrim($row['page_slug'], '/'));
$loc = $base_url . $slug;
$lastmod = date('Y-m-d', strtotime($row['updated_at']));
echo " <url>\n";
echo " <loc>" . htmlspecialchars($loc, ENT_XML1) . "</loc>\n";
echo " <lastmod>" . $lastmod . "</lastmod>\n";
echo " <changefreq>weekly</changefreq>\n";
echo " <priority>0.8</priority>\n";
echo " </url>\n";
}
echo '</urlset>' . PHP_EOL;
?>
Accès via .htaccess
RewriteRule ^sitemap\.xml$ /generer_plan_xml\.php [L]
L'URL publique est /sitemap.xml (propre, sans .php). Le fichier PHP est appelé en interne.
Priorités recommandées
| Type de page | Priority | Changefreq |
|---|---|---|
| Home | 1.0 | daily |
| Page pilier (silo) | 0.9 | weekly |
| Page satellite | 0.7 | weekly |
| Services / contact | 0.6 | monthly |
| Ressources (glossaire, FAQ) | 0.5 | monthly |
Soumettre dans GSC et Bing
La soumission manuelle accélère la découverte initiale. Après, Google et Bing détectent les mises à jour via le re-crawl.
- Google Search Console → « Sitemaps » → ajouter
sitemap.xml→ soumettre. - Bing Webmaster Tools → « Sitemaps » → ajouter
sitemap.xml→ soumettre. - Après chaque publication : soumettre l'URL individuelle via « Inspection d'URL » (GSC) ou « Submit URL » (Bing) pour un crawl en 24-48 h.
Fréquence de vérification : contrôler mensuellement dans GSC que le sitemap est « réussi » (pas d'erreur de format, pas de URLs en 404).
Les 5 erreurs les plus fréquentes
| # | Erreur | Conséquence |
|---|---|---|
| 1 | URLs avec .php dans le sitemap | Google suit un 301 à chaque crawl → gaspillage de crawl budget, signal d'incohérence |
| 2 | Pages 404 ou noindex dans le sitemap | Erreur dans GSC, perte de confiance du crawler |
| 3 | <lastmod> faux (toujours la date du jour) | Google ignore la balise si elle n'est pas fiable → perte du signal de fraîcheur |
| 4 | Sitemap statique non mis à jour | Les nouvelles pages ne sont pas découvertées → indexation retardée de plusieurs jours |
| 5 | Pas de référence dans robots.txt | Le sitemap n'est pas découvert automatiquement (la soumission manuelle compense, mais c'est fragile) |
Checklist sitemap
| # | Point de contrôle | Statut |
|---|---|---|
| 1 | Sitemap accessible à /sitemap.xml (HTTP 200, content-type XML) | ☐ |
| 2 | Toutes les URLs sont propres (sans .php, sans ?paramètre) | ☐ |
| 3 | Aucune URL en 404 ou noindex | ☐ |
| 4 | <lastmod> reflète la vraie date de modification BDD | ☐ |
| 5 | Referencé dans robots.txt | ☐ |
| 6 | Soumis dans Google Search Console (statut « réussi ») | ☐ |
| 7 | Soumis dans Bing Webmaster Tools (statut « réussi ») | ☐ |
| 8 | Généré dynamiquement (pas de fichier statique) | ☐ |
| 9 | Moins de 50 000 URLs (sinon sitemap index) | ☐ |
| 10 | Vérification mensuelle dans GSC (pas d'erreur) | ☐ |
Pour le contexte plus large, voir notre page SEO technique. Pour le robots.txt (complémentaire au sitemap), voir robots.txt : guide complet. Pour la vue d'ensemble, voir le guide complet du SEO.
Vérifiez que votre sitemap est optimal
Audit SEO gratuit : nous analysons votre sitemap, votre robots.txt et votre indexation GSC. Vous repartez avec une liste de corrections priorisées.
Demander mon audit gratuit