Maîtriser les Sitemaps Hugo : Comment Exclure des Pages et Améliorer le SEO
Archive Technique
Cet article discute de la version précédente de ce blog, qui était construit avec Hugo. Le site est maintenant propulsé par Astro. Bien que les concepts de sécurité explorés ici restent valides, les détails d’implémentation spécifiques liés à Hugo ne s’appliquent plus au site en ligne.
Dans ce post, j’expliquerai ce qu’est un sitemap, comment il est utilisé, et comment Hugo le gère par défaut. Ensuite, je vous montrerai pourquoi il est bénéfique de surcharger ce comportement par défaut et vous guiderai à travers le processus de personnalisation.
Qu’est-ce qu’un sitemap ?
Un sitemap est un fichier XML, typiquement situé à la racine d’un site web, qui liste les pages que le site contient.

Diagramme de structure de sitemap
Le but principal de ce fichier est d’aider les moteurs de recherche comme Bing, DuckDuckGo, et Google à comprendre la structure de votre site web. Il leur dit quelles pages existent et fournit des métadonnées à leur sujet, comme la date de dernière modification ou la changefreq (fréquence de changement : daily (quotidien), weekly (hebdomadaire), monthly (mensuel), etc.).
Vous pouvez vérifier le fichier sitemap de la plupart des sites web en ajoutant /sitemap.xml à leur URL de base. Par exemple, le sitemap de mon blog est accessible ici : https://blog.laromierre.com/sitemap.xml. La structure ressemble à ceci :
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://blog.laromierre.com</loc>
<lastmod>2024-03-21T13:03:30+01:00</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>https://blog.laromierre.com/p/practical-guide-to-enhance-hugo-sitemap</loc>
<lastmod>2024-04-06T15:08:49+02:00</lastmod>
<changefreq>daily</changefreq>
</url>
...
</urlset>
Les sites plus larges utilisent souvent un Index de Sitemap. Par exemple, le sitemap de Backmarket (https://backmarket.com/sitemap.xml) agit comme un fichier parent qui lie vers d’autres sitemaps catégorisés :
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://www.backmarket.com/sitemap_products_1.xml</loc>
</sitemap>
<sitemap>
<loc>https://www.backmarket.com/sitemap_general.xml</loc>
</sitemap>
...
</sitemapindex>
Si vous visitez un de ces liens, vous atterrirez sur un fichier XML standard contenant des milliers d’URLs.
Comment ça marche dans Hugo ?
C’est assez direct : quand vous construisez votre site web en utilisant la commande hugo, le sitemap est généré automatiquement. Si vous jetez un œil au dossier public/ après le build, vous verrez un fichier sitemap.xml.

Le fichier nommé “sitemap.xml”, dans le dossier public
Vous pouvez définir le comportement général pour votre site web en ajoutant la configuration suivante à votre fichier hugo.toml (ou config.toml) :
[sitemap]
changeFreq = "monthly"
priority = 0.5
-
changeFreq : Donne une indication sur la fréquence probable de changement de la page. Les valeurs incluent
always,hourly,daily,weekly,monthly,yearly, etnever. -
priority : Définit la priorité de cette URL par rapport aux autres URLs sur votre site (valeurs valides de 0.0 à 1.0).
Pour plus de détails, vérifiez la documentation officielle.
Surcharger la configuration par page
Vous pouvez surcharger ces réglages globaux dans le frontmatter de fichiers spécifiques. Par instance, si votre site est généralement mis à jour mensuellement, mais que vous avez une page spécifique qui change quotidiennement, vous pouvez la configurer comme ceci :
Dans hugo.toml :
[sitemap]
changeFreq = 'monthly'
Dans le frontmatter de la page :
+++
slug = 'a-page-refreshed-daily'
[sitemap]
changeFreq = 'daily'
+++
Comment exclure des URLs du sitemap
La première chose que vous pourriez remarquer en inspectant votre sitemap.xml est que Hugo génère une entrée pour tout. Vous pourriez même découvrir des pages dont vous ignoriez l’existence.
Voici une structure de projet Hugo typique :
mon-site/
├── content/
│ ├── categories/ <-- Taxonomies
│ ├── pages/
│ └── posts/
└── ...
Si vous avez un site avec juste deux pages, deux articles, deux catégories, et deux tags, combien d’URLs finissent dans votre sitemap ?
-
5 URLs que vous attendez : Accueil, 2 articles, 2 pages.
-
10 URLs que vous pourriez ne pas vouloir :
-
2 pages Catégorie (listes d’articles dans une catégorie).
-
4 pages Tag (listes d’articles par tag).
-
1 Liste de section pour les Articles (Posts).
-
1 Liste de section pour les Pages.
-
1 Liste de section pour les Catégories.
-
1 Liste de section pour les Tags.
-
Dans ce scénario, deux fois plus de pages de navigation interne sont indexées comparé aux pages de contenu réel. Pour le SEO, vous voulez généralement exclure les pages de “contenu pauvre” (thin content) comme les archives, les résultats de recherche interne, ou les listes de taxonomie redondantes.
Alors, comment nettoyer tout ça ?
La Méthode Moderne (Hugo v0.124.1+)
Depuis Hugo v0.124.1 (publié en mars 2024), exclure des pages est natif et simple. Vous n’avez plus besoin de layouts personnalisés.
Ajoutez simplement ce qui suit au frontmatter de n’importe quelle page que vous voulez cacher :
+++
[sitemap]
disable = true
+++
Gérer les Taxonomies (Tags et Catégories)
Pour exclure les pages générées qui n’ont pas de fichier markdown (comme /tags/ ou /categories/some-category/), vous devez créer un fichier d’index pour elles.
Note : Dans Hugo, les bundles de section utilisent typiquement _index.md.
Par exemple, pour exclure la page de tag pour myTag, créez le fichier content/tags/myTag/_index.md :
+++
title = "My Tag"
[sitemap]
disable = true
+++
Pour exclure la liste entière des articles (ex. baseurl/posts/), créez content/posts/_index.md :
+++
title = "Posts"
[sitemap]
disable = true
+++
Pour les versions Hugo Legacy (≤ v0.124.1)
Si vous faites encore tourner une vieille version de Hugo, je recommande grandement de mettre à jour. Cependant, si vous ne pouvez pas, voici le contournement.
Vous devez surcharger le template sitemap par défaut.
-
Créez un fichier à
layouts/_default/sitemap.xml. -
Copiez le code du template sitemap Hugo original.
-
Modifiez la boucle pour filtrer les pages où nous définissons un paramètre personnalisé.
Trouvez cette ligne :
{{ range .Data.Pages }}
Remplacez-la par :
{{ range where .Pages ".Params.Sitemap.Disable" "ne" true }}
Maintenant, ajouter [sitemap] disable = true à votre frontmatter fonctionnera même sur les vieilles versions.
Conclusion
Nous avons couvert ce qu’est un sitemap et comment l’ajuster finement dans Hugo. Garder votre sitemap propre aide les moteurs de recherche à se concentrer sur votre contenu à haute valeur plutôt que de se perdre dans les listes de taxonomie. J’espère que ce guide vous aidera à optimiser le SEO de votre site ! 😇