Par exemple, des erreurs dans le format du code langue ou des chemins de liens incomplets peuvent empêcher les moteurs de recherche de reconnaître correctement la langue ou la région d’une page, ce qui peut entraîner une concurrence de trafic entre les pages multilingues et une perte de l’audience cible.
Cet article résume, d’un point de vue technique et pratique, les 7 erreurs les plus courantes de configuration hreflang. Il est conseillé d’utiliser des outils pour vérifier régulièrement afin d’éviter que de petites erreurs ne compromettent l’efficacité globale de l’optimisation.

Erreur de format des codes langue ou région
Par exemple, utiliser des majuscules (comme EN-US
) ou faire une faute d’orthographe (comme écrire zh-CN
en zh-CH
) peut empêcher les moteurs de recherche d’identifier correctement la région cible de la page, voire entraîner une interprétation erronée comme un tag invalide.
Même si le code semble correct (comme utiliser es-ES
au lieu de es
), l’information redondante peut perturber la logique de correspondance.
L’impact peut être important, par exemple le trafic des utilisateurs espagnols peut être mal dirigé vers une page en portugais.
Règles des codes standards ISO
- Code langue : doit utiliser les lettres minuscules selon la norme ISO 639-1 (ex.
en
, es
, zh
), support uniquement sur deux lettres. - Code région : optionnel, utilise les lettres majuscules selon la norme ISO 3166-1 (ex.
US
, GB
, CN
), abrégés de pays ou région. - Format combiné : la langue et la région sont séparées par un tiret, par exemple
en-US
(anglais américain), zh-CN
(chinois simplifié).
Exceptions :
- Si seul le code langue est utilisé (ex.
fr
), cela signifie que la page cible tous les utilisateurs parlant cette langue sans restriction géographique. - Le chinois traditionnel utilise
zh-Hant
(chinois traditionnel) ou zh-Hant-TW
(traditionnel taïwanais), éviter zh-TW
qui peut être mal interprété comme chinois simplifié taïwanais.
Scénarios typiques d’erreurs et conséquences
Erreur 1 : confusion majuscules/minuscules
- Exemple d’erreur :
EN-us
(code langue en majuscule + code région en minuscule), Zh-cn
(première lettre du code langue en majuscule). - Conséquence : les moteurs de recherche peuvent complètement ignorer ce tag, ce qui empêche la page d’atteindre son public cible.
Erreur 2 : faute d’orthographe ou code fictif
- Exemple d’erreur :
pt-BZ
(le code correct pour le Brésil est BR
), eu
(le basque écrit eu
, mais certains moteurs ne supportent pas les langues rares). - Conséquence : les langues rares ou codes erronés peuvent empêcher la bonne indexation et détourner le trafic vers la page par défaut.
Erreur 3 : codes redondants ou combinaisons erronées
- Exemple d’erreur :
es-ES
(espagnol + Espagne, en fait es
suffit), en-US-UK
(assemblage invalide de plusieurs régions). - Conséquence : l’information redondante embrouille les moteurs, ceux-ci privilégient les pages avec des codes plus simples.
Outils recommandés et méthodes de validation
- Outil de test hreflang Google : saisir l’URL pour vérifier si le code est bien interprété (à utiliser avec Search Console).
- Screaming Frog : crawler le site, filtrer les balises hreflang et exporter les erreurs en masse (version payante).
- Hreflang Validator (outil tiers) : détection gratuite en ligne, indique les erreurs de format et les liens en conflit.
Étapes pratiques de correction
Vérifier le code actuel : sur un site WordPress, utilisez un plugin comme Yoast SEO ou vérifiez directement dans le code source les balises <link rel="alternate" hreflang="..." />
.
Remplacement en masse des codes erronés:
- Si vous utilisez un plugin multilingue (comme WPML), modifiez directement le format du « code langue » dans les paramètres de langue.
- En cas de modification manuelle, assurez-vous que toutes les pages utilisent un format uniforme (par exemple, remplacer globalement
EN
par en
).
Ajouter un code régional (optionnel):
- À ajouter uniquement si vous souhaitez segmenter par région (par exemple
en-GB
pour les utilisateurs britanniques), sinon conservez uniquement le code langue (comme fr
).
Revalidation:Utilisez un outil pour vérifier à nouveau, afin de garantir que les pages corrigées renvoient un code 200 et qu’il n’y ait pas d’erreurs de crawl.
Ne pas utiliser d’URL absolue complète
Beaucoup de webmasters pensent que les chemins relatifs (comme /de/page
) ou omettre le protocole (comme example.com/de
) simplifient la configuration, mais cela peut causer de graves problèmes.
Par exemple, si une page existe en versions http
et https
, ne pas spécifier le protocole peut amener les moteurs à considérer ces versions comme des pages distinctes, dispersant ainsi le poids SEO.
De plus, pour les sites utilisant des sous-domaines ou des sous-répertoires, ne pas uniformiser l’usage des URL absolues peut créer des ambiguïtés dans les chemins, rendant les balises inefficaces (comme un mélange d’URL mobile et desktop).
Définition et nécessité des URL absolues
URL absolue doit contenir le protocole (http://
ou https://
), le nom de domaine complet et le chemin (par exemple https://www.example.com/de/page
).
Nécessité:
- Les moteurs ont besoin de distinguer clairement les différentes pages. Un chemin relatif (comme
/de/page
) peut être interprété comme n’importe quelle version du domaine (http ou https), entraînant du contenu dupliqué. - En cas d’utilisation de sous-domaines ou sous-répertoires, ne pas utiliser une URL complète peut faire confondre les moteurs sur la propriété des pages (par exemple
de.example.com/page
et www.example.com/de/page
peuvent être vus comme des pages distinctes).
Scénarios typiques de problèmes:
- La page existe en versions
http
et https
, mais hreflang ne précise pas le protocole, dispersant ainsi le poids SEO. - Le contenu est partagé entre version mobile et desktop mais avec des structures URL différentes (comme
m.example.com/de
et example.com/de
), sans utiliser d’URL absolue pour relier.
Erreurs courantes et conséquences
Erreur 1 : chemins relatifs ou omission du protocole
Exemples erronés:
<link hreflang="de" href="/de/page" />
(chemin relatif)<link hreflang="es" href="www.example.com/es/page" />
(sans https://
)
Conséquences:
- Les moteurs peuvent interpréter
/de/page
comme http://example.com/de/page
, alors que la version réelle est en https
, rendant la balise invalide. - Les versions HTTP et HTTPS sont vues comme des entités distinctes, causant du contenu dupliqué et une dispersion du poids SEO.
Erreur 2 : sous-domaines non uniformisés
- Exemple erroné : le site principal utilise
https://example.com/fr/page
, mais le sous-site français utilise une URL différente.
https://fr.example.com/page
ne pointe pas vers des URL absolues dans les balises hreflang associées.Conséquence : Les moteurs de recherche ne peuvent pas établir le lien entre les sous-domaines et les pages principales, ce qui peut amener les utilisateurs francophones à être redirigés vers la page de langue par défaut.Erreur 3 : Paramètres dynamiques non standardisés
- Exemple d’erreur :
<link hreflang="ja" href="https://example.com/page?lang=ja" />
(avec paramètres de suivi) - Conséquence : Les moteurs peuvent considérer ces URL comme des pages différentes (par exemple
?lang=ja
et ?lang=ja&utm=ads
), ce qui entraîne une couverture incomplète des balises hreflang.
Méthodes de détection via outils
- Google Search Console :
Vérifiez dans le rapport de couverture les erreurs liées aux “pages dupliquées” ou aux “hreflang manquants” pour localiser les URL incomplètes. - Screaming Frog :
Après avoir exploré le site, filtrez les balises hreflang
et vérifiez si tous les attributs href
sont des URL absolues (critères de filtre : //example.com
ou /path
). - Sitebulb :
Dans le rapport d’audit SEO international, les URLs hreflang incomplètes sont directement signalées avec des suggestions de correction.
Solutions et étapes pratiques
Systèmes CMS (comme WordPress) :
Configuration des plugins :
Si vous utilisez des plugins comme Yoast SEO, activez l’option “Générer des URL absolues” dans les paramètres multilingues (généralement désactivez les chemins relatifs).
Remplacement en masse dans la base de données :
Avec des commandes SQL ou des plugins (comme Better Search Replace), remplacez href="/
par href="https://www.example.com/
.
Correction manuelle du code :
Dans le HTML ou la logique côté serveur, assurez-vous que tous les liens hreflang sont construits en URL complètes, par exemple :
Configuration serveur :
- Forcer l’uniformité du protocole : via
.htaccess
ou configuration Nginx, rediriger automatiquement http
vers https
pour éviter le contenu mixte. - Normalisation des URL : ajouter des redirections 301 pour les différentes variantes d’un même contenu (ex.
/de
et /de/
) afin d’assurer une URL absolue unique.
Absence de balise hreflang auto-référencée
Par exemple, une page en français ne contenant que des liens vers les versions anglaise ou espagnole sans inclure un hreflang="fr"
pointant vers elle-même,
le moteur de recherche pourrait ne pas identifier correctement la langue de la page, la privant ainsi d’une bonne classification pour les utilisateurs francophones.
Rôle et importance de la balise auto-référencée
Une balise auto-référencée est une déclaration hreflang sur la page pointant vers elle-même (exemple : une page en français doit inclure <link rel="alternate" hreflang="fr" href="URL de la page"/>
).
Fonctions principales :
- Permet aux moteurs de recherche de déterminer clairement la langue et la région de la page, évitant les mauvaises interprétations.
- Forme un lien fermé entre les versions linguistiques, assurant une bonne transmission du poids SEO.
Conséquences en cas d’absence:
- Les moteurs de recherche peuvent considérer la page comme « langue non déclarée » et l’assigner par défaut au répertoire principal de la langue, ce qui entraîne une perte de trafic des utilisateurs cibles.
- Dans un contexte de concurrence multilingue (par exemple, si les pages en anglais et en espagnol ne se réfèrent pas elles-mêmes), cela peut déclencher un problème de contenu dupliqué interne.
Scénarios d’erreurs courants et analyses de cas
Erreur 1 : Mauvaise utilisation de hreflang sur un site mono-langue
- Contexte : Une page disposant d’une seule version linguistique ajoute de force des balises hreflang pointant vers des pages dans d’autres langues inexistantes.
- Exemple : Une page d’un site uniquement en anglais ajoute
hreflang="en"
qui pointe vers elle-même, tout en ajoutant incorrectement un lien hreflang="es"
vers une page inexistante, ce qui perturbe les moteurs de recherche.
Erreur 2 : Oubli de configuration dans le plugin multilingue
- Exemple : Lors de l’utilisation du plugin WPML, l’option « Générer automatiquement les hreflang auto-référencés » n’a pas été cochée.
- Conséquence : Les balises générées contiennent uniquement des liens vers d’autres versions linguistiques, sans déclaration de la page courante.
Erreur 3 : Pages dynamiques sans balises complètes
- Exemple : Sur des pages basées sur JavaScript (frameworks React/Vue), les balises hreflang ne sont pas correctement injectées dans le
<head>
. - Conséquence : Les robots des moteurs de recherche risquent de ne pas reconnaître les balises auto-référencées générées dynamiquement.
Outils et méthodes de vérification
Étape 1 : Vérification manuelle du code source
- Ouvrir le code source de la page avec
Ctrl+U
, rechercher hreflang="xx"
, et vérifier s’il existe une balise pointant vers l’URL courante (xx est le code langue de la page).
Étape 2 : Validation via Google Search Console
- Entrer l’URL dans l’outil « Inspection d’URL », consulter le rapport « Ciblage international » — si le message « hreflang auto-référencé non détecté » apparaît, le problème est présent.
Étape 3 : Utilisation de l’outil Hreflang Validator
- Entrer l’URL de la page, l’outil affichera tous les liens hreflang associés, les balises auto-référencées manquantes seront indiquées par un avertissement rouge.
Solutions et étapes pratiques
Correction sur CMS (exemple WordPress):
Configuration du plugin:
- Avec Yoast SEO : activer l’option « Ajouter hreflang auto-référencé » dans les paramètres avancés.
- Avec WPML : aller dans « Paramètres de langue » → « Options SEO », cocher « Inclure le lien vers soi-même ».
Correction manuelle (sites statiques ou code personnalisé):
Ajouter le code suivant dans la section <head>
(exemple page en français) :
Correction des pages rendues dynamiquement (comme React):
Dans la logique de rendu côté serveur (SSR), générer dynamiquement une balise d’auto-référence en fonction de la langue actuelle de la page :
Principe de liaison en boucle fermée et nécessité
La règle clé de hreflang est que toutes les pages liées doivent se référer mutuellement, formant une boucle complète, par exemple :
- La page allemande (
de
) doit pointer vers la page anglaise (en
), la page française (fr
) et les autres versions linguistiques ; - La page anglaise et la page française doivent également renvoyer vers la page allemande.
Nécessité :
- Transmission du poids SEO : La liaison en boucle fermée aide les moteurs de recherche à comprendre que les pages multilingues sont équivalentes, évitant la dispersion du poids SEO.
- Prévention du contenu dupliqué : Si la liaison est unilatérale (par exemple, la page anglaise pointe vers la page allemande mais pas inversement), les moteurs peuvent considérer les pages comme du contenu distinct et pénaliser le contenu dupliqué.
Exceptions :
- Une page en langue unique (par exemple uniquement en anglais) n’a pas besoin de boucle fermée, mais doit se référer à elle-même.
- Les variantes régionales (comme
en-US
et en-GB
) doivent se pointer mutuellement, mais ne sont pas obligées de lier les autres langues.
Scénarios courants de rupture de liens et conséquences
Scénario 1 : Nouvelle version linguistique ajoutée sans mise à jour des anciennes pages
- Exemple : Un site d’actualités ajoute une page japonaise (
ja
), mais les pages anglaise et chinoise ne contiennent pas de hreflang pointant vers la page japonaise. - Conséquence : La page japonaise devient une « page orpheline », les moteurs n’indexent que les autres pages multilingues liées.
Scénario 2 : Défaut de logique du plugin CMS
- Exemple : Le plugin multilingue WordPress (comme Polylang) ne met pas automatiquement à jour les liens vers la nouvelle langue pour les anciens contenus lors de la création de pages en masse.
- Conséquence : Certaines pages perdent leur liaison, empêchant les utilisateurs de basculer vers la nouvelle version linguistique depuis l’ancien contenu.
Scénario 3 : Paramètres dynamiques entraînant une rupture de liaison
- Exemple : L’URL de la page espagnole contient des paramètres (comme
?lang=es
), mais les autres versions linguistiques ne les incluent pas dans le hreflang. - Conséquence : Les moteurs considèrent la page avec le paramètre
es
comme un contenu non lié.
Outils de détection et méthodes d’inspection
Outil 1 : Screaming Frog
- Dans les résultats du crawl, ouvrez l’onglet « Hreflang » et filtrez par « Missing Reciprocal Links » (liens réciproques manquants).
- Procédure : Exporter la liste des erreurs pour localiser les groupes d’URL ne formant pas une boucle complète.
Outil 2 : Sitebulb
- Dans le rapport « Audit SEO International », consultez l’alerte « Unreciprocated hreflang links », affichant directement les pages rompues et les langues manquantes.
Outil 3 : DeepCrawl
- Configurer des règles personnalisées pour surveiller la relation entre les pages multilingues et générer un rapport hebdomadaire automatique des problèmes de rupture de liens.
Solutions et étapes pratiques
Solution 1 : Correction en masse via un plugin CMS (exemple Shopify)
Dans les paramètres du plugin multilingue (comme Langify), activez l’option « Liaison automatique de toutes les versions linguistiques ».
Dans les « Paramètres du modèle », assurez-vous que la logique des balises hreflang inclut une boucle parcourant toutes les versions linguistiques :
Solution 2 : Correction manuelle du code (site statique)
Créez une liste de correspondance pour chaque version linguistique (par exemple un fichier Excel), listant tous les groupes d’URL à lier entre eux.
Ajoutez les balises dans la page selon cette liste, par exemple :
Modifiez également les balises hreflang des pages allemande et française pour inclure un lien vers la page anglaise.
Solution 3 : Automatisation côté serveur (ex : Nginx)
Générez dynamiquement les balises hreflang via un reverse proxy et des règles de mappage :
Conflits avec les balises Canonical
Par exemple, si la page produit allemande a une balise Canonical pointant vers la page principale anglaise, les moteurs de recherche considéreront que la page allemande est une copie de la page anglaise, et ne la distribueront pas aux utilisateurs allemands.
Un problème plus fréquent est que de nombreux CMS configurent par défaut toutes les versions linguistiques pour pointer vers la langue principale avec un Canonical (ex : x-default
), empêchant ainsi l’indexation indépendante des autres pages linguistiques.
Principe de conflit et règles de priorité
Ordre de priorité du traitement des balises hreflang et Canonical par les moteurs de recherche :
Canonical prioritaire : si la page A a un Canonical pointant vers la page B, les moteurs considèrent A comme une copie de B, même si A a une déclaration hreflang, elle sera ignorée.
Scénarios où hreflang est inefficace :
- La page française a un Canonical pointant vers la page anglaise → la page française ne sera pas distribuée aux utilisateurs français.
- Les pages multilingues ont un Canonical uniforme pointant vers la page principale → toutes les versions linguistiques sont considérées comme du contenu dupliqué.
Règle d’exception :
- Si la balise Canonical pointe vers elle-même (c’est-à-dire
<link rel="canonical" href="URL de la page actuelle"/>
), hreflang peut fonctionner normalement.
Scénarios d’erreurs typiques et conséquences
Erreur 1 : Conflit de configuration par défaut des plugins multilingues
- Exemple : Le plugin Yoast SEO de WordPress configure par défaut la balise Canonical des pages multilingues pour pointer vers la page principale en langue source. Par exemple, la page allemande a pour balise Canonical
<link rel="canonical" href="https://example.com/en/page"/>
. - Conséquence : La page allemande est considérée comme une copie de la page anglaise, elle n’apparaît pas dans les résultats de recherche en allemand, entraînant une perte de trafic de plus de 50 %.
Erreur 2 : Paramètres dynamiques perturbateurs
- Exemple : Une URL avec paramètres (comme
example.com/page?lang=de
) a une balise Canonical pointant vers la version sans paramètres (example.com/page
), mais cette dernière ne dispose pas de configuration hreflang. - Conséquence : La page allemande avec paramètres n’est pas indexée, les utilisateurs ne voient que la page en langue par défaut lors de la recherche.
Erreur 3 : Variantes régionales non déclarées séparément
- Exemple : La page
en-US
a pour Canonical la page anglaise générique (en
), ce qui fait que les moteurs considèrent que la version anglaise américaine n’a pas de valeur indépendante. - Conséquence : Les utilisateurs américains peuvent être redirigés vers la page
en
(exemple : anglais britannique), ce qui dégrade l’expérience de localisation.
Outils de détection et méthodes de vérification
Outil 1 : Google Search Console
- Accédez au rapport « Couverture », filtrez sous l’onglet « Exclues » les éléments « Pages en double » ou « Soumises mais non indexées », vérifiez si le hreflang est défaillant à cause de conflits Canonical.
Outil 2 : Screaming Frog
- Après avoir exploré le site, filtrez les pages contenant à la fois les balises hreflang et Canonical, vérifiez si le Canonical pointe vers une autre page (et non vers elle-même).
- Exportez les données et appliquez un filtre :
Canonical != Self-URL
.
Outil 3 : DeepCrawl
- Configurez une alerte personnalisée déclenchée quand hreflang et Canonical ne ciblent pas la même URL.
Solutions de correction et étapes pratiques
Solution 1 : Correction via plugin CMS (exemple Yoast SEO)
- Accédez aux paramètres multilingues, désactivez l’option « Canonical toujours vers la langue principale ».
- Dans les paramètres avancés, activez « Générer un Canonical distinct pour chaque version linguistique ».
Solution 2 : Correction manuelle du code
Dans la section <head>
de la page, assurez-vous que la balise Canonical pointe vers l’URL propre à la page, par exemple :
Solution 3 : Configuration côté serveur (exemple Nginx)
Génération dynamique de la balise Canonical adaptée à la version linguistique courante :
Par exemple, une page générée dynamiquement peut ne pas charger complètement le HTML en raison d’un timeout serveur, ce qui entraîne l’absence de la balise hreflang dans la section <head>
;
Ou la page mobile renvoie un code 302 de redirection temporaire au lieu de 200, ce qui peut amener les moteurs à ignorer l’indexation des balises ;
Certaines règles CDN ou de pare-feu bloquent les requêtes des crawlers, empêchant la lecture des pages linguistiques spécifiques à certaines régions.
Par exemple, une page en espagnol peut générer plusieurs URL selon les paramètres (ex : /es/page?ref=facebook
et /es/page?ref=email
), que les moteurs considèrent comme des pages distinctes, provoquant du contenu dupliqué.