Contenu

Hugo SEO : noindex sur les taxonomies pour corriger l'alerte Bing "too many thin pages"

Contexte

Bing Webmaster Tools remontait une recommandation “There are too many pages with insufficient content” (sévérité : modérée) — 15 pages en erreur, toutes du même type :

  • https://www.arleo.eu/en/tags/svg/
  • https://www.arleo.eu/en/tags/sonarr/
  • https://www.arleo.eu/en/categories/incidents/
  • etc.

Ces pages sont les taxonomies Hugo — les listes par tag et par catégorie. Elles ne contiennent pas d’article en elles-mêmes, juste une liste de liens. Pour Bing, c’est du thin content.


Stratégie choisie

Trois options s’offraient :

  1. Bloquer via robots.txt → déconseillé : empêche le crawl, masque les liens internes
  2. Enrichir le contenu des pages de taxonomie → trop coûteux pour un blog technique
  3. noindex,follow → la bonne réponse : on dit aux robots de ne pas indexer la page, mais de suivre les liens vers les articles

L’option 3 est retenue. Le follow préserve le maillage interne — les robots continuent de découvrir les articles via ces pages.

flowchart TD A[Requête page Hugo] --> B{.Params.robots défini ?} B -- oui --> C[Utiliser la valeur front matter] B -- non --> D{.Kind = taxonomy ou term ?} D -- oui --> E[noindex,follow] D -- non --> F[index, follow] C --> G[meta name=robots] E --> G F --> G

Implémentation

Principe Hugo : .Kind

Hugo classe chaque page par son kind :

KindExemple d’URL
home/
page/posts/mon-article/
section/posts/
taxonomy/tags/, /categories/
term/tags/hugo/, /categories/homelab/

Les pages à traiter sont .Kind == "taxonomy" et .Kind == "term".

Modification : layouts/baseof.html

Le site utilise un baseof.html custom qui surcharge déjà le thème LoveIt. C’est l’endroit naturel pour centraliser la logique robots.

Avant :

<meta name="robots" content="index, follow" />

Après :

{{- if .Params.robots -}}
<meta name="robots" content="{{ .Params.robots }}" />
{{- else if or (eq .Kind "taxonomy") (eq .Kind "term") -}}
<meta name="robots" content="noindex,follow" />
{{- else -}}
<meta name="robots" content="index, follow" />
{{- end -}}

La cascade à trois niveaux :

  1. Front matter robots: — priorité absolue pour les exceptions futures
  2. Taxonomiesnoindex,follow automatique
  3. Tout le resteindex, follow

Un seul fichier modifié, zéro duplication, zero override de layout de taxonomie.

Retrait des taxonomies du sitemap

Les pages noindex dans un sitemap sont une incohérence — on dit au robot de ne pas indexer une page mais on l’y pointe explicitement. La bonne pratique est de les retirer.

Le sitemap LoveIt inclut toutes les pages. Un override minimal dans layouts/sitemap.xml :

{{- $excludedKinds := slice "taxonomy" "term" -}}
{{- range (where .Data.Pages "Section" "!=" "gallery") -}}
    {{- if not (in $excludedKinds .Kind) -}}
    <url>
        <loc>{{- .Permalink -}}</loc>
        ...
    </url>
    {{- end -}}
{{- end -}}

Résultat : le sitemap EN passe de 117 à 40 URLs (les 77 entrées de taxonomie supprimées).


Vérification

Après rebuild :

# Pages taxonomy → noindex,follow
curl -s https://www.arleo.eu/tags/ | grep -o 'name=robots[^>]*>'
# → name=robots content="noindex,follow">

curl -s https://www.arleo.eu/en/tags/sonarr/ | grep -o 'name=robots[^>]*>'
# → name=robots content="noindex,follow">

# Articles → index, follow
curl -s https://www.arleo.eu/en/posts/debug-seo-404-broken-links/ | grep -o 'name=robots[^>]*>'
# → name=robots content="index, follow">

# Sitemap propre
curl -s https://www.arleo.eu/en/sitemap.xml | grep -o '<loc>[^<]*</loc>' | grep 'tags\|categories' | wc -l
# → 0

Fichiers modifiés

FichierRôle
layouts/baseof.htmlLogique robots conditionnelle
layouts/sitemap.xmlOverride sitemap — exclude taxonomy/term

Le robots.txt n’a pas été touché. Les URLs de taxonomie restent accessibles et crawlables — seule leur indexation est désactivée.


Côté Bing

La correction est immédiate côté technique. Bing mettra quelques jours à re-crawler les pages et mettre à jour la recommandation. Pour accélérer : dans Bing Webmaster Tools → Recommendations → valider manuellement ou soumettre une demande de recrawl du sitemap.