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.
Qu'est-ce que hreflang
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.
Année d'introduction
Année où Google a introduit hreflang pour les sites multilingues
Codes de région
Codes ISO 3166-1 alpha-2 pris en charge par Google
Réciprocité
Toutes les versions d'une page doivent pointer les unes vers les autres
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.
| Situation | Hreflang nécessaire | Remarques |
|---|---|---|
| Une langue, plusieurs pays (en-US, en-GB) | Oui | Contenus différents (prix, orthographe, promotions) |
| Plusieurs langues (en, de, fr) | Oui | Cas d'usage principal de hreflang |
| Une langue, une seule région | Non | Inutile de déclarer un lien vers soi-même |
| Contenu identique dans toutes les versions linguistiques | Non | Utiliser une canonical à la place |
| Traduction partielle (70 % du contenu ou plus) | Oui | Même les traductions partielles nécessitent un balisage |
| Traduction automatique non relue | Non | Google peut considérer cela comme du spam |
/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.
<!-- 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.
| Code | Signification |
|---|---|
| ru | Russe (toutes régions) |
| en | Anglais (toutes régions) |
| en-US | Anglais des États-Unis |
| en-GB | Anglais du Royaume-Uni |
| de-AT | Allemand d'Autriche |
| zh-Hans | Chinois simplifié |
| zh-Hant | Chinois traditionnel |
| x-default | Page 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.
<!-- 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: 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 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>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
/
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).
<!-- 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 invalidehreflang="english": un mot à la place d'un code ISOhreflang="zh"au lieu dehreflang="zh-Hans"ouhreflang="zh-Hant": le chinois exige un code d'écriturehreflang="ru-RU"au lieu dehreflang="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
| Outil | Ce qu'il contrôle | Coût |
|---|---|---|
| Google Search Console | Erreurs hreflang dans le rapport Ciblage international | Gratuit |
| Outil hreflang d'Aleyda Solis | Validité des balises pour une page, réciprocité des liens | Gratuit |
| Vérificateur hreflang de TechnicalSEO | Contrôle par lots, export des erreurs | Gratuit / payant |
| Screaming Frog | Crawl complet avec analyse hreflang | Payant |
| Ahrefs Site Audit | Erreurs hreflang dans l'audit SEO | Payant |
| Semrush Site Audit | Rapport hreflang dédié | Payant |
FAQ
Hreflang influence-t-il le positionnement dans les résultats de recherche ?
Chaque page du site a-t-elle besoin de hreflang ?
Que se passe-t-il si hreflang pointe vers une URL avec une redirection 301 ?
Peut-on utiliser hreflang uniquement dans le sitemap, et non dans le HTML ?
Combien de temps faut-il à Google pour prendre en compte un nouveau hreflang ?
Check it with SpiderHead
Free and local: run the audit on your own machine.



