Vérification hreflang

Entrez l’adresse d’une page qui existe en plusieurs langues. Nous lisons ses lignes hreflang, validons chaque code, puis visitons chaque version alternative pour voir si elle répond, si elle peut être indexée et si elle nomme cette page en retour.

Les annotations se lisent page par page : donnez donc l’adresse de la page elle-même, pas seulement le domaine. La page d’accueil est un bon premier test.

Ou essayez www.mozilla.org/en-US/, wordpress.org

Une liste de jumelles, répétée sur chaque jumelle

Quand la même page existe en anglais, en allemand et en japonais, un moteur de recherche voit trois pages distinctes. Avec hreflang, vous lui dites qu’il s’agit d’une seule page en trois versions, pour qu’un lecteur à Berlin reçoive l’adresse allemande et non l’anglaise. Chaque version porte la liste complète des versions, elle-même comprise :

<link rel="alternate" hreflang="en" href="https://www.example.com/en/pricing/">
<link rel="alternate" hreflang="de" href="https://www.example.com/de/preise/">
<link rel="alternate" hreflang="ja" href="https://www.example.com/ja/pricing/">
<link rel="alternate" hreflang="x-default" href="https://www.example.com/en/pricing/">

La liste peut se trouver à trois endroits : dans le <head> de la page, dans un en-tête de réponse Link ou dans le plan du site XML. Cette vérification lit les deux premiers. Elle ne lit pas les plans du site : une page sans annotation ici peut donc être couverte là-bas.

Hreflang change la version affichée. Il ne change pas le classement de la page. Les moteurs de recherche le traitent comme une indication et l’abandonnent dès qu’il paraît incohérent, ce qui explique pourquoi de petites erreurs coûtent si cher.

À quoi ressemble un code valide

Une valeur est une langue, suivie facultativement d’une écriture et d’un pays, reliés par des traits d’union. Les majuscules n’ont pas d’importance.

PartieNormeExemples
Langue (obligatoire)ISO 639-1, deux lettresen, de, ja, pt
Écriture (facultative)ISO 15924, quatre lettreszh-Hans, zh-Hant, sr-Latn
Pays (facultatif)ISO 3166-1, deux lettresen-GB, pt-BR, zh-Hant-TW

Le pays n’est jamais seul et ne vient jamais en premier. Voici les erreurs que cette vérification signale, avec la correction quand il n’y en a qu’une de possible :

  • en-UK : le code ISO du Royaume-Uni est GB.
  • en_US : un trait de soulignement, comme l’écrivent les paramètres régionaux des logiciels. Hreflang veut en-US.
  • es-LA : lu comme de l’espagnol pour le Laos. Google ne lit aucun code pour l’Amérique latine, alors utilisez es ou une ligne par pays.
  • jp, cn, cz, dk : des codes de pays utilisés comme langues. Les langues sont ja, zh, cs, da.
  • en-EU, es-419, les codes à trois lettres comme eng et les codes retirés comme iw pour l’hébreu.

Le tableau des résultats détaille chaque code en toutes lettres. Cela attrape les erreurs qu’aucune règle ne peut attraper, comme uk, qui est un code parfaitement valide et qui désigne l’ukrainien.

Ce qui est vérifié sur la page elle-même

  • Adresses. Chaque ligne a besoin d’une adresse complète, avec schéma et hôte. Les adresses relatives sont signalées.
  • Doublons et conflits. La même ligne en double ne fait aucun mal et est signalée comme une remarque. Un même code donné à deux adresses différentes est une erreur, car personne ne peut dire quelle page est la version pour cette langue.
  • Auto-référence. La page doit figurer dans sa propre liste, avec son adresse exacte. Une barre oblique finale manquante suffit à rompre la correspondance.
  • x-default. La version pour les lecteurs dont la langue n’est pas listée. Elle est facultative : l’omettre vaut une note et n’est pas compté comme une faute.
  • Canonical. Hreflang ne fonctionne qu’entre des pages canoniques. Une page allemande dont le canonical désigne la page anglaise demande aux moteurs de recherche d’oublier la page allemande. Ses lignes hreflang disparaissent avec elle.
  • L’attribut lang. Si <html lang> indique sv alors que la page se liste elle-même sous se, l’un des deux est faux.
  • Position. Les lignes qui se retrouvent hors du <head>, souvent parce qu’un élément égaré ferme l’en-tête trop tôt, sont ignorées par Google et signalées ici.

