SEO

hreflang : cinq erreurs qui annulent tout le balisage

Un balisage hreflang incomplet ne dégrade pas le référencement multilingue : il l'annule. Voici les cinq erreurs qui le neutralisent, et comment nous avons diagnostiqué la première sur cinquante et une pages.

A Azetria Agence digitale 5 min de lecture
Les cinq erreurs qui neutralisent un balisage hreflang, disposées autour d'un ensemble de balises complet : absence d'auto-référence, page annoncée inexistante, réciprocité rompue, conflit avec la balise canonique, et code de langue invalide ou trop précis.
Les cinq erreurs qui neutralisent un balisage hreflang, disposées autour d'un ensemble de balises complet : absence d'auto-référence, page annoncée inexistante, réciprocité rompue, conflit avec la balise canonique, et code de langue invalide ou trop précis.
En bref
Le balisage hreflang fonctionne par ensembles : si un seul lien de l'ensemble est faux, Google écarte l'annotation entière plutôt que d'en deviner l'intention. Les cinq erreurs qui l'annulent sont l'absence d'auto-référence, l'annonce d'une page inexistante, la réciprocité rompue, la contradiction avec la balise canonique, et un code de langue invalide. Aucune ne produit d'erreur visible : le site répond 200, le balisage est présent, et les pages disparaissent quand même de l'index.

Le balisage hreflang a une propriété que peu de signaux SEO partagent : il ne se dégrade pas, il s’annule. Un title médiocre reste un title. Un ensemble hreflang dont un seul lien est faux est écarté en entier — Google préfère ignorer une annotation incohérente plutôt que d’en deviner l’intention.

Et rien ne prévient. Le site répond 200, les balises sont là, l’outil d’audit les compte et les affiche. Les pages disparaissent quand même de l’index.

Voici les cinq erreurs qui produisent ce silence, dans l’ordre où nous les rencontrons.

1. La page ne se déclare pas elle-même

Un ensemble hreflang doit contenir une entrée pour chaque version, y compris celle de la page qui porte le balisage. C’est contre-intuitif : on croit déclarer « les autres langues », alors qu’on déclare « toutes les langues ».

Une page anglaise qui annonce le français et rien d’autre ne dit pas « voici ma traduction française ». Elle dit « la version de référence est française ». Google obéit.

Nous avons rencontré cette erreur sur notre propre site en août 2026. Search Console signalait cinquante et une pages en « doublon, Google n’a pas choisi la même URL canonique que l’utilisateur ». Deux validations avaient échoué. Le balisage émis par les pages anglaises ressemblait à ceci :

<link rel="canonical"  href="https://exemple.com/en/blog/category/laravel">
<link rel="alternate" hreflang="fr"        href="https://exemple.com/fr/blog/categorie/laravel">
<link rel="alternate" hreflang="x-default" href="https://exemple.com/fr/blog/categorie/laravel">

Pas de hreflang="en". Vingt-deux pages sur vingt-deux dans ce cas. La cause était dans le code qui construisait les alternates : il excluait toute langue dont la rubrique était vide, sans exempter la langue de la page en cours. Un filtre légitime appliqué un cran trop loin.

2. Le balisage annonce une page qui n’existe pas

Google suit les liens hreflang. S’ils répondent 404, il les compte comme des erreurs d’exploration et cesse d’accorder du crédit à l’ensemble.

C’est l’erreur des sites en cours de traduction. On génère mécaniquement les trois langues parce que la route existe, sans vérifier qu’il y a quelque chose au bout. Le réflexe correct est inverse : n’annoncer une langue que si son contenu est publié. Un ensemble de deux langues exact vaut mieux qu’un ensemble de trois dont une est fictive.

3. La réciprocité est rompue

Si A déclare B, B doit déclarer A. Google traite les ensembles comme des confirmations mutuelles : une déclaration unilatérale est une affirmation invérifiable, et il l’écarte.

La rupture arrive rarement d’un oubli. Elle vient des slugs traduits — /fr/realisations/ et /en/portfolio/ — quand deux endroits du code construisent l’URL différemment. Un côté annonce l’adresse traduite, l’autre l’adresse par défaut, et la boucle ne se referme pas.

4. hreflang et canonical se contredisent

C’est la plus coûteuse, parce qu’elle combine deux signaux corrects pris séparément.

La balise canonique dit « la version de référence de cette page, c’est elle-même ». Le balisage hreflang, privé d’auto-référence, dit « la version de référence est ailleurs ». Les deux ne peuvent pas être vrais. Google tranche, et il tranche contre la page — c’est exactement le libellé du rapport que nous avons reçu : Google n’a pas choisi la même URL canonique que l’utilisateur.

