Les implémentations hreflang ont tendance à échouer de quelques manières répétables : codes non valides, liens de retour manquants, cibles redirigées, conflits canoniques et clusters de langage incomplets. Ce guide explique comment éviter ces échecs et valider le résultat.
Si Google affiche une URL de langue incorrecte dans les résultats de recherche ou si vos pages traduites sont difficiles à découvrir, ce guide est fait pour vous. Google documente les approches prises en charge dans son guide des versions localisées.
hreflang est l'un de ces sujets techniques de référencement qui sont expliqués encore et encore mais qui ne cliquent jamais vraiment, car la plupart des explications sautent les parties qui se cassent réellement en production. L'exemple de quatre lignes fonctionne bien jusqu'à ce que vous ayez 23 langues, des variantes régionales, des formats de page alternatifs et un flux de paiement qui réside dans un sous-domaine. De petites incohérences peuvent alors laisser certaines parties du groupe linguistique méconnues.
Ce guide couvre la mise en œuvre qui fonctionne dans le monde réel. Pas la version du manuel. La version où Cloudflare met en cache vos en-têtes, Next.js génère des pages à la demande et votre CMS ajoute des barres obliques de fin qui n'existent pas dans votre plan de site.
Ce que hreflang fait réellement (et ne fait pas)
hreflang indique aux moteurs de recherche quelle version d'une page afficher aux utilisateurs dans différentes langues ou régions. C'est un signal relationnel, pas un signal de classement.
Cette distinction est importante. L'ajout de hreflang ne permet pas à votre page française d'être mieux classée en France. Il indique à Google : “cette page anglaise et cette page française sont des traductions équivalentes du même contenu. Quand quelqu'un cherche en français depuis la France, montrez-lui le français.” Sans cela, Google pourrait toujours classer votre page française, mais il pourrait également servir votre page anglaise aux chercheurs français — ou pire, traiter les deux comme du contenu en double et en choisir un à rétrograder.
Trois choses que fait hreflang :
- Achemine la bonne version linguistique vers le bon utilisateur.
- Aide Google à comprendre que des pages traduites similaires sont destinées à des publics différents.
- Connecte des variantes linguistiques ou régionales équivalentes en tant que cluster.
Trois choses que hreflang ne fait pas :
- Traduisez votre contenu (évident, mais digne d'être mentionné).
- Améliorer les classements au sein d’un marché unique.
- Corrigez la mauvaise qualité de traduction ou le contenu mince.
La syntaxe de base (et pourquoi la plupart des exemples sont incomplets)
Voici la version que la plupart des guides vous montrent. C'est correct, et il manque aussi la ligne la plus importante :
<link rel="alternate" hreflang="en" href="https://example.com/" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />Cet extrait déclare trois versions linguistiques. Cela fonctionnera partiellement. Le problème : chaque page qui utilise ces balises doit se référencer dans la liste. Sinon, Google traite les références comme unidirectionnelles et peut les supprimer.
La version complète sur la page anglaise ressemble à ceci :
<link rel="alternate" hreflang="en" href="https://example.com/" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />Deux choses ont changé :
- Hreflang auto-référencé. La page anglaise se déclare désormais comme la version anglaise. Sans cela, l’ensemble est incomplet et ne peut pas être interprété comme prévu.
- x-par défaut. Cela déclare la page de secours pour les utilisateurs dont la langue ne correspond à aucune version spécifiée. Si un utilisateur coréen atterrit sur votre site et que vous n'avez pas de coréen, x-default indique à Google quelle page diffuser.
Voici maintenant la partie qui n'est presque jamais expliquée correctement : la même logique s'applique à la page française et à la page allemande. Chaque page doit répertorier toutes les versions linguistiques, y compris elle-même et x-default. Pas seulement la source anglaise.
Sur la page française :
<link rel="alternate" hreflang="en" href="https://example.com/" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />Identique à la page anglaise. C'est le but. Les déclarations hreflang doivent être réciproques — chaque version linguistique doit référencer toutes les autres versions linguistiques. Si la page A pointe vers la page B, la page B doit pointer vers la page A. Google les appelle “balises de retour” et il s'agit de la règle de validation la plus ratée dans le référencement international.
Codes de langue : la feuille de triche
les codes hreflang suivent le format language ou language-REGION. Les langues utilisent la norme ISO 639-1 (deux lettres, minuscules). Les régions utilisent la norme ISO 3166-1 Alpha 2 (deux lettres majuscules). Les confusions les plus courantes :
| Code | Ce que cela signifie réellement | Erreur courante |
|---|---|---|
en | Anglais (n'importe quelle région) | Utiliser “en” lorsque vous voulez dire en-US spécifiquement |
en-US | Anglais pour les utilisateurs américains | Écriture en-us (région minuscule) — invalide |
en-GB | Anglais pour le Royaume-Uni | Écrire en-UK — UK n'est pas un code de pays valide |
zh-Hans | Chinois simplifié (basé sur des scripts) | Utiliser zh-CN lorsque vous parlez de script, pas de région |
zh-Hant | Chinois traditionnel | Utilisation de zh-TW pour tous les utilisateurs chinois traditionnels |
pt-BR / pt-PT | Portugais brésilien / européen | En utilisant simplement “pt” —, le Brésil et le Portugal diffèrent considérablement |
es-419 | Espagnol latino-américain (code de région ONU) | Utiliser es-MX comme substitut pour tout l'Amérique latine |
x-default | Repli pour les langues inégalées | L'omettre ; le pointer vers une page spécifique à une région |
Le Royaume-Uni n’est pas un code de pays. Il s’agit de l’erreur la plus fréquente que j’ai constatée en 10 ans d’audits. Le code ISO 3166-1 pour le Royaume-Uni est GB. Utiliser en-GB, non en-UK. Google ignore silencieusement les codes non valides — votre balise existe, mais elle ne fait rien.
Trois méthodes de mise en œuvre
hreflang peut être déclaré à trois endroits. Chacun a des compromis.
Méthode 1 : HTML <head> tags (les plus courants)
Mots clés placés dans le <head> section de chaque page. Facile à déboguer, facile à inspecter, pris en charge par chaque CMS. L'inconvénient : chaque page doit inclure la balise de toutes les autres langues, ce qui signifie qu'un site de 50 pages en 10 langues nécessite la génération et la synchronisation de 500 déclarations hreflang.
Utilisez cette méthode si votre site compte moins de ~10 000 pages ou si votre CMS gère automatiquement la génération de hreflang.
Méthode 2 : en-têtes HTTP (pour les fichiers non HTML)
hreflang peut être envoyé sous forme d'en-tête de lien HTTP. C'est la seule façon de déclarer hreflang pour les ressources non HTML comme les PDF :
Link: <https://example.com/en/file.pdf>; rel="alternate"; hreflang="en",
<https://example.com/fr/file.pdf>; rel="alternate"; hreflang="fr"Utilisez les en-têtes HTTP lorsque vous disposez d'éléments téléchargeables existant dans plusieurs langues — manuels de produits, documents réglementaires, livres blancs.
Méthode 3 : Plan du site XML (pour les grands sites)
Pour les sites comportant des centaines de milliers de pages, déclarer hreflang dans <head> les balises deviennent difficiles à manier. Le hreflang basé sur le plan du site est plus efficace et permet de garder votre HTML simplifié :
<url>
<loc>https://example.com/</loc>
<xhtml:link rel="alternate" hreflang="en"
href="https://example.com/" />
<xhtml:link rel="alternate" hreflang="fr"
href="https://example.com/fr/" />
<xhtml:link rel="alternate" hreflang="x-default"
href="https://example.com/" />
</url>Les mêmes règles de réciprocité s’appliquent. Chaque entrée d'URL dans le plan du site doit répertorier toutes les versions linguistiques, y compris elle-même.
Google considère les trois méthodes de mise en œuvre comme équivalentes et affirme qu'il n'y a aucun avantage en termes de recherche à les utiliser toutes. Choisissez la méthode la plus simple à générer et à maintenir cohérente ; si vous en utilisez intentionnellement plusieurs, assurez-vous que les déclarations correspondent.
Cinq erreurs courantes de mise en œuvre

1. Hreflang autoréférencé manquant
La page anglaise répertorie les versions française et allemande, mais ne se réfère pas à la version anglaise. Google ignore l'ensemble du cluster hreflang. Correction : chaque page doit inclure une balise hreflang pointant vers elle-même.
2. Balises de retour non réciproques
La page anglaise pointe vers la page française. La page française ne pointe pas en arrière. Google considère cela comme rompu et pourrait abandonner la relation. Correction : chaque référence doit être mutuelle. La page française doit lister la page anglaise comme alternative anglaise.
3. Pointer hreflang vers des URL redirigées
Votre page anglaise déclare la version française à https://example.com/fr/ mais cette URL 301 redirige vers https://example.com/fr/home/. Google suit la redirection, mais le signal hreflang est affaibli — et dans certains cas entièrement ignoré.
Correction : hreflang doit pointer vers l'URL canonique finale, et non vers une chaîne de redirection. Audit avec un robot d'exploration qui signale les cibles non-200 hreflang.
4. hreflang et conflits canoniques
Votre page française a un point canonique vers la page anglaise (parce que quelqu'un a copié-collé la balise canonique). Google lit ceci comme “la page française n'est qu'un doublon de la page anglaise” et la relation hreflang est ignorée. Correction : chaque page traduite doit s'auto-canoniser. Le canonique de la page française pointe vers lui-même, et non vers l'original anglais.
5. Mélanger les codes de langue et de région de manière incohérente
Certaines pages déclarent hreflang="en", d'autres déclarent hreflang="en-US". Google les traite comme des clusters linguistiques distincts. Choisissez une stratégie par langue et respectez-la sur l’ensemble du site.
Cas de pointe de production à planifier
Cas limite 1 : ciblage régional uniquement (en-CA sans en)
Vous avez une variante anglo-canadienne de votre page mais pas de version anglaise globale. Ne pas utiliser hreflang="en" seul — Google peut proposer votre page canadienne aux utilisateurs britanniques, ce qui n'est probablement pas ce que vous souhaitez. Déclarez plutôt hreflang="en-CA" spécifiquement et laisser x-default gérer les anglophones non canadiens.
Cas limite 2 : même contenu, régions différentes
Versions anglaises américaines, britanniques et australiennes de la même page produit avec un texte identique. C'est bien — déclarer chaque région explicitement :
<link rel="alternate" hreflang="en-US" href="https://example.com/" />
<link rel="alternate" hreflang="en-GB" href="https://example.com/uk/" />
<link rel="alternate" hreflang="en-AU" href="https://example.com/au/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />Même lorsque le contenu est identique, les variantes régionales de hreflang sont précieuses pour les produits dont les prix, la devise ou les frais d'expédition sont spécifiques à la région.
Cas Edge 3 : Variantes mobiles et de bureau
Si vous avez des pages mobiles de sous-domaine m. distinctes, chaque page mobile a besoin de ses propres déclarations hreflang pointant vers d'autres variantes de langage mobile. Ne pointez pas une page française mobile vers une page anglaise de bureau — Google considère qu'il s'agit d'un cluster cassé.
Cas limite 4 : sous-domaines vs sous-répertoires
Les deux fonctionnent pour hreflang. fr.example.com et example.com/fr/ sont également valides. Le choix est opérationnel (DNS, hébergement, analyse) — et non un facteur SEO en soi. Ce qui compte, c’est la cohérence : choisissez une structure et appliquez-la à toutes les langues.
Cas de bord 5 : Pagination
La page 2 de votre index de blog français doit déclarer hreflang à la page 2 de votre index de blog anglais, et non à la page 1. Mappez des pages équivalentes à des pages équivalentes, y compris la pagination, les paramètres de requête et les filtres.
Boîtier de bordure 6 : 404 et 410 pages
Si une version traduite d'une page n'existe pas (encore), ne déclarez pas hreflang pour cette langue. Pointer hreflang vers un 404 est pire que de ne pas le déclarer du tout — Google y voit une relation brisée et peut rétrograder l'ensemble du cluster.
Comment valider avant de passer en direct
Utilisez des vérifications complémentaires car aucun rapport ne prouve à lui seul que chaque paire d’URL est correcte :
- Console de recherche Google. Soumettez les plans de site linguistiques, inspectez les URL représentatives avec l'inspection des URL et comparez les données d'indexation et de performances des pages par répertoire linguistique. L'ancien rapport International Targeting n'est plus disponible dans l'interface actuelle de la Search Console.
- Grenouille hurlante. Explore l'intégralité de votre site et signale des hreflang non réciproques, des balises de retour manquantes, des URL hreflang cassées et des incohérences. Le meilleur outil pour l’assurance qualité avant le lancement.
- Outil de test de balises hreflang de Merkle. Gratuit, basé sur un navigateur, idéal pour les contrôles ponctuels pendant le développement.
Exécutez la validation du robot d’exploration et les vérifications d’URL représentatives avant un lancement majeur, puis surveillez la Search Console après que Google ait réexploré les pages.
Comment les outils automatisés gèrent hreflang
Si vous utilisez une plateforme de traduction de sites Web comme ConveyThis, Weglot ou similaire, la génération de hreflang doit être automatique. La plateforme explore votre contenu, détecte les nouvelles pages et insère les balises hreflang correctes sur chaque version traduite — y compris les balises d'auto-référencement, les balises de retour et x-default.
Il s’agit de l’argument le plus fort en faveur de l’utilisation d’une plateforme de traduction plutôt que d’un pipeline de traduction manuelle. Maintenir manuellement hreflang sur un site de 200 pages en 12 langues signifie suivre 31 200 relations de balises. Chaque nouvelle page ajoute 12 nouvelles relations qui doivent être ajoutées à 12 endroits. Interruptions d'entretien manuel à grande échelle.
Si vous utilisez une plateforme et que vous constatez toujours des erreurs hreflang dans Search Console, la cause est généralement l'une des trois choses suivantes : une couche de mise en cache CDN qui supprime les en-têtes, un plugin CMS qui écrase les balises ou une règle de redirection qui interfère avec la structure canonique. Tous les trois sont réparables, mais ils nécessitent une coordination entre votre plateforme de traduction, votre configuration d’hébergement et votre CDN.
L'essentiel
hreflang n'est pas compliqué. C'est verbeux. La complexité vient du volume des déclarations et de la fragilité de chaque balise manquante. Établissez les bonnes bases — auto-référencement, réciproque, aligné canonique, x par défaut présent — et le reste n'est que de la maintenance.
Correct hreflang supprime l'ambiguïté quant à l'URL équivalente destinée à une langue ou une région donnée. Corrigez d’abord les bases, puis surveillez les impressions, les clics et les URL canoniques sélectionnées pendant que Google réexplore le cluster.
À propos de l'auteur
Alex Bourane, Fondateur de ConveyThis
Alex a passé la dernière décennie à construire une infrastructure pour des sites Web multilingues. Il écrit sur la localisation, la recherche en IA et l’aspect technique de la mondialisation.
LinkedIn : https://www.linkedin.com/in/alexburan/
Fatigué de déboguer hreflang manuellement ? ConveyThis génère automatiquement des balises hreflang valides, réciproques et auto-référencées sur chaque page traduite — y compris les cas x par défaut et edge. Voir la documentation de l'API