# General Translation Knowledge Base: Qu’est-ce que hreflang et comment le configurer ?
URL: https://generaltranslation.com/fr/kb/what-is-hreflang.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Hreflang indique à Google quelles URL correspondent aux versions linguistiques ou régionales d’une même page, afin qu’il affiche la bonne dans les résultats de recherche. Ajoutez-le à l’aide de balises link HTML, d’en-têtes HTTP Link ou d’un plan de site, veillez à ce que chaque lien soit réciproque et utilisez des codes valides comme en-GB, et non en-UK.
Category: Référencement multilingue
Last updated: 2026-10-20
Authors: Kevin Wu, Jackie Chen
Published: 2026-10-20

Hreflang ne fonctionne que si chaque langue dispose déjà de sa propre URL, puisqu’il associe une URL à une autre. Si vous n’avez pas encore choisi cette structure, commencez par [les sous-répertoires, les sous-domaines ou les domaines nationaux](/kb/multilingual-url-structure), puis revenez ici pour l’annoter.

## Ce que hreflang fait et ne fait pas

Hreflang regroupe les URL d&#39;une même page en un groupe et attribue à chacune une langue, et éventuellement une région. Lorsque la recherche d&#39;un germanophone correspond à votre page de tarifs en anglais, Google peut afficher à la place l&#39;URL allemande du même groupe. Selon le [guide des versions localisées](https://developers.google.com/search/docs/specialty/international/localized-versions) de Google, le moteur peut identifier les versions alternatives sans annotations, mais il est recommandé de les déclarer explicitement.

On a vite tendance à en attendre plus qu&#39;il n&#39;en offre :

* **Ce n&#39;est pas une redirection.** Hreflang aide Google à choisir l&#39;URL qui apparaît dans les résultats de recherche ; il ne garantit pas un résultat précis. Le visiteur qui clique arrive sur cette URL, et la suite dépend de votre serveur (voir [comment un site doit choisir la langue qu&#39;il sert](/kb/locale-routing-seo)).
* **Il ne détecte pas la langue.** Google affirme n&#39;utiliser ni hreflang ni l&#39;attribut HTML `lang` pour détecter la langue d&#39;une page ; il la déduit du contenu à l&#39;aide de ses propres algorithmes.
* **Il ne corrige pas les pages non traduites.** Google ne considère les versions localisées comme des doublons que lorsque le contenu principal n&#39;est pas traduit. Si vous ne traduisez que la navigation et le pied de page, hreflang pourra étiqueter la page, mais pas la rendre distincte.

## Comment ajouter hreflang ?

Google considère le HTML, les en-têtes HTTP et les plans de site comme équivalents, et précise qu&#39;en combiner plusieurs n&#39;apporte aucun avantage dans la recherche Google. Choisissez la méthode la mieux adaptée à l&#39;architecture de votre site.

### Éléments link HTML

Placez une balise `<link rel="alternate">` par version, y compris pour la page actuelle, dans le `<head>`. Cet ensemble de balises est identique sur toutes les versions. Les URL doivent être absolues (`https://example.com/de/preise`, et non `/de/preise`).

```html
<!-- Identique dans le <head> de /en/pricing, /de/preise et /fr/tarifs -->
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing" />
<link rel="alternate" hreflang="de" href="https://example.com/de/preise" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing" />
```

Ne combinez pas hreflang avec d&#39;autres attributs comme `media` dans un même `<link>`, et vérifiez le HTML généré : un lien qui se retrouve en dehors d&#39;un `<head>` bien formé n&#39;est pas pris en compte.

### En-têtes HTTP `Link`

Pour les fichiers dépourvus de `<head>`, comme les PDF, renvoyez le même groupe de balises dans un en-tête de réponse `Link`. Chaque URL est placée entre chevrons et les entrées sont séparées par des virgules.

```http
Link: <https://example.com/en/guide.pdf>; rel="alternate"; hreflang="en",
      <https://example.com/de/leitfaden.pdf>; rel="alternate"; hreflang="de",
      <https://example.com/fr/guide.pdf>; rel="alternate"; hreflang="fr"
```

### Plan de site XML

Un plan de site permet de garder les annotations en dehors de vos pages. Déclarez l’espace de noms `xhtml`, attribuez à chaque URL sa propre entrée `<url>`, puis listez sous chacune d’elles toutes les versions, y compris elle-même. D’après Google, ces entrées enfants ne sont pas comptabilisées dans la limite d’URL du plan de site.

