FreeToGenerate.com

Collez les versions alternatives que vous avez, ou saisissez-les, et voyez ce que chaque code dit vraiment avant qu'un moteur ne le lise. Rien n'est envoyé.

Collez les balises link que vous avez déjà, ou tapez une ligne par version avec le code et l'URL. Les deux marchent.

Indiquez une URL et l'outil vérifie que l'ensemble contient bien la page elle-même, ce que Google exige.

Essayez

Ce que ces codes disent réellement

1 erreurs · 0 avertissements · 0 remarques

CodeSe litURL
enEnglishhttps://example.com/
brBretonest aussi le code pays de Brazilhttps://example.com/br/
seNorthern Samiest aussi le code pays de Swedenhttps://example.com/se/
jpn'est pas un code de langueErreur jp est le code pays de Japan, et ce n'est pas un code de langue : la balise sera donc jetée. Si vous visiez le pays, il se place après une langue : fr-JP ou en-JP.https://example.com/jp/

À placer sur chaque page de l'ensemble

Le même bloc va sur toutes, sans rien changer. Comme il énumère toutes les URL y compris la sienne, chaque page finit par se désigner elle-même et désigner les autres, ce qui est précisément ce que demande la règle des liens réciproques.

<link rel="alternate" hreflang="en" href="https://example.com/" />
<link rel="alternate" hreflang="br" href="https://example.com/br/" />
<link rel="alternate" hreflang="se" href="https://example.com/se/" />
<link rel="alternate" hreflang="jp" href="https://example.com/jp/" />

Aussi disponible en : English · Español · Português · العربية

Générateur et vérificateur de hreflang

Générez les balises link d'un ensemble de pages traduites, et vérifiez l'ensemble que vous avez déjà au regard des règles que les moteurs appliquent réellement.

Ce qu'est une balise hreflang

Quand une page existe en plusieurs langues, chaque version a besoin de pouvoir le dire. C'est le rôle de la balise hreflang : un élément link qui nomme une langue et l'URL de la version écrite dedans. Placez l'ensemble complet sur chaque version et un moteur peut servir la page française à un lecteur francophone au lieu de le deviner d'après le texte.

La valeur est un code de langue, suivi facultativement d'une région. Google l'énonce sans détour : le premier code est la langue au format ISO 639-1, suivi d'un second code facultatif pour la région au format ISO 3166-1 Alpha 2. Ainsi fr est le français partout, fr-CA le français pour les lecteurs du Canada, et pt-BR le portugais pour ceux du Brésil. Il existe en plus une valeur réservée, x-default, pour la version à montrer quand aucune autre ne convient.

La règle que presque tout le monde rate est la phrase suivante de cette même documentation : on ne peut pas mettre le code pays tout seul. La première position est une langue, toujours. Cela ressemble à un formalisme et c'est l'erreur la plus coûteuse du référencement international, pour une raison que l'on peut mesurer.

Comment s'en servir

  1. Collez ce que vous avez, ou saisissez-le. Les balises link fonctionnent telles quelles, quel que soit l'ordre des attributs. Une simple liste d'une ligne par version, un code et une URL, fonctionne aussi, dans l'ordre qui vous arrange.
  2. Lisez la colonne du milieu. Elle dit ce que chaque code signifie, pas s'il a pu être analysé. C'est là qu'un code écrit comme un pays apparaît sous les traits de la langue de quelqu'un d'autre.
  3. Copiez le bloc généré sur chaque page de l'ensemble. Le même bloc, sans y toucher, sur toutes. Il énumère toutes les URL y compris la sienne, ce que demandent exactement l'autoréférence et les liens réciproques.

L'erreur qui n'arrive jamais dans vos rapports

Mettre un code pays là où va une langue est l'erreur classique du hreflang, et presque tous les articles la traitent comme une seule. Il y en a deux, et une seule vous est signalée.

Prenez les 249 codes pays de la norme ISO 3166-1 et demandez lesquels sont aussi des codes de langue ISO 639-1 valides. Pour 140 d'entre eux la réponse est non : hreflang à jp, cn ou us n'est aucune langue, donc la balise est jetée et la Search Console vous dira qu'elle est invalide. Voilà la moitié bruyante, et elle finit par être corrigée.

