Bonnes pratiques — Sitemap XML

Table des matières

  1. Qu'est-ce qu'un sitemap ?
  2. Types de sitemaps
  3. Structure et syntaxe
  4. Limites et contraintes techniques
  5. Quelles URLs inclure ?
  6. Les attributs XML
  7. Sitemap index
  8. Déclaration et soumission
  9. Sitemaps spécialisés
  10. Erreurs courantes à éviter
  11. Automatisation et maintenance
  12. Validation

Qu'est-ce qu'un sitemap ?

Un sitemap (ou plan du site) est un fichier XML qui liste les URLs d'un site web afin d'aider les moteurs de recherche à les découvrir et à les explorer plus efficacement. Il ne garantit pas l'indexation d'une page, mais améliore la communication entre le site et les crawlers.

Analogie : Le sitemap est comme une table des matières que tu remets au moteur de recherche pour lui dire : « Voici toutes les pages de mon site, et voici leur importance relative. »

Quand un sitemap est-il particulièrement utile ?

  • Sites de grande taille (des centaines ou milliers de pages)
  • Sites dont le maillage interne est faible ou peu structuré
  • Sites récents avec peu de backlinks externes
  • Sites avec du contenu riche en médias (images, vidéos)
  • Sites avec des pages mises à jour très fréquemment

Types de sitemaps

Type Format Usage principal
Sitemap XML .xml Pages web standard
Sitemap d'images .xml (extension) Images indexables
Sitemap de vidéos .xml (extension) Contenu vidéo
Sitemap d'actualités .xml (extension) Articles de presse (Google News)
Sitemap texte .txt Liste d'URLs simples (usage limité)
Sitemap RSS/Atom .xml Flux de contenu (blogs, podcasts)

Structure et syntaxe

Exemple minimal valide

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/</loc>
  </url>
  <url>
    <loc>https://example.com/a-propos</loc>
  </url>
</urlset>

Exemple complet avec tous les attributs

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/page</loc>
    <lastmod>2024-11-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
</urlset>

