Une entreprise construit un site européen, le traduit en allemand, en français et en espagnol, et publie le tout. Quelques semaines plus tard, personne en Allemagne ne trouve la version allemande, alors que la version anglaise y apparaît à sa place. Rien n'est cassé : les pages se chargent, le texte est correct, les liens fonctionnent. La cause tient le plus souvent en quelques lignes dans l'en-tête de chaque page, que personne dans l'équipe ne lit et que le moteur lit très attentivement. Le problème est fréquent sur les sites bâtis par des équipes qui n'ont jamais eu à gérer plusieurs versions linguistiques d'une même page.
Ce que fait hreflang, et ce qu'il ne fait pas
Hreflang est une annotation placée dans l'en-tête de la page, dans le plan du site ou dans la réponse HTTP. Pour une page donnée, elle liste les pages équivalentes dans les autres langues et pour les autres pays, chacune avec un code : une langue, éventuellement suivie d'un pays. Quand quelqu'un en Allemagne cherche en allemand, le moteur peut remplacer le résultat anglais par le résultat allemand, parce que l'annotation lui dit qu'il s'agit de la même page pour des publics différents. C'est un signal, pas un ordre. Il ne traduit pas, ne donne pas une meilleure position à une page et n'empêche pas qu'une page soit montrée ailleurs. Il se contente de choisir la bonne version parmi des pages qui existent déjà et sont déjà indexées.
Pourquoi une page peut-elle disparaître à cause de cela ? Parce que le moteur évite d'afficher plusieurs résultats qui se ressemblent. Quand il trouve des pages presque identiques, il les regroupe et en garde une, appelée canonique. Une page allemande dont le menu n'est pas traduit, avec des noms de produits anglais et des caractéristiques techniques identiques à celles de la page anglaise, ressemble beaucoup à cette dernière aux yeux du moteur. L'annotation hreflang est ce qui prouve qu'elles s'adressent à des publics différents. Si l'annotation est invalide, la preuve est écartée. Le moteur garde la page anglaise, l'allemande est classée comme doublon, et personne n'est prévenu.
Les trois erreurs classiques
- Pas de lien retour. La page anglaise désigne la page allemande comme équivalente, mais la page allemande ne renvoie pas vers l'anglaise. Hreflang ne compte que si les deux côtés se confirment, et le moteur écarte donc la paire. Chaque version doit lister toutes les autres et elle-même, et une version ajoutée plus tard doit être ajoutée sur chaque page existante, pas seulement sur la nouvelle.
- Des codes qui n'existent pas. La langue s'écrit d'abord, puis un pays facultatif, avec les codes des normes internationales. Erreurs typiques : un pays seul sans langue, le Royaume-Uni écrit avec les mauvaises lettres, un tiret bas là où un trait d'union est attendu, ou un code inventé par l'extension de traduction. Un code invalide est ignoré sans aucun message, comme si la ligne n'existait pas.
- Des annotations qui contredisent la page canonique. La page allemande se déclare version allemande, mais sa balise canonique pointe vers la page anglaise. Les deux signaux disent le contraire, et la canonique l'emporte : on dit à la page allemande qu'elle n'est qu'une copie. Il en va de même quand hreflang désigne des adresses qui redirigent ailleurs, qui renvoient une erreur ou dont l'indexation est bloquée.
D'autres façons de se tromper
Trois autres cas méritent d'être cités. Le premier est une page qui ne se référence pas elle-même : chaque page doit figurer dans sa propre liste, et beaucoup de générateurs l'oublient. Le deuxième est la version par défaut. Une valeur particulière, x-default, désigne la page à montrer quand aucune langue ne correspond, souvent la page anglaise ou un sélecteur de langue ; l'omettre n'est pas une erreur mais laisse le choix au moteur. Le troisième vient des redirections automatiques selon la langue du navigateur ou l'adresse IP. Si un visiteur, ou le robot du moteur, est envoyé vers la page anglaise dès qu'il arrive de l'extérieur d'un pays, le robot ne voit jamais la page allemande. Proposez le choix par un lien visible plutôt que de l'imposer.
Comment le constater de l'extérieur
- Ouvrez la page allemande et affichez son code source. Cherchez dans l'en-tête les lignes qui commencent par le mot alternate et portent l'attribut hreflang. Vérifiez que la page allemande elle-même y figure, que chaque langue de votre site y est, et que les codes sont orthographiés comme attendu.
- Faites de même sur la page anglaise et confirmez qu'elle liste l'allemande. Puis suivez chaque adresse listée et vérifiez qu'elle se charge directement, sans redirection, et qu'elle porte la même liste en retour.
- Regardez la balise canonique de chaque version. Sur une page allemande, elle doit désigner cette même page allemande, pas l'anglaise.
- Dans l'outil gratuit de recherche destiné aux propriétaires de sites, inspectez l'adresse allemande. Si le rapport indique que la page est un doublon et que le moteur a retenu une autre canonique que la vôtre, vous tenez la cause.
- Dans le rapport de performance, filtrez sur l'Allemagne et sur la page allemande. Si c'est l'adresse anglaise qui recueille les impressions qui devraient revenir à l'allemande, la substitution ne fonctionne pas.
| Ce que vous constatez | Cause probable | Premier point à vérifier |
|---|---|---|
| La page anglaise s'affiche dans les résultats allemands | Annotation ignorée ; pages regroupées comme doublons | Les liens retour sur les deux versions |
| Page allemande signalée comme doublon | Balise canonique vers l'anglais | Canonique de la page allemande |
| Annotations présentes mais sans effet | Codes invalides ou adresses qui redirigent | Orthographe des codes ; chargement direct de chaque adresse |
| Version allemande jamais explorée | Redirection automatique selon la langue ou le pays | Visiter l'adresse allemande sans redirection |
Corriger dans un ordre raisonnable
Commencez par les balises canoniques, car une canonique fausse annule tout le reste. Puis la liste elle-même : faites-la produire par un seul gabarit ou une seule extension que vous comprenez, plutôt que de la saisir page par page, car les listes manuelles divergent dès qu'une page est ajoutée. Générez l'ensemble des paires à partir d'une source unique, pour toutes les pages, pas seulement l'accueil. Supprimez ensuite la redirection automatique selon la langue. Enfin, soumettez à nouveau le plan du site et patientez : le moteur doit réexplorer chaque page du groupe avant de faire confiance au nouveau signal, et le temps que cela prend dépend de la taille du site et de la fréquence des passages. Un site traduit en partie ne doit relier que les pages qui existent réellement dans chaque langue.
Hreflang ne répare pas une mauvaise traduction. Si la page allemande est une traduction automatique avec un menu anglais, le moteur y voit encore peu de différence avec l'anglaise, et l'acheteur qui y arrive voit la même chose. Corrigez d'abord le balisage, qui coûte quelques heures, puis demandez-vous honnêtement si la page mérite d'être montrée à un acheteur allemand. Une page que vous n'enverriez pas à un client ne doit pas être celle que vous demandez au moteur de préférer.