Contenu

Hugo SEO : noindex sur les taxonomies (correctif Bing)

En bref

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.

Même réflexe d’investigation que pour un précédent correctif SEO sur les 404 Googlebot et la normalisation du sitemap sur ce site : vérifier la search console d’abord, comprendre pourquoi Hugo génère les pages en cause, puis corriger au niveau du template plutôt que de patcher chaque URL à la main.


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 :

Kind Exemple 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

Fichier Rôle
layouts/baseof.html Logique robots conditionnelle
layouts/sitemap.xml Override 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.

Même principe que pour l’automatisation des hash SRI pour les assets CDN du site : un petit changement centralisé au niveau template plutôt qu’un contournement page par page.


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.