Les 109 autres sont bel et bien des codes de langue. Ils s'analysent. Rien ne les rejette, rien ne les dénonce, et pour 75 d'entre eux la langue nommée n'a rien à voir avec le pays que l'auteur avait en tête. Une page marquée br n'est pas brésilienne, elle est bretonne. Marquée ca elle n'est pas canadienne, elle est catalane. Marquée se elle n'est pas suédoise mais same du Nord ; marquée sv elle est réellement suédoise, ce qui tombe mal si vous visiez le Salvador. Taïwan hérite de tw, qui est le twi, parlé au Ghana. Chypre hérite de cy, qui est le gallois.

Chacune de ces balises est une annotation valide pour un public réel, elles fonctionnent donc parfaitement. Simplement, elles décrivent un ensemble de pages que personne ne cherchait à atteindre, et aucun état d'erreur ne vient vous le signaler. La moitié de cette faute que vous pouvez trouver est la moitié inoffensive.

C'est à cela que sert la colonne du milieu du tableau ci-dessus. Cet outil ne vous accuse de rien lorsqu'il voit un code isolé, car il ne peut pas savoir ce que vous vouliez dire : ar est vraiment l'arabe, et ce site publie dans cette langue. Il se contente d'indiquer quelle langue vous avez écrite, à côté de l'URL sur laquelle vous l'avez écrite, et laisse le constat à la seule partie qui connaisse la réponse.

Limites assumées, et vérifications

Tout ceci tourne dans votre navigateur, il ne peut donc pas aller chercher les autres pages de votre ensemble pour confirmer qu'elles portent des balises équivalentes. C'est une lecture entre origines différentes, et aucun outil côté client ne peut honnêtement le promettre. Ce qu'il fait, c'est en supprimer le besoin : puisque le bloc généré énumère toutes les URL y compris celle de la page elle-même, le coller sans modification sur toutes satisfait les deux règles sur lesquelles on trébuche. Google est catégorique sur ce qui arrive sinon. Chaque version doit se lister elle-même en plus de toutes les autres, et si deux pages ne se désignent pas mutuellement les balises sont ignorées.

Deux choses ne sont délibérément pas traitées comme des erreurs. La casse d'abord : le BCP 47 rend la casse des sous-étiquettes insignifiante, donc en-us fonctionne exactement comme en-US, et les outils qui le signalent inventent une règle. Cela apparaît ici comme une remarque sur l'écriture habituelle, rien de plus. Ensuite une sous-étiquette d'écriture de quatre lettres comme Hant, acceptée sur sa forme et non confrontée à un registre, puisque le format documenté par Google est une langue et une région facultative.

Les tables de langues et de pays ne sont pas saisies ici. Elles sont générées à partir des deux mêmes jeux de données qui alimentent les pages de codes ISO 639 et ISO 3166 de ce site, si bien que ce que ce vérificateur accepte et ce que ces pages affichent ne peuvent pas diverger. Le chiffre de 75 est une mesure faite sur eux : pour chaque collision, on demande à CLDR à la fois si ce pays parle cette langue et si cette langue appartient à ce pays, et le cas n'est compté que si les deux réponses sont non. Avec un seul test on en compte trois de trop, car le fidjien se parle réellement aux Fidji, le marshallais aux Îles Marshall et le norvégien en Norvège. Le moteur porte 761 assertions, dont un balayage confirmant qu'aucune des 109 collisions ne lève d'erreur ni d'avertissement.

Pourquoi est-ce gratuit ?

Rien ici n'a besoin d'un serveur. C'est une consultation de deux tables et une poignée de règles, le tout dans l'onglet que vous avez déjà ouvert : il n'y a donc pas de coût à répercuter ni de compte à créer.

Ce que vous collez n'est ni envoyé, ni conservé, ni journalisé. Des URL non encore publiées passent par un outil de ce genre en permanence, et cela mérite d'être dit plutôt que supposé.