Le fil d'Ariane est souvent le dernier détail qu'on pose sur une maquette, juste au-dessus du titre, en petit gris. Quand je reprends un site, c'est l'un des premiers endroits où la structure se dévoile. Un fil cohérent raconte le chemin réel de la page. Un fil bricolé raconte une arborescence qui n'existe pas, et le balisage ne fait qu'amplifier l'écart.
Sur un site de services repris il y a peu, chaque article affichait Accueil, Blog, puis le titre. La rubrique indexable, elle, vivait sous Ressources. Les deux pages existaient. Le milieu du fil envoyait les gens au mauvais parent : le modèle venait d'une démo, et personne ne l'avait relu.
Les points à retenir
- Le fil visible et le balisage BreadcrumbList décrivent le même chemin, dans le même ordre.
- Le dernier élément est la page en cours, affichée sans lien vers elle-même.
- Chaque URL du balisage est l'URL canonique absolue, celle qui doit être indexée.
- Un fil qui saute une rubrique, ou qui mélange deux classements, brouille le maillage.
- Le HTML sert la navigation. Le JSON-LD prépare le chemin dans le résultat, quand les deux concordent.
- Je vérifie une rubrique et une page profonde avant d'étendre le correctif à tout le site.
À quoi sert vraiment un fil d'Ariane
Un repère pour la personne qui arrive de loin
Sur une fiche ou un article, beaucoup de visites arrivent sur une requête précise. Le menu est inconnu. Le fil montre l'endroit et propose de remonter : la rubrique, parfois la sous-rubrique, puis l'accueil.
Ces liens vont de la page profonde vers ses parents. La rubrique récupère ainsi un lien depuis chacune de ses pages, sans bloc recopié en bas d'article.
Un fil limité à Accueil et au nom de la page ne guide personne. Le niveau oublié est presque toujours une rubrique déjà présente dans le menu.
Le chemin peut remplacer l'URL brute dans le résultat de recherche. Il peut aussi ne jamais s'afficher. Le balisage ouvre la possibilité, sans la promettre.
Le fil suit une hiérarchie déjà choisie
Le breadcrumb affiche une hiérarchie déjà décidée. Avec des URL du type /article-4782, aucun parent crédible n'existe à montrer. D'abord une vraie page de rubrique : son URL, son titre, une raison d'exister.
Deux classements pour la même page, une catégorie et une étiquette : un seul chemin dans le fil. L'autre classement vit dans les phrases, sous forme de liens rédigés. L'URL garde le même breadcrumb, d'où que vienne le visiteur.
Construire le fil visible
L'ordre, le libellé, le dernier maillon
Je pars du canonique et je remonte.
- L'accueil, avec le libellé du site ou le mot Accueil.
- La rubrique parente, avec son vrai nom.
- La sous-rubrique, seulement si une page indexable existe.
- La page courante, en texte simple.
Le libellé est le titre court, celui du menu ou un H1 allégé. La requête complète reste dans la balise title. Si la page s'appelle « Guide technique », le fil dit la même chose, pas une variante inventée pour « mieux cibler ».
La page courante est écrite en clair, pour confirmer l'endroit. Aucun lien dessus. Un clic vers l'URL où l'on se trouve déjà n'aide pas, et il ajoute une micro-boucle dans le maillage.
Où le placer dans la page
Haut de page, avant le H1 ou juste après, dans un nav dont l'attribut aria-label vaut « Fil d'Ariane ». Les chevrons passent en CSS, ou en texte ignoré par les lecteurs d'écran grâce à aria-hidden. Personne n'a besoin d'entendre « supérieur » entre chaque étape.
Le HTML du premier chargement contient déjà le fil. S'il n'arrive qu'après un clic, une partie des visites ne le voit pas. Et au prochain changement de thème, ce script tardif est souvent le premier à casser.
Sur mobile, je garde tous les niveaux. La ligne peut défiler. Supprimer les parents pour tenir dans la largeur retire exactement ce que le fil doit dire.
Poser le balisage BreadcrumbList
Les champs qui doivent coller au visible
Un JSON-LD, dans le head ou en fin de body. Un seul objet BreadcrumbList. Chaque étape est un ListItem. Quatre points à verrouiller :
- @type vaut ListItem sur chaque étape, et BreadcrumbList sur le conteneur.
- position commence à 1 pour l'accueil, puis 2, 3, 4, sans trou ni doublon.
- name reprend le libellé visible, mot pour mot.
- item porte l'URL canonique absolue de l'étape.
Sur la page courante, name et item sont remplis. Le lien HTML s'arrête avant ce dernier maillon. Le script décrit l'étape. Le lien sert à changer de page. Deux règles, deux couches.
Je corrige en premier les URL relatives, celles qui traînent un paramètre de tri, et le décalage entre une version www et un canonique nu. Le fil vise la version indexable, la même que la balise canonique de la page cible.
Figer la rubrique principale dans le modèle
Le piège classique, sur un CMS : le modèle prend la première catégorie cochée. Le jour où une seconde case est cochée, ou la bonne décrochée, le fil change de parent sans que personne ne le décide.
Je stocke une rubrique principale dans le modèle. Le breadcrumb ne lit que ce champ. Les autres cases peuvent alimenter des liens dans le texte. Elles ne pilotent pas le fil.
Recherche interne, version imprimable, archive d'auteur trop mince : sans parent logique, je ne pose ni fil visible ni script.
Les écarts que je corrige le plus souvent
Un chemin qui ne correspond à rien sur le site
Menu : Ressources. URL : /blog/technique/article. Fil : Accueil, Conseils, titre. Le visiteur hésite. Le balisage fige cette hésitation dans un format que les moteurs peuvent lire.
J'aligne le menu, le fil et l'URL canonique. Un ancien slug peut rester en ligne à cause des liens déjà obtenus. Dans ce cas, le breadcrumb pointe vers l'adresse qui répond aujourd'hui. Une rubrique qui se termine en page d'erreur n'a rien à faire dans le fil.
L'accueil se traite comme les autres maillons. Bon libellé, URL canonique, souvent la racine du site. Une vieille page « bienvenue » codée en dur à la place de l'accueil décale toute la chaîne derrière elle.
Deux fils, ou un fil sur la moitié des modèles
Le cas que je vois le plus : le thème, plus une extension, plus parfois un bloc posé à la main. Deux BreadcrumbList, et les noms du milieu divergent. J'en garde un seul. L'autre sort du modèle. Le cacher en CSS laisse le code en place, et c'est ce code qui est lu.
Je passe les modèles en revue : rubrique, article, fiche, page simple, page auteur. Chacun a un fil exact, ou aucun fil. À moitié déployé, le site montre des pages bien rangées dans le menu et hors sol dès le haut du contenu.
| Situation | Fil HTML | Balisage | Décision |
|---|---|---|---|
| Même chemin des deux côtés | Présent, dernier maillon sans lien | Positions continues, URL canoniques | Je garde et je surveille les modèles |
| HTML propre, JSON-LD absent | Présent | Absent | J'ajoute le balisage calé sur le visible |
| JSON-LD seul, rien à l'écran | Absent | Présent | J'affiche le fil, ou je retire le script |
| Deux classements possibles | Un seul chemin affiché | Le même chemin | La rubrique principale est figée dans le modèle |
| Noms ou URL en écart | Un chemin | Un autre chemin | J'aligne le script sur le HTML, puis je corrige le HTML s'il est faux |
Vérifier le fil comme on vérifie un modèle
Quatre pages, puis la source
Je lis quatre cas : une rubrique, une page profonde, une sous-rubrique si le site en a une, une page qui doit rester sans fil (connexion, remerciement, landing hors menu). Je clique les parents. J'attends un statut 200, le H1 prévu, une URL stable.
Dans la source, un seul BreadcrumbList. Les positions se suivent. Les noms égalent le texte à l'écran. Un synonyme « plus propre » dans name est un bug : c'est souvent ce libellé qui peut revenir dans le résultat.
Le crawl montre ensuite les modèles cassés : fil manquant, dernier maillon encore cliquable, URL à paramètre, position qui repart à 1. Le correctif est dans le modèle. Au-delà de quelques dizaines de pages, reprendre les URL une par une ne tient plus.
Le jour où une rubrique change de parent
Au renommage ou à la fusion, le menu bouge et le fil reste ancien. Les deux sont souvent codés à part. J'ajoute le breadcrumb à la même liste que les redirections et les liens internes. Après une fusion, un seul parent. Le nouveau chemin est en ligne le jour de la mise en ligne, dans le HTML et dans le JSON-LD.
J'ai déjà vu un menu neuf à côté d'un fil périmé, plusieurs jours d'affilée, parce qu'une extension servait encore la page en cache. Je purge les modèles concernés. Je relis une URL profonde en navigation privée. Ensuite seulement, je considère le chantier clos.
Le chemin doit pouvoir se raconter à voix haute
Un bon fil est presque monotone. Les noms du menu, les URL canoniques, un dernier maillon sans lien, un seul script. S'il se raconte à voix haute sans précision du genre « en fait la page est ailleurs », le JSON-LD suit tout seul. S'il a besoin d'une excuse, le script attend. Il inscrirait l'excuse dans la page.
Questions fréquentes
Faut-il un fil d'Ariane sur toutes les pages ?
Sur les rubriques et les pages profondes, oui, dès qu'un parent existe. L'accueil n'en a pas. Connexion, remerciement, landing hors structure : mieux vaut aucun fil qu'un parent inventé.
Le JSON-LD suffit-il sans fil visible ?
Je raccorde le script au fil visible, ou je le retire. Un chemin qui s'affiche dans le résultat doit correspondre à un parcours présent sur la page. Un script orphelin, injecté par une extension, est le premier que je traite.
Que faire si une page appartient à deux rubriques ?
Le texte peut citer la seconde rubrique, avec un vrai lien dans une phrase. Le fil et le BreadcrumbList gardent la rubrique principale, stable, la même pour toutes les visites de cette URL.
Le fil remplace-t-il les liens internes dans le texte ?
Le fil remonte aux parents. Les paragraphes relient les pages voisines, avec un ancrage écrit pour la phrase. Je garde les deux. Une rubrique peu citée dans les textes le reste, même avec un breadcrumb impeccable.