Cinq conflits de balise canonique tranchés par Google
Les mots sont de Google : une indication, pas une règle. Voici les cinq endroits où vos propres signaux se contredisent, et celui qui l'emporte.
Une balise canonique est une indication, pas une règle. C'est écrit ainsi sur la page de Google consacrée à la canonicalisation, et Google choisit lui-même l'URL canonique à partir des redirections, de la présence dans le sitemap, de sa préférence pour HTTPS et des clusters hreflang, en plus de votre balise. Quand ces signaux se contredisent, votre balise perd. Voici les cinq conflits en cause.
La balise canonique est-elle une directive ou une indication ?
Une indication. La page What is canonicalization de Google écrit noir sur blanc qu'indiquer une préférence canonique est une indication, pas une règle. Google regroupe les pages qu'il lit comme des doublons, puis désigne celle qu'il juge la plus complète et la plus utile. Votre balise est une entrée de cette décision, et elle occupe une place précise dans un ordre publié.
| Signal | Force | Ce qu'en dit Google |
|---|---|---|
| Redirections | Fort, cité en premier | Signal fort indiquant que la cible de la redirection doit devenir canonique |
| Annotation rel=canonical | Fort, cité en second | Signal fort indiquant que l'URL spécifiée doit devenir canonique |
| Présence dans le sitemap | Faible | Aide les URL du sitemap à devenir canoniques, mais Google détermine quand même les doublons |
| HTTPS plutôt que HTTP | Signal de configuration | Google préfère les pages HTTPS comme canoniques, sauf signaux contradictoires |
| Appartenance à un cluster hreflang | Signal de configuration | Google préfère les URL qui font partie d'un cluster hreflang |
Deux consignes à garder sous les yeux avant d'attaquer les conflits. N'utilisez pas robots.txt pour canonicaliser : Google peut indexer malgré tout une URL bloquée, simplement sans son contenu. Et ne déclarez pas des URL canoniques différentes pour une même page via des techniques différentes.
Une canonique peut-elle pointer vers une page en noindex, bloquée ou redirigée ?
Oui, et chaque variante affaiblit la balise. Google déconseille d'utiliser noindex pour choisir une canonique au sein d'un même site, parce que la page disparaît alors complètement de la recherche, et cite rel=canonical comme la solution à privilégier. Pointer vers une URL bloquée dans robots.txt est encore pire : la documentation sur noindex est explicite, un robot qui ne peut pas récupérer une page ne voit jamais la moindre règle dessus.
Les redirections sont le cas subtil, car elles passent avant les balises canoniques dans l'ordre publié par Google. La documentation ne détaille qu'un scénario : une page HTTPS qui redirige les internautes vers HTTP ou via HTTP, ou qui porte une canonique vers la version HTTP, est listée comme signal contradictoire, et les redirections HTTPS vers HTTP amènent Google à préférer très fortement HTTP. Au-delà de cet exemple, la documentation ne dit pas ce qui se passe quand une canonique vise une URL qui redirige : vérifiez donc la cible vous-même avec notre vérificateur de redirections et pointez la balise vers l'URL qui répond 200.
Que se passe-t-il si le sitemap et la balise canonique divergent ?
Google nomme ce cas directement dans ses bonnes pratiques : ne déclarez pas une URL dans le sitemap et une autre pour la même page en rel=canonical. La présence dans le sitemap est le plus faible des deux signaux, la balise l'emporte donc en général, mais chaque URL envoyée est proposée comme canonique et Google doit encore décider lesquelles sont les doublons. Le correctif n'a rien d'excitant : générez le sitemap depuis la source qui écrit les balises canoniques, puis contrôlez le fichier avec notre validateur de sitemap. Ce qui a sa place dedans est détaillé dans notre guide des bonnes pratiques sitemap.
rel=canonical peut-il entrer en conflit avec hreflang ?
Souvent, et c'est le conflit qui coûte le plus cher aux sites multilingues. La consigne de Google est d'indiquer une page canonique dans la même langue, ou dans la meilleure langue de substitution s'il n'en existe pas. Si la canonique de votre page française vise l'URL anglaise, vous demandez à Google d'écarter la française.
Deux détails supplémentaires, tirés des mêmes pages. Une annotation rel=canonical portant les attributs hreflang, lang, media ou type n'est pas utilisée pour la canonicalisation : c'est le rôle de rel=alternate. Et l'appartenance au cluster est elle-même un signal. L'exemple de Google : une page de-de et une page de-ch qui se référencent mutuellement sont préférées comme canoniques face à une page de-at restée hors du cluster. Les erreurs d'annotation qui cassent ces clusters sont traitées dans notre guide hreflang.
Faut-il une canonique autoréférente ?
Google la recommande. Ses bonnes pratiques demandent d'inclure un lien rel=canonical sur la page canonique elle-même, ce qu'on appelle une canonique autoréférente.
Les vrais dégâts viennent des gabarits qui construisent la balise à partir de l'URL appelée. Un visiteur arrive avec un paramètre de tracking et la balise désigne aussitôt la variante paramétrée : chaque clic publicitaire déclare sa propre canonique. L'exemple de Google pour une URL qu'on préférerait ne pas voir dans les résultats est une fiche produit portant un paramètre gclid. Deux autres contraintes de la même page : utilisez des URL absolues plutôt que relatives, et ne pointez jamais une canonique vers un fragment d'URL, que Google ne prend généralement pas en charge.
Une balise canonique fonctionne-t-elle hors du head ou en JavaScript ?
Hors du head, non. Google précise que l'élément link rel=canonical n'est accepté que s'il figure dans la section <head> du HTML, et ajoute que cette section au moins doit être du HTML valide. C'est là que ça casse : une balise non fermée fait glisser votre canonique dans le body, où elle ne compte plus.
JavaScript est pris en charge mais déconseillé. La page des bases du SEO JavaScript indique que la recherche Google récupère une canonique injectée au moment du rendu. La page sur la canonicalisation, elle, demande de définir l'URL dans le code source HTML et de veiller à ce que JavaScript ne la remplace pas. Si vous ne pouvez pas la mettre dans la source, retirez-la complètement de la source et définissez-la uniquement en JavaScript. Dans tous les cas, n'en publiez qu'une : Google prévient que des balises rel=canonical multiples ou contradictoires peuvent produire des résultats inattendus.
Comment savoir quelle canonique Google a retenue ?
L'outil d'inspection d'URL de la Search Console affiche la canonique sélectionnée par Google à côté de celle que vous avez déclarée. La page de dépannage ajoute une précision utile avant de refaire vos gabarits : même après correction du contenu, Google peut garder des pages dans un cluster de doublons jusqu'à deux semaines, et elles en sortent plus vite quand la différence est nette et significative. Rien de tout cela ne compte si le robot n'atteint pas la page, soit cinq minutes de vérification dans votre robots.txt.