Hreflang est une annotation qui indique aux moteurs de recherche qu'une page existe en plusieurs versions, destinées à des langues ou à des pays différents. Chaque version déclare l'adresse de toutes les autres, et le code de la langue, parfois du pays, auquel elle s'adresse.
L'attribut ne sert pas à détecter la langue d'une page. Google l'établit lui-même par ses algorithmes, sans tenir compte de hreflang ni de l'attribut lang du code HTML. Hreflang lui dit seulement quelle version proposer à quel public, lorsqu'il en existe plusieurs.
Il répond surtout à deux situations. La première concerne les traductions d'un même contenu. La seconde concerne les variantes régionales d'une même langue, par exemple des pages en français pour la France, la Belgique et la Suisse, qui diffèrent par les prix, la devise ou les conditions de livraison. Ces pages quasi identiques pourraient passer pour du contenu dupliqué sans hreflang pour les distinguer.
Dans le code HTML. Chaque page contient, dans son en-tête, une balise link par version, y compris pour elle-même. C'est la méthode la plus répandue.
<link rel="alternate" hreflang="fr-FR" href="https://www.exemple.com/fr-fr/" /> <link rel="alternate" hreflang="fr-BE" href="https://www.exemple.com/fr-be/" /> <link rel="alternate" hreflang="en-GB" href="https://www.exemple.com/en-gb/" /> <link rel="alternate" hreflang="x-default" href="https://www.exemple.com/" />
Dans l'en-tête HTTP. Pour un document sans code HTML, comme un PDF, le serveur renvoie les mêmes informations dans un en-tête Link.
Dans le sitemap. Les versions sont déclarées dans le sitemap XML, sous chaque adresse. Cette méthode évite d'alourdir les pages et centralise la gestion, ce qui la rend pratique sur les grands sites.
Les trois méthodes sont équivalentes pour Google. Il suffit d'en choisir une et de s'y tenir, car les mélanger multiplie les risques d'incohérence.
La valeur de hreflang commence toujours par un code de langue au format ISO 639-1, en deux lettres, comme fr, en ou de. On peut y ajouter un code de pays au format ISO 3166-1 alpha-2, séparé par un tiret, comme fr-BE pour le français de Belgique ou en-GB pour l'anglais du Royaume-Uni.
Le pays seul n'est pas accepté. Un code comme BE ne veut rien dire pour Google, qui ne déduit pas la langue du pays. Certaines erreurs reviennent souvent, comme l'emploi de UK pour le Royaume-Uni, qui n'est pas un code de pays valide, ou de EU pour l'Europe, qui n'en est pas un non plus.
La valeur x-default désigne la page à proposer aux internautes dont la langue ne correspond à aucune des versions déclarées. Il s'agit souvent d'une page d'accueil qui laisse choisir la langue ou le pays, ou de la version anglaise d'un site international.
Elle n'est pas obligatoire, mais elle évite qu'un internaute japonais, par exemple, tombe au hasard sur la version belge d'un site qui n'a rien prévu pour lui.
L'absence de lien retour. Si la page française cite la page anglaise, la page anglaise doit citer la page française. Faute de cette réciprocité, Google peut ignorer les annotations. C'est l'erreur la plus répandue, souvent causée par une version ajoutée sans mise à jour des autres.
L'oubli de l'autoréférence. Chaque version doit figurer dans sa propre liste, en plus des autres.
Les adresses qui ne répondent pas. Une annotation qui pointe vers une redirection, une page en erreur ou une page dont la balise canonique désigne une autre adresse brouille le signal. Chaque adresse citée doit être la version canonique de la page, accessible et indexable.
La redirection automatique selon la langue. Rediriger d'office l'internaute vers une version d'après son adresse IP ou son navigateur peut empêcher Googlebot, qui explore surtout depuis les États-Unis, de voir les autres versions. Proposer un choix de langue reste plus sûr.
Ces contrôles font partie de tout audit SEO d'un site international, et sont au cœur du SEO technique.