Les liens retour, la moitié qui échoue le plus souvent

Une annotation ne compte que si les deux pages sont d’accord. Si la page anglaise dit « ma version allemande est là » et que la page allemande ne dit pas « ma version anglaise est ici », la paire est rejetée. Une fois votre page lue, notre serveur demande donc chaque version alternative une fois, sans suivre les redirections, puis indique pour chacune :

État
Elle doit répondre 200. Une redirection signifie que la ligne nomme une adresse qui n’est pas l’adresse finale. Une erreur signifie que la version a disparu. Un x-default qui redirige est accepté, puisque c’est exactement ce que fait un sélecteur de langue.
Indexable
Aucun noindex dans une balise meta robots ni dans un en-tête X-Robots-Tag.
Canonical vers elle-même
Son canonical, si elle en a un, doit être sa propre adresse.
Lien retour
Son propre bloc doit lister votre page, sous le même code que celui que votre page utilise pour elle-même.

Quand les corrections sont mécaniques (un code mal orthographié, une adresse relative, une ligne répétée, une ligne manquante pour la page elle-même), le résultat se termine par un bloc corrigé que vous pouvez coller. Les lignes qui demandent une décision de votre part restent telles quelles, marquées d’un commentaire.

Une vérification visite au plus 35 versions alternatives et s’arrête au bout d’une demi-minute environ. Le tableau marque celles qu’elle a sautées. Nous ne voyons pas les annotations écrites par JavaScript. Un site qui redirige les visiteurs selon leur position peut montrer à notre serveur autre chose que ce que reçoit un robot d’exploration.

Questions fréquentes

Ai-je besoin de hreflang si mon site est dans une seule langue ?

Non. Hreflang relie entre elles les versions d’une même page. Avec une seule version, il n’y a rien à relier et la vérification indique « aucune annotation » comme résultat neutre.

Qu’est-ce que x-default et est-ce obligatoire ?

C’est la ligne pour tous ceux que vos autres lignes ne couvrent pas, comme un lecteur dont vous ne proposez pas la langue. Elle pointe en général vers la version anglaise ou vers une page où le visiteur choisit une langue. Elle est recommandée, pas obligatoire.

Faut-il utiliser un code de langue seul ou ajouter le pays ?

Utilisez la langue seule (de) quand une page sert tous les locuteurs de cette langue. N’ajoutez le pays (de-AT, de-CH) que si vous publiez des pages différentes selon le pays, par exemple pour les prix ou la livraison. Vous pouvez combiner les deux : des lignes par pays pour les pages précises et une ligne de langue simple comme ligne générale.

Que veut dire « pas de lien retour » ?

Votre page nomme une autre version, mais cette version ne nomme pas votre page dans son propre bloc hreflang. Les moteurs de recherche ignorent les annotations à sens unique. Pour corriger, produisez la même liste complète sur chaque version, idéalement à partir d’une source commune unique.

Hreflang peut-il pointer vers un autre domaine ?

Oui. example.com et example.de peuvent être des versions l’un de l’autre, tant que chacun liste l’autre et lui-même. Les règles sont les mêmes qu’à l’intérieur d’un seul domaine.

Hreflang remplace-t-il la balise canonical ?

Non. Ils font des tâches différentes et doivent concorder. Le canonical dit quelle adresse représente une page parmi ses doublons et hreflang dit quelles autres pages en sont les traductions. Chaque version linguistique doit avoir un canonical vers elle-même.