```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/pricing</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/pricing"/>
    <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/preise"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing"/>
  </url>
  <url>
    <loc>https://example.com/de/preise</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/pricing"/>
    <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/preise"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing"/>
  </url>
  <url>
    <loc>https://example.com/fr/tarifs</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/pricing"/>
    <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/preise"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing"/>
  </url>
</urlset>
```

Placez le plan de site à la racine du site lorsque ses entrées de pages couvrent plusieurs dossiers par locale. Les [recommandations de Google sur les plans de site](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap) décrivent la portée par répertoire ainsi que les options de soumission intersites ; les URL alternatives hreflang peuvent pointer vers d&#39;autres domaines.

## Les règles communes à toutes les méthodes

* **Dans la mesure du possible, utilisez le même ensemble complet, y compris la page elle-même.** Trois versions linguistiques impliquent trois entrées sur chaque page. S’il est difficile de maintenir un ensemble complet, Google peut traiter des groupes réciproques plus restreints ; privilégiez alors les liens de retour entre les nouvelles versions et la version d’origine ou principale.
* **Les liens doivent être réciproques.** Si la page X référence la page Y mais que Y ne référence pas X en retour, Google ignore la paire. Cela empêche un autre site de se faire passer pour votre version allemande.
* **Ajoutez éventuellement `x-default`.** Cette valeur désigne un contenu de secours pour les langues sans correspondance, comme un sélecteur de langue ou une version dans la langue par défaut. Elle n’est pas indispensable au fonctionnement de hreflang. Veillez à ce que ce contenu de secours reste pertinent pour la page, plutôt que de renvoyer toutes les pages profondes vers la page d’accueil.
* **Les codes se composent d’une langue, suivie éventuellement d’une région.** La langue suit la norme ISO 639-1 (`de`), la région la norme ISO 3166-1 alpha-2 (`de-CH`), et la casse n’a pas d’importance. Une région seule n’est pas valide, et un code pays placé à la position de la langue a une tout autre signification : `be` désigne le biélorusse, et non la Belgique.
* **Les systèmes d’écriture sont autorisés.** Google accepte les sous-balises de système d’écriture ISO 15924 telles que `zh-Hans` et `zh-Hant`, éventuellement accompagnées d’une région (`zh-Hans-US`). Avec `zh-TW`, il déduit le chinois traditionnel à partir de la région.
* **Prévoyez une version sans région pour les variantes régionales.** Si vous avez des pages `en-IE`, `en-CA` et `en-AU`, ajoutez une page `en` (qui peut être l’une des trois) pour les anglophones du reste du monde.

Certains codes de paramètres régionaux pourtant valides ne fonctionnent pas ici. `es-419` (espagnol d’Amérique latine) est une balise BCP 47 correcte, mais le hreflang de Google ne prend en charge que les régions ISO 3166-1 : annotez donc cette page avec `es` ou avec des pays précis tels que `es-MX` et `es-AR`.

## Les pages hreflang doivent-elles utiliser des URL canoniques autoréférentes ?

Pour des pages traduites distinctes, l&#39;URL canonique à privilégier pointe généralement vers la page elle-même. Les [recommandations de Google sur les URL en double](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls) préconisent, lorsque vous utilisez hreflang, une URL canonique dans la même langue, ou à défaut la meilleure alternative disponible. Évitez de faire pointer toutes les pages traduites vers la version anglaise.

Les pages régionales d&#39;une même langue appellent une décision à part. Si `en-US` et `en-GB` sont des doublons, vous pouvez choisir une URL canonique anglaise de référence et utiliser hreflang pour indiquer le ciblage régional. Veillez à la cohérence entre les signaux canonical et hreflang, et vérifiez dans la Search Console l&#39;URL canonique retenue par Google. Une URL canonique déclarée est un signal fort, pas une garantie.

```html
<!-- Dans le <head> de https://example.com/de/preise -->
<link rel="canonical" href="https://example.com/de/preise" />
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing" />
<link rel="alternate" hreflang="de" href="https://example.com/de/preise" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs" />
```

Deux précisions connexes figurent sur la même page : Google ignore les liens `rel="canonical"` qui comportent un attribut `hreflang`, il faut donc bien distinguer ces deux types de liens ; par ailleurs, pour la canonicalisation, Google privilégie les URL qui font partie d&#39;un groupe hreflang. Utilisez l&#39;URL canonique de chaque version du groupe, et jamais une variante comportant des paramètres de suivi.

