Hreflang : guide complet du SEO international

Comment prévoir les versions linguistiques et régionales, mettre en place des annotations hreflang réciproques et vérifier que chaque URL s'adresse au public visé.

Hreflang est un attribut HTML qui indique aux moteurs de recherche la langue et la région visées par chaque version d'une page. Google s'appuie sur cette donnée pour afficher la version du contenu qui correspond à la langue et à la zone géographique de l'utilisateur.

Sans hreflang, Google tente de deviner seul la bonne version, et se trompe souvent : un utilisateur russophone reçoit la page anglaise, un internaute allemand voit la version française. Résultat : le CTR baisse, le taux de rebond augmente et les conversions en pâtissent.

Hreflang relie les versions linguistiques par des liens réciproques : chaque page doit pointer explicitement vers toutes les autres.
Hreflang détermine quelle version de la page s'affiche à l'utilisateur, mais n'influence pas directement le positionnement. Google ne pénalise pas son absence, mais sans lui vous perdez en pertinence dans les résultats de recherche.

Qu'est-ce que hreflang

Comment hreflang relie entre elles les versions multilingues d'un site.

L'attribut hreflang a été introduit en 2011 : Google l'a créé pour résoudre le problème du contenu dupliqué sur les sites internationaux. Si une page /about existe sous /en/about, /de/about et /fr/about, Google ne doit pas les considérer comme des doublons : chacune s'adresse à un public distinct.

2011

Année d'introduction

Année où Google a introduit hreflang pour les sites multilingues

179+

Codes de région

Codes ISO 3166-1 alpha-2 pris en charge par Google

100%

Réciprocité

Toutes les versions d'une page doivent pointer les unes vers les autres

≤ 10 ms

Impact sur la vitesse

Un hreflang correctement mis en œuvre ne ralentit pas le site

Hreflang n'est pris en charge que par Google et Yandex. Bing utilise la balise meta Content-Language et les en-têtes HTTP, mais s'appuie sur la structure des URL et sur le ciblage géographique via Webmaster Tools. Si votre audience comprend des internautes russophones, hreflang reste nécessaire pour que Yandex fonctionne correctement.

Quand utiliser hreflang

Tous les sites multilingues n'ont pas besoin de hreflang. Il faut comprendre dans quels cas l'attribut résout réellement un problème.

SituationHreflang nécessaireRemarques
Une langue, plusieurs pays (en-US, en-GB)OuiContenus différents (prix, orthographe, promotions)
Plusieurs langues (en, de, fr)OuiCas d'usage principal de hreflang
Une langue, une seule régionNonInutile de déclarer un lien vers soi-même
Contenu identique dans toutes les versions linguistiquesNonUtiliser une canonical à la place
Traduction partielle (70 % du contenu ou plus)OuiMême les traductions partielles nécessitent un balisage
Traduction automatique non relueNonGoogle peut considérer cela comme du spam
Si le contenu de deux versions de page est strictement identique (par exemple /en-us/ et /en-gb/ sans aucune différence), mieux vaut utiliser une canonical plutôt que hreflang.

Syntaxe et formats

Hreflang s'appuie sur les codes de deux normes : ISO 639-1 pour la langue et ISO 3166-1 alpha-2 pour la région. Format : language ou language-REGION.

html
<!-- Language only -->
<link rel="alternate" hreflang="ru" href="https://example.com/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />

<!-- Language + region -->
<link rel="alternate" hreflang="en-US" href="https://example.com/en-us/" />
<link rel="alternate" hreflang="en-GB" href="https://example.com/en-gb/" />
<link rel="alternate" hreflang="fr-FR" href="https://example.com/fr/" />
<link rel="alternate" hreflang="fr-CA" href="https://example.com/fr-ca/" />

<!-- x-default: page for users without a matching locale -->
<link rel="alternate" hreflang="x-default" href="https://example.com/" />