Règles de formatage

  • L'encodage doit être UTF-8
  • Toutes les URLs doivent utiliser le protocole complet (https:// ou http://)
  • Les caractères spéciaux doivent être échappés en entités XML :
Caractère Entité XML
& &amp;
' &apos;
" &quot;
> &gt;
< &lt;

Limites et contraintes techniques

Contrainte Valeur maximale
Nombre d'URLs par fichier 50 000
Taille d'un fichier 50 MB non compressé
Taille compressée (.xml.gz) Acceptée par tous les moteurs

Si l'un de ces seuils est atteint, il faut utiliser un sitemap index (voir section dédiée).

Compression recommandée

Il est conseillé de compresser les sitemaps volumineux en .gz pour réduire la bande passante et accélérer l'exploration :

sitemap.xml.gz

Quelles URLs inclure ?

✅ À inclure

  • Pages canoniques (la version définitive d'une URL)
  • Pages accessibles sans authentification
  • Pages retournant un statut HTTP 200
  • Pages dont on souhaite l'indexation
  • Pages avec du contenu de valeur pour les utilisateurs

❌ À exclure

  • Pages en redirection (301, 302)
  • Pages avec une balise <meta name="robots" content="noindex">
  • Pages bloquées dans robots.txt
  • Pages de résultats de recherche interne
  • Pages d'administration, de connexion, de panier
  • Pages de pagination (sauf la page 1 selon les cas)
  • URLs avec paramètres de session ou de tracking (?sessionid=, ?utm_source=)
  • Pages dupliquées (ne garder que la canonique)
  • Pages retournant une erreur (404, 410, 500)

Règle d'or : Ne soumettre que les URLs que tu veux voir indexées et qui correspondent à la version canonique.


Les attributs XML

<loc> (obligatoire)

L'URL complète et absolue de la page.

<loc>https://example.com/ma-page</loc>
  • Doit correspondre exactement au protocole utilisé (https de préférence)
  • Doit être la version canonique de l'URL (avec ou sans slash final, de façon cohérente)

<lastmod> (optionnel)

Date de dernière modification du contenu, au format W3C Datetime (YYYY-MM-DD ou complet YYYY-MM-DDTHH:MM:SS+00:00).

<lastmod>2024-11-15</lastmod>

Bonnes pratiques :

  • N'utiliser lastmod que si la date est réelle et fiable (générée dynamiquement depuis la base de données)
  • Ne pas mettre la date du jour sur toutes les pages statiquement — Google ignore les dates incorrectes ou trop fréquemment mises à jour

<changefreq> (optionnel)

Fréquence estimée de modification du contenu. Valeurs possibles :

Valeur Usage typique
always Pages modifiées à chaque visite
hourly Flux en temps réel
daily Actualités, blogs actifs
weekly Contenu mis à jour régulièrement
monthly Pages de contenu stable
yearly Pages quasi-statiques
never Archives permanentes

Note importante : Google indique officiellement qu'il utilise peu cet attribut. Il reste utile comme indication, mais ne constitue pas une directive.


<priority> (optionnel)

Priorité relative de la page dans le site, entre 0.0 et 1.0 (défaut : 0.5).

<priority>0.8</priority>

Recommandations :

  • Page d'accueil : 1.0
  • Pages principales de catégories : 0.8
  • Pages de contenu standard : 0.5 à 0.7
  • Pages secondaires : 0.3 à 0.5

Attention : La priorité est relative au site, pas aux autres sites. Mettre 1.0 partout n'a aucun effet positif et dilue l'information.


Sitemap index

Quand un site dépasse 50 000 URLs ou que le fichier dépasse 50 MB, il faut diviser les sitemaps et créer un fichier index.

Structure d'un sitemap index

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap-pages.xml</loc>
    <lastmod>2024-11-15</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap-articles.xml</loc>
    <lastmod>2024-11-14</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap-images.xml</loc>
    <lastmod>2024-11-10</lastmod>
  </sitemap>
</sitemapindex>

Bonnes pratiques pour le sitemap index

  • Placer le fichier index à la racine : https://example.com/sitemap.xml
  • Référencer uniquement des sitemaps du même domaine
  • Mettre à jour le <lastmod> du sitemap index lorsqu'un sous-sitemap change
  • Segmenter logiquement : par type de contenu, par langue, par section

Déclaration et soumission

1. Dans robots.txt (recommandé)

Ajouter à la fin du fichier robots.txt :

Sitemap: https://example.com/sitemap.xml

Plusieurs sitemaps peuvent être déclarés :

Sitemap: https://example.com/sitemap.xml
Sitemap: https://example.com/sitemap-images.xml

2. Via Google Search Console

  • Aller dans Index > Sitemaps
  • Soumettre l'URL complète du sitemap
  • Permet de surveiller les erreurs et le statut d'indexation

3. Via Bing Webmaster Tools

  • Aller dans Sitemaps
  • Soumettre l'URL du sitemap

4. Ping HTTP (déprécié)

Google a retiré l'endpoint de ping en 2023. Cette méthode n'est plus fonctionnelle.

Stratégie recommandée : Déclarer dans robots.txt + soumettre dans Search Console + soumettre dans Bing Webmaster Tools.


Sitemaps spécialisés

Sitemap d'images

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
  <url>
    <loc>https://example.com/ma-page</loc>
    <image:image>
      <image:loc>https://example.com/images/photo.jpg</image:loc>
      <image:title>Description de l'image</image:title>
      <image:caption>Légende de l'image</image:caption>
    </image:image>
  </url>
</urlset>

Sitemap de vidéos

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
  <url>
    <loc>https://example.com/ma-video</loc>
    <video:video>
      <video:thumbnail_loc>https://example.com/thumb.jpg</video:thumbnail_loc>
      <video:title>Titre de la vidéo</video:title>
      <video:description>Description de la vidéo</video:description>
      <video:content_loc>https://example.com/video.mp4</video:content_loc>
      <video:duration>600</video:duration>
      <video:publication_date>2024-11-15T08:00:00+00:00</video:publication_date>
    </video:video>
  </url>
</urlset>

Sitemap d'actualités (Google News)

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:news="http://www.google.com/schemas/sitemap-news/0.9">
  <url>
    <loc>https://example.com/article/mon-titre</loc>
    <news:news>
      <news:publication>
        <news:name>Nom du média</news:name>
        <news:language>fr</news:language>
      </news:publication>
      <news:publication_date>2024-11-15T09:00:00+00:00</news:publication_date>
      <news:title>Titre de l'article</news:title>
    </news:news>
  </url>
</urlset>

Les sitemaps Google News ne doivent contenir que des articles publiés dans les 48 dernières heures.

Sitemap multilingue (hreflang)

<url>
  <loc>https://example.com/fr/page</loc>
  <xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/page"/>
  <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/page"/>
  <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/page"/>
</url>

Namespace requis : xmlns:xhtml="http://www.w3.org/1999/xhtml"


Erreurs courantes à éviter

Erreur Impact Solution
Inclure des URLs noindex Incohérence signalée dans Search Console Exclure les pages bloquées
Inclure des redirections Perte de budget crawl Ne mettre que les URL finales
URLs non canoniques Signaux SEO dilués Utiliser uniquement la version canonique
lastmod non fiable (toujours aujourd'hui) Google ignore l'attribut Générer dynamiquement depuis la BDD
Oublier le HTTPS si disponible Confusion de protocole Utiliser le protocole par défaut du site
Incohérence avec robots.txt Pages soumises mais bloquées Vérifier que les URLs ne sont pas bloquées
Omettre le sitemap index sur grand site Dépasser la limite de 50 000 URLs Implémenter un index segmenté
Ne jamais mettre à jour le sitemap Nouvelles pages non découvertes Automatiser la génération
Mélanger HTTP et HTTPS Duplication de contenu Cohérence absolue de protocole

Automatisation et maintenance

CMS populaires

CMS Plugin/Module recommandé
WordPress Yoast SEO, Rank Math, Google XML Sitemaps
Joomla OSMap, Xmap
Drupal Simple XML Sitemap
Magento Intégré nativement
Shopify Intégré nativement (/sitemap.xml)

Génération programmatique (PHP)

<?php
header('Content-Type: application/xml; charset=utf-8');
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<?php foreach ($pages as $page): ?>
  <url>
    <loc><?= htmlspecialchars($page['url']) ?></loc>
    <lastmod><?= date('Y-m-d', strtotime($page['updated_at'])) ?></lastmod>
    <changefreq>weekly</changefreq>
    <priority><?= $page['priority'] ?></priority>
  </url>
<?php endforeach; ?>
</urlset>

Fréquence de mise à jour recommandée

  • Sites à contenu dynamique (e-commerce, blogs) : régénération automatique à chaque publication
  • Sites statiques : régénération à chaque déploiement
  • Notification aux moteurs : soumettre un ping via Search Console après modification majeure

Validation

Outils en ligne

  • Google Search Console — Outil de test et de soumission officiel
  • Screaming Frog SEO Spider — Audit complet et détection d'erreurs
  • XML Sitemap Validatorxmlsitemaps.com
  • Bing Webmaster Tools — Validation et soumission pour Bing

Vérifications manuelles essentielles

# Vérifier l'accessibilité du sitemap
curl -I https://example.com/sitemap.xml

# Vérifier le Content-Type retourné (doit être application/xml ou text/xml)
curl -s -D - https://example.com/sitemap.xml -o /dev/null | grep content-type

# Valider la syntaxe XML
xmllint --noout sitemap.xml

Checklist de validation

  • [ ] Le fichier est accessible publiquement (HTTP 200)
  • [ ] Le Content-Type est application/xml ou text/xml
  • [ ] Le XML est valide (pas d'erreurs de syntaxe)
  • [ ] Toutes les URLs retournent HTTP 200
  • [ ] Aucune URL noindex n'est incluse
  • [ ] Aucune URL bloquée par robots.txt n'est incluse
  • [ ] Le sitemap est déclaré dans robots.txt
  • [ ] Le sitemap est soumis dans Search Console
  • [ ] Les dates lastmod sont fiables et à jour
  • [ ] Les URLs utilisent le bon protocole (HTTPS)

Références