## Quelles sont les erreurs hreflang courantes ?

* **Liens de retour manquants.** C&#39;est la première erreur citée par Google dans sa liste des erreurs courantes. Le plus souvent, le modèle d&#39;un paramètre régional omet le bloc, ou une nouvelle langue a été ajoutée à certaines pages mais pas à d&#39;autres.
* **Codes non valides.** Google ignore les codes de région réservés tels que `UK` et `EU` : la région dans `en-UK` n&#39;a donc aucun effet ; utilisez `en-GB`. Les régions non prises en charge, comme `419` dans `es-419`, ne sont pas reconnues non plus.
* **URL relatives ou à protocole mixte.** Les variantes localisées doivent être des URL absolues, et Google déconseille d&#39;indiquer des URL `http://` dans hreflang lorsque le site est en HTTPS.
* **Variantes localisées qui ne mènent pas directement à la page indexable visée.** Utilisez l&#39;URL canonique finale, et non une redirection ou une page d&#39;erreur. Une page `noindex` est exclue de la recherche Google : elle ne peut donc pas être le résultat que vous souhaitez voir affiché. Vérifiez le contenu de destination et ses liens de retour, et pas seulement son code d&#39;état.
* **Pages dont seul le modèle est traduit.** Hreflang ne permet pas de les distinguer, et selon Google, ce contenu répété dégrade l&#39;expérience de recherche.

## Comment vérifier que hreflang fonctionne ?

Le rapport Ciblage international de la Search Console n&#39;existe plus : Google [l&#39;a abandonné](https://support.google.com/webmasters/answer/12474899), de même que son paramètre de ciblage par pays, tout en précisant qu&#39;il continue de prendre en charge et d&#39;utiliser hreflang. Effectuez plutôt les vérifications suivantes :

* **Contrôlez ponctuellement une page.** Récupérez le HTML et vérifiez que la page se référence elle-même ainsi que chacune de ses pages sœurs :

  ```bash
  curl -s https://example.com/de/preise | grep -o '<link[^>]*hreflang[^>]*>'
  ```

* **Testez une page en ligne.** Le guide de Google renvoie vers deux outils tiers qu&#39;il ne maintient pas : le [testeur de balises hreflang de Merkle](https://technicalseo.com/seo-tools/hreflang/) pour tester une URL et le [générateur hreflang d&#39;Aleyda Solis](https://www.aleydasolis.com/english/international-seo-tools/hreflang-tags-generator/) pour rédiger les balises.

* **Explorez l&#39;ensemble du site.** Un robot d&#39;exploration vérifie la réciprocité sur toutes les pages. L&#39;[audit hreflang de Screaming Frog](https://www.screamingfrog.co.uk/seo-spider/tutorials/how-to-audit-hreflang/) signale les liens de retour manquants, les variantes localisées qui ne renvoient pas un code 200 ou qui sont marquées `noindex`, les codes invalides et les variantes localisées qui ne correspondent pas à l&#39;URL canonique.

* **Validez le plan de site.** Exécutez `xmllint --noout sitemap.xml` pour repérer le XML mal formé avant que Google ne le fasse.

## Configurer hreflang avec General Translation

Grâce à [`createNextMiddleware`](/docs/react/nextjs/reference/functions/create-next-middleware), `gt-next` de General Translation attribue à chaque langue sa propre URL, ce qui est la condition préalable à hreflang. Avec les slugs localisés définis via son option `pathConfig`, comme `/fr/a-propos`, chaque chemin localisé constitue le `href` que vous indiquez dans le groupe.

Les annotations, elles, restent dans votre application. Next.js génère les balises `<link rel="alternate" hreflang>` à partir de `metadata.alternates.languages`, et l&#39;article [Comment configurer le SEO d&#39;une application Next.js multilingue ?](/kb/multilingual-nextjs-seo) propose un utilitaire qui renvoie l&#39;URL canonique et toutes les variantes localisées en un seul appel. Partez des paramètres régionaux configurés, puis ne listez que les versions de chaque page que vous avez réellement publiées.

Si vous routez un paramètre régional sous un alias, comme `/cn` pour le chinois, le [guide SEO des alias de paramètres régionaux](/docs/react/nextjs/locale-alias-seo) utilise [`resolveCanonicalLocale`](/docs/react/nextjs/reference/functions/resolve-canonical-locale) pour que hreflang indique le code BCP 47 `zh` tandis que l&#39;URL conserve `/cn`.

## Points clés

* Hreflang associe des URL à des langues et à des régions dans les résultats de recherche. Il ne redirige pas les visiteurs et n’indique pas à Google la langue d’une page.
* Utilisez une seule méthode (`<link>` HTML, en-tête HTTP `Link` pour les PDF, ou `xhtml:link` dans le plan de site) ; Google les considère comme équivalentes.
* Visez un ensemble complet d’URL équivalentes, avec des auto-références et des liens réciproques. Des groupes réciproques plus restreints peuvent tout de même être pris en compte ; `x-default` est facultatif.
* Les codes suivent la norme ISO 639-1, éventuellement complétée d’une région ISO 3166-1 alpha-2 ou d’un système d’écriture ISO 15924 : `en-GB`, et non `en-UK` ; `es-MX`, et non `es-419`.
* Utilisez des URL canoniques cohérentes, généralement auto-référencées pour les traductions distinctes. Traitez à part les pages régionales en double dans une même langue, et vérifiez les liens de retour à l’aide d’un robot d’exploration.

## Related questions

- [Comment configurer le SEO d’une application Next.js multilingue ?](https://generaltranslation.com/fr/kb/multilingual-nextjs-seo.mdx): Attribuez à chaque langue sa propre URL préfixée, comme /en/about et /es/about, puis publiez html lang, une URL canonique autoréférente, des variantes localisées hreflang avec x-default, un titre et une description traduits, ainsi qu’une entrée de plan de site pour chaque langue publiée. Marquez les versions non publiées en noindex. Le package gt-next de General Translation associe chaque langue à sa propre URL et traduit les titres avec getGT.
- [Sous-répertoire, sous-domaine ou ccTLD pour le SEO multilingue](https://generaltranslation.com/fr/kb/multilingual-url-structure.mdx): Utilisez des sous-répertoires comme example.com/de/ lorsqu’un même produit partage un site et un processus de livraison. Seul un ccTLD signale un pays, les sous-domaines permettent un hébergement distinct, Google déconseille les paramètres ?lang= et considère les domaines « de complaisance » comme .io et .ai comme génériques.
- [Redirections linguistiques et SEO : URL, cookie ou Accept-Language ?](https://generaltranslation.com/fr/kb/locale-routing-seo.mdx): Laissez l’URL déterminer la langue de chaque page que vous souhaitez faire indexer, car Googlebot n’envoie aucun en-tête Accept-Language et explore principalement depuis des adresses américaines. Ne vous servez du choix enregistré dans un cookie, puis d’Accept-Language, que pour décider vers où redirige une racine neutre comme /, avec une redirection temporaire 302 ou 307.
- [Bonnes pratiques pour le sélecteur de langue : UX, SEO et accessibilité](https://generaltranslation.com/fr/kb/language-switcher.mdx): Affichez chaque langue sous son propre nom, comme Deutsch ou 日本語, et bannissez les drapeaux, qui représentent des pays. Faites pointer chaque option vers la même page dans cette langue grâce à un lien explorable par les robots, mémorisez le choix dans un cookie et ne redirigez jamais automatiquement une URL localisée.
- [Liste de contrôle des tests de localisation pour les applications multilingues](https://generaltranslation.com/fr/kb/multilingual-app-launch-checklist.mdx): Testez neuf points dans chaque paramètre régional pris en charge sur une compilation de Production : les parcours complets, y compris les états d’erreur et les e-mails, le changement de langue, les formes plurielles, la devise et les fuseaux horaires, le foisonnement du texte, la mise en page right-to-left, l’accessibilité, la distribution des traductions et des URL de langue explorables. Associez à chaque vérification un critère de réussite explicite.

## Previous and next questions

- Previous question: [Qu’est-ce qu’un système de gestion de la traduction (TMS) ?](https://generaltranslation.com/fr/kb/what-is-a-translation-management-system.mdx)
- Next question: [Qu’est-ce que la pseudo-localisation ?](https://generaltranslation.com/fr/kb/pseudo-localization.mdx)

## Sitemap

See the [Knowledge Base sitemap](https://generaltranslation.com/fr/kb/sitemap.md) for every article.