La région dans hreflang s'écrit toujours en majuscules (en-GB, fr-CA), la langue en minuscules (en, fr). De nombreuses mises en œuvre utilisent les minuscules partout : Google comprend les deux, mais suivre le format canonique reste une bonne pratique.

CodeSignification
ruRusse (toutes régions)
enAnglais (toutes régions)
en-USAnglais des États-Unis
en-GBAnglais du Royaume-Uni
de-ATAllemand d'Autriche
zh-HansChinois simplifié
zh-HantChinois traditionnel
x-defaultPage pour les régions ou langues non définies

Méthodes de mise en œuvre

Hreflang se met en œuvre de trois façons. Le choix dépend de la technologie du site et de son échelle.

1. Balise HTML dans la section head

C'est la méthode la plus courante. Les balises <link rel="alternate" hreflang="..."> sont ajoutées dans le <head> de chaque page. Point crucial : toutes les versions de la page doivent pointer vers toutes les autres versions, y compris vers elles-mêmes.

html
<!-- Page /en/about — links to ALL versions -->
<head>
  <link rel="alternate" hreflang="en" href="https://example.com/en/about/" />
  <link rel="alternate" hreflang="ru" href="https://example.com/about/" />
  <link rel="alternate" hreflang="de" href="https://example.com/de/about/" />
  <link rel="alternate" hreflang="x-default" href="https://example.com/en/about/" />
  <link rel="canonical" href="https://example.com/en/about/" />
</head>

2. En-tête HTTP Link

Pour les PDF, les images et autres ressources non HTML, la déclaration se fait par les en-têtes HTTP. Cette méthode fonctionne aussi pour toute page, mais elle exige une configuration du serveur.

nginx
# Nginx: add hreflang via HTTP headers
add_header Link '</en/about/>; rel="alternate"; hreflang="en", </about/>; rel="alternate"; hreflang="ru", </de/about/>; rel="alternate"; hreflang="de"';

3. Sitemap XML

L'approche optimale pour les grands sites (plus de 10 000 pages). Toutes les relations hreflang sont décrites dans le sitemap : cela allège le HTML et centralise la gestion.

xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <url>
    <loc>https://example.com/en/about/</loc>
    <xhtml:link rel="alternate" hreflang="en"
                href="https://example.com/en/about/"/>
    <xhtml:link rel="alternate" hreflang="ru"
                href="https://example.com/about/"/>
    <xhtml:link rel="alternate" hreflang="de"
                href="https://example.com/de/about/"/>
    <xhtml:link rel="alternate" hreflang="x-default"
                href="https://example.com/en/about/"/>
  </url>
</urlset>
Ne mélangez pas les méthodes : si hreflang est mis en œuvre dans le HTML, ne l'ajoutez pas aussi au sitemap. Google traiterait les deux sources, ce qui peut créer des conflits.

x-default : page de sélection de la langue

La valeur x-default désigne la page destinée aux utilisateurs dont la langue ou la région ne correspond à aucune des alternatives déclarées. Google affiche cette version lorsqu'aucun hreflang ne correspond.

  • Page de sélection de la langue : l'utilisateur arrive sur /choose-language/ et choisit sa version
  • Version principale du site : le plus souvent la version anglaise, ou celle que Google doit afficher par défaut
  • Page d'accueil : si le site propose plusieurs langues, x-default pointe vers /
x-default n'est pas obligatoire, mais Google recommande fortement de l'ajouter. Sans lui, les utilisateurs sans langue correspondante reçoivent la version qui apparaît par hasard dans l'index.

Canonical + hreflang

Canonical et hreflang résolvent des problèmes différents, mais fonctionnent ensemble. La règle est simple : quand hreflang est présent sur la page, la canonical pointe toujours vers elle-même (canonical autoréférencée).

html
<!-- CORRECT: canonical points to self + hreflang covers all versions -->
<link rel="canonical" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="ru" href="https://example.com/about/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/about/" />

<!-- WRONG: canonical points to a different language version -->
<link rel="canonical" href="https://example.com/ru/about/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />

