Qu'est-ce qu'une balise Canonical ?
Avant d'examiner comment hreflang et canonical interagissent, il convient d'établir ce que chacun fait indépendamment.
Une balise canonical (<link rel="canonical">) indique aux moteurs de recherche quelle URL est la version préférée d'une page pour l'indexation. Lorsque plusieurs URLs servent un contenu identique ou très similaire, la balise canonical consolide les signaux de classement sur une seule URL, empêchant la dilution par contenu dupliqué.
<link rel="canonical" href="https://example.com/en/products/widget/" />
Par exemple, si votre page produit est accessible à la fois à https://example.com/en/products/widget/ et à https://example.com/en/products/widget/?ref=newsletter, la balise canonical sur les deux URLs devrait pointer vers la version propre sans paramètre de requête. Cela dit à Google : "Traite-les comme la même page et consolide leur puissance de classement."
Les balises canonical sont un signal fort que Google respecte généralement (bien que ce ne soit pas une directive -- Google peut passer outre votre canonical s'il détecte des incohérences).
Qu'est-ce que Hreflang ?
Hreflang (<link rel="alternate" hreflang="...">) indique aux moteurs de recherche qu'une page possède des versions équivalentes dans d'autres langues ou régions. Il ne contrôle pas l'indexation -- il contrôle quelle version apparaît dans les résultats de recherche en fonction de la langue et de la localisation de l'utilisateur.
<link rel="alternate" hreflang="en" href="https://example.com/en/products/widget/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/produkte/widget/" />
<link rel="alternate" hreflang="es" href="https://example.com/es/productos/widget/" />
Hreflang dit : "Ces trois pages sont le même contenu pour des audiences différentes." Il ne dit rien sur quelle URL devrait être indexée.
Comment Hreflang et Canonical fonctionnent ensemble
C'est ici que la plupart des confusions surviennent. Hreflang et canonical servent des objectifs complémentaires mais différents :
| Signal | Objectif | Portée | |--------|----------|--------| | Canonical | "Ceci est l'URL préférée pour l'indexation" | Au sein d'une seule version linguistique | | Hreflang | "Voici les variantes de langue/région" | Entre les versions linguistiques |
La règle essentielle est : chaque version localisée doit avoir un canonical auto-référençant qui pointe vers elle-même. Le canonical de la page anglaise pointe vers l'URL anglaise. Le canonical de la page allemande pointe vers l'URL allemande. Le canonical de la page espagnole pointe vers l'URL espagnole.
Voici l'implémentation correcte pour une page disponible en trois langues :
Page anglaise à https://example.com/en/products/widget/ :
<link rel="canonical" href="https://example.com/en/products/widget/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/products/widget/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/produkte/widget/" />
<link rel="alternate" hreflang="es" href="https://example.com/es/productos/widget/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/products/widget/" />
Page allemande à https://example.com/de/produkte/widget/ :
<link rel="canonical" href="https://example.com/de/produkte/widget/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/products/widget/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/produkte/widget/" />
<link rel="alternate" hreflang="es" href="https://example.com/es/productos/widget/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/products/widget/" />
Page espagnole à https://example.com/es/productos/widget/ :
<link rel="canonical" href="https://example.com/es/productos/widget/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/products/widget/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/produkte/widget/" />
<link rel="alternate" hreflang="es" href="https://example.com/es/productos/widget/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/products/widget/" />
Remarquez le schéma : le canonical est toujours auto-référençant, tandis que l'ensemble hreflang est identique sur les trois pages (assurant une réciprocité complète).
Quand Hreflang et Canonical entrent en conflit
Les conflits surviennent lorsque la balise canonical d'une page pointe vers une URL dans une langue différente. C'est l'erreur la plus dommageable dans l'implémentation des balises de SEO international.
L'erreur du Canonical inter-langues
Considérez cette implémentation défectueuse :
Page allemande à https://example.com/de/produkte/widget/ :
<!-- INCORRECT : le canonical pointe vers la version anglaise -->
<link rel="canonical" href="https://example.com/en/products/widget/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/produkte/widget/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/products/widget/" />
Cela dit à Google : "La page allemande est un duplicat de la page anglaise. Veuillez indexer uniquement l'URL anglaise." Google va alors désindexer la page allemande et afficher l'URL anglaise aux utilisateurs allemands. Le hreflang est ignoré parce que le canonical a effectivement déclaré la page allemande comme inexistante du point de vue de l'indexation.
Cette erreur est étonnamment fréquente et provient souvent de :
- Plugins CMS qui définissent le canonical de toutes les pages non anglaises vers l'"original" anglais
- Développeurs qui interprètent le canonical comme signifiant "ceci est la langue originale" plutôt que "ceci est l'URL préférée pour cette page spécifique"
- Outils SEO qui signalent les pages multilingues comme des doublons et suggèrent de canonicaliser vers une seule version
- Scripts de migration qui copient le canonical anglais sur tous les modèles de langues sans le mettre à jour
Comment Google gère le conflit
Lorsque Google rencontre un canonical inter-langues avec hreflang :
- Le signal canonical l'emporte car c'est un signal plus fort que hreflang
- Google consolide l'indexation sur l'URL canonique (la page anglaise)
- La page allemande disparaît effectivement de l'index de Google
- Les utilisateurs allemands cherchant en allemand voient la page anglaise dans les résultats (ou aucun résultat si la page anglaise ne se positionne pas pour les requêtes en allemand)
- Toute la puissance de classement des backlinks vers la page allemande est transférée à la page anglaise, qui ne peut de toute façon pas se positionner dans les résultats de recherche allemands
Le résultat : vous perdez entièrement votre présence dans les recherches en allemand.
Schémas d'utilisation corrects
Schéma 1 : Canonical auto-référençant par version linguistique
Chaque page localisée a un canonical qui pointe vers elle-même. C'est le schéma correct pour la grande majorité des sites internationaux.
/en/page/ -> canonical: /en/page/
/de/page/ -> canonical: /de/page/
/es/page/ -> canonical: /es/page/
Les trois pages partagent le même ensemble hreflang complet. Chaque page est indexée de manière indépendante et se positionne dans son marché respectif.
Schéma 2 : URLs paramétrées avec Canonical différent
Si votre site utilise des paramètres de requête pour la sélection de la langue (par exemple, ?lang=de), chaque version linguistique devrait tout de même avoir un canonical pointant vers une URL propre -- mais une URL propre dans sa propre langue.
/page/?lang=en -> canonical: /page/?lang=en (ou /en/page/ si vous avez des URLs propres)
/page/?lang=de -> canonical: /page/?lang=de (ou /de/page/ si vous avez des URLs propres)
Ne canonicalisez jamais tous les paramètres de langue vers l'URL de base sans paramètre. Cela fusionne toutes les langues en une seule URL indexée.
Schéma 3 : Pages qui sont véritablement des doublons au sein d'une même langue
Parfois vous avez de véritables doublons au sein de la même langue -- par exemple, une page produit accessible depuis deux chemins de catégorie différents. Dans ce cas, le canonical pointe correctement vers une URL, et le hreflang sur cette URL canonique pointe vers ses équivalents dans d'autres langues.
/en/category-a/widget/ -> canonical: /en/products/widget/
/en/category-b/widget/ -> canonical: /en/products/widget/
/en/products/widget/ -> canonical: /en/products/widget/ (auto-référençant)
hreflang: /en/products/widget/, /de/produkte/widget/, /es/productos/widget/
Le hreflang n'a besoin d'exister que sur l'URL canonique. Les pages doublons au sein de la même langue n'ont pas besoin de hreflang car Google les consolidera de toute façon sur l'URL canonique.
Diagnostiquer les conflits
Si vous soupçonnez des conflits hreflang-canonical sur votre site, recherchez ces symptômes :
- Les pages en langues étrangères n'apparaissent pas dans Google Search Console. Si votre page allemande n'est pas dans l'index mais votre page anglaise l'est, vérifiez la balise canonical de la page allemande.
- "Doublon sans canonical sélectionné par l'utilisateur" dans les rapports de Couverture. Google vous indique qu'il a trouvé un conflit canonical et a choisi sa propre résolution.
- Erreurs hreflang dans le rapport de Ciblage international de Search Console. Google signale les pages où hreflang pointe vers une URL dont le canonical pointe vers une URL différente.
- Chute du classement sur les marchés non anglophones après une migration de site ou un changement de CMS. Cela indique souvent que la migration a introduit des canonicals inter-langues.
Pour auditer votre site :
- Explorez votre site avec un outil qui extrait à la fois les balises canonical et hreflang
- Pour chaque page, vérifiez que
rel="canonical"pointe vers le même domaine et le même chemin linguistique que la page elle-même - Vérifiez que chaque URL dans chaque ensemble hreflang possède également un canonical auto-référençant
- Contrôlez qu'aucune balise canonical ne pointe vers une URL dans un répertoire de langue différent
Conclusion
Hreflang et canonical ne sont pas en concurrence. Ils résolvent des problèmes différents et doivent toujours être en accord. La règle est simple :
- Canonical : "Cette URL est la version à indexer" -- toujours auto-référençant au sein de chaque version linguistique
- Hreflang : "Ces URLs sont des équivalents de langue/région" -- réciproque entre toutes les versions linguistiques
Lorsque ces deux signaux sont alignés, les moteurs de recherche peuvent indexer chaque version localisée de manière indépendante en toute confiance et afficher la bonne version au bon public. Lorsqu'ils entrent en conflit, le canonical l'emporte et le hreflang est ignoré, ce qui détruit généralement votre visibilité dans les recherches internationales.
Utilisez notre Générateur de balises Hreflang pour construire des ensembles de balises qui suivent automatiquement ces schémas corrects. Le générateur garantit des canonicals auto-référençants et une réciprocité complète entre toutes les versions linguistiques de l'ensemble.