Retenez la règle : hreflang ne doit jamais désigner une page dont la canonique pointe ailleurs. Un ensemble hreflang ne relie que des pages canoniques d’elles-mêmes.

5. Le code de langue est faux, ou trop précis

Trois variantes reviennent :

  • La région inventée. en-UK n’existe pas, c’est en-GB. Une valeur invalide invalide l’entrée, et l’entrée invalide l’ensemble.
  • La région sans langue. hreflang="ma" ne désigne pas le Maroc mais le marathi. Le format est langue d’abord, région ensuite : ar-MA.
  • La précision inutile. Déclarer ar-MA quand vous n’avez qu’une seule version arabe restreint sa diffusion sans rien apporter. La variante régionale ne se justifie que si vous servez réellement deux contenus distincts.

Ajoutez-y x-default, qui doit désigner la page servie à un visiteur dont aucune langue ne correspond — pas « la langue principale du site » par habitude.

Vérifier sans attendre Search Console

Search Console confirme, mais avec plusieurs semaines de retard, et son rapport mélange les causes. Le balisage se lit directement dans le HTML servi.

La méthode que nous appliquons : récupérer chaque version d’une même page, extraire les balises <link rel="alternate">, et comparer les ensembles. Ils doivent être identiques d’une version à l’autre, contenir chaque langue une seule fois, et inclure la page elle-même. Trois minutes par gabarit, et l’erreur saute aux yeux — celle qui nous a coûté cinquante et une pages était visible en une commande.

Le reste du diagnostic tient dans une question : est-ce que la page à laquelle mène ce lien répond 200, et est-ce qu’elle renvoie le lien ?

Ce que nous en avons tiré

Sur notre site, la correction n’a pas consisté à réparer le balisage. Elle a consisté à supprimer les pages qui n’auraient jamais dû exister : vingt-quatre pages de rubrique sans un seul article, servies en 200, indexables, et qui ne différaient les unes des autres que par leur titre. Une rubrique n’est désormais exposée que dans les langues où elle a du contenu. L’absence de route la retire d’un coup de la navigation, des sitemaps et des alternates.

C’est le principe qui vaut au-delà de notre cas : le balisage hreflang décrit une réalité, il ne la crée pas. Quand il devient compliqué à écrire, ce n’est presque jamais un problème de balisage. C’est que l’arborescence multilingue promet des pages qui n’existent pas.

C’est la question que nous posons systématiquement aux entreprises françaises qui nous confient un site multilingue, avant d’écrire la moindre balise : combien de langues aurez-vous réellement traduites à la mise en ligne, et lesquelles seront encore vides six mois plus tard ? La réponse décide de l’arborescence, et l’arborescence décide du balisage.

Si vous préparez une refonte multilingue, la même logique s’applique à la conservation du trafic pendant la bascule : ce qui se corrige à la conception ne se rattrape presque jamais après la mise en ligne.

Questions fréquentes

Oui, systématiquement. Un ensemble hreflang doit contenir une entrée pour chaque version, y compris celle de la page qui porte le balisage. Sans auto-référence, l'ensemble est incohérent et Google l'ignore. C'est l'erreur la plus fréquente parce qu'elle paraît redondante : on croit déclarer « les autres langues » alors qu'on déclare « toutes les langues ».

Google suit ces liens. Il les trouve morts, les compte comme des erreurs d'exploration, et cesse d'accorder du crédit à l'ensemble. Une page traduite qui n'existe pas encore ne doit pas être annoncée : mieux vaut un ensemble de deux langues exact qu'un ensemble de trois dont une est fictive.

Le code court suffit tant que vous n'avez qu'une version arabe. La variante régionale ne se justifie que si vous servez réellement deux contenus distincts, par exemple un pour le Maroc et un pour le Golfe. Déclarer une région que vous ne différenciez pas restreint la diffusion sans rien apporter.

En le lisant directement dans le HTML servi. Une requête en ligne de commande sur chaque page traduite, et l'on compare les ensembles émis : ils doivent être identiques d'une version à l'autre, contenir chaque langue une seule fois, et inclure la page elle-même. Search Console confirme, mais avec plusieurs semaines de retard.

A

Azetria

Agence digitale

Publications collectives de l'équipe Azetria : notes de veille, retours d'expérience de projet et synthèses méthodologiques.

  • Laravel
  • SaaS
  • IA appliquée
  • SEO

La prestation associée

Corriger ce qui empêche votre site d'être compris

SEO technique : indexation, structure et Core Web Vitals

À lire ensuite

Votre projet mérite mieux qu'un devis générique

Dites-nous ce que vous voulez obtenir. Nous vous répondons avec une analyse, une fourchette et les questions que personne d'autre ne vous aura posées.

Réponse sous 4 heures ouvrées · Aucun engagement · Vos données restent chez nous