Si la canonical de la page anglaise pointe vers la version russe, Google considère la page anglaise comme un doublon et ne l'indexe pas. C'est pourquoi un hreflang sans canonical autoréférencée est, en pratique, inutile.

Erreurs courantes

Selon les audits, environ 60 % des sites utilisant hreflang présentent au moins une erreur critique. Voici les plus fréquentes.

Erreur 1 : liens réciproques manquants

C'est le problème le plus courant. La page A déclare la page B via hreflang, mais la page B ne renvoie pas vers la page A. Google ignore ce hreflang : sans réciprocité, il n'est pas valide.

Erreur 2 : codes de langue incorrects

  • hreflang="en_US" avec un tiret bas au lieu d'un trait d'union : code invalide
  • hreflang="english" : un mot à la place d'un code ISO
  • hreflang="zh" au lieu de hreflang="zh-Hans" ou hreflang="zh-Hant" : le chinois exige un code d'écriture
  • hreflang="ru-RU" au lieu de hreflang="ru" : code de région superflu pour une langue sans variantes régionales

Erreur 3 : hreflang sur des pages non indexables

Si une page est bloquée dans le robots.txt ou marquée noindex, son hreflang n'a aucune utilité. Google ne traite pas hreflang sur les pages qu'il ne peut pas indexer.

Erreur 4 : redirections automatiques selon la langue

Certains sites redirigent l'utilisateur selon la langue de son navigateur : un visiteur russophone demande /about/ et se retrouve redirigé vers /ru/about/. Google voit une redirection 301 et ne peut pas traiter hreflang correctement. Solution : servir le contenu sans redirection, et passer par un changement de version en JavaScript ou par des cookies.

Erreur 5 : liens hreflang pointant vers des 404 ou des redirections

Hreflang doit pointer vers des URL finales et canoniques. Les liens qui passent par une redirection ou mènent à une page 404 invalident l'attribut pour cette version.

Outils de vérification

OutilCe qu'il contrôleCoût
Google Search ConsoleErreurs hreflang dans le rapport Ciblage internationalGratuit
Outil hreflang d'Aleyda SolisValidité des balises pour une page, réciprocité des liensGratuit
Vérificateur hreflang de TechnicalSEOContrôle par lots, export des erreursGratuit / payant
Screaming FrogCrawl complet avec analyse hreflangPayant
Ahrefs Site AuditErreurs hreflang dans l'audit SEOPayant
Semrush Site AuditRapport hreflang dédiéPayant

FAQ

Hreflang influence-t-il le positionnement dans les résultats de recherche ?
Non : hreflang n'est pas un facteur de classement direct. Il détermine quelle version de la page s'affiche pour un utilisateur donné, mais pas sa position dans la SERP. En revanche, une mise en œuvre correcte améliore indirectement certains indicateurs : le taux de rebond baisse, la durée de visite et les conversions progressent, car les utilisateurs voient la version qui les concerne.
Chaque page du site a-t-elle besoin de hreflang ?
Seules les pages qui ont un équivalent dans d'autres langues. Les pages techniques (connexion, paiement, routes d'API), les pages en noindex et les pages sans équivalent linguistique n'en ont pas besoin.
Que se passe-t-il si hreflang pointe vers une URL avec une redirection 301 ?
Google tentera de suivre la redirection, mais le résultat est imprévisible : certains analyseurs de hreflang s'arrêtent à l'URL intermédiaire. Pointez toujours vers l'URL canonique finale, sans redirection.
Peut-on utiliser hreflang uniquement dans le sitemap, et non dans le HTML ?
Oui : c'est même l'approche privilégiée pour les grands sites. Google prend officiellement en charge les deux méthodes. Le point clé est de ne pas utiliser les deux en même temps sur les mêmes pages.
Combien de temps faut-il à Google pour prendre en compte un nouveau hreflang ?
En général de quelques jours à quelques semaines, selon la fréquence de crawl du site. Pour accélérer les choses : soumettez à la Search Console un sitemap contenant hreflang et demandez la réindexation des pages clés.

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it