Un client m'appelle en panique. Sa version allemande génère trois fois moins de trafic que la française, alors qu'elle a été traduite « à l'identique ». Je demande l'URL. Je colle dans ma barre. Je regarde le code source. Et là, je trouve un hreflang="de-DE" sur la page française, un hreflang="fr" sur l'allemande, et aucune réciprocité nulle part. Le site n'a pas un problème de traduction. Il a un problème de signalétique.
Gérer un site multilingue sans erreurs SEO avec les balises hreflang, c'est d'abord comprendre une chose : hreflang n'est pas une option de confort. C'est le seul mécanisme qui dit à Google « cette page est la version allemande pour l'Autriche, pas une duperie ». Mal réglé, il produit l'inverse de l'effet escompté. Bien réglé, il oriente les visiteurs vers la bonne langue et évite que vos versions se cannibalisent.
Points clés à retenir
- hreflang ne fait pas gagner de positions : il sert à afficher la bonne version au bon utilisateur.
- La réciprocité est obligatoire : chaque page doit citer toutes ses traductions, y compris elle-même.
- Le vrai risque de contenu dupliqué vient des variantes d'une même langue (fr-FR / fr-BE / fr-CA), pas des traductions.
- Trois syntaxes existent : balise
<link>, en-tête HTTP, sitemap XML. Elles ne se valent pas selon le contexte. - Un canonical mal placé vers l'anglais annule l'effet d'un hreflang pourtant correct.
Ce que fait vraiment la balise hreflang (et ce qu'elle ne fait pas)
Première chose à tordre : hreflang n'est pas un signal de classement. Je l'ai cru au début, comme beaucoup. Non. Elle ne booste rien. Elle indique à Google une relation entre plusieurs URL équivalentes dans des langues ou des régions différentes.
Un échange d'URL, pas une promotion
Concrètement, la balise dit : « si quelqu'un en Autriche cherche cette page, montre-lui example.com/de-at/ ; si quelqu'un en France cherche, montre-lui example.com/fr-fr/ ». C'est un aiguillage. Un aiguillage ne fait pas rouler le train plus vite.
L'erreur que je vois le plus souvent : des équipes qui empilent des hreflang en espérant compenser un mauvais maillage interne ou un contenu faible. Résultat, elles ajoutent du bruit technique sur une base déjà fragile. Franchement, si la page elle-même ne mérite pas d'être indexée, hreflang ne sauvera rien.
Les codes ISO, source d'erreurs silencieuses
Le format attendu combine la langue en ISO 639-1 (deux lettres) et, en option, la région en ISO 3166-1 alpha-2 (deux lettres majuscules). Donc fr, fr-FR, fr-CA, de-AT. Pas fr_FR avec un tiret bas. Pas FR-fr. Pas french.
Les cas un peu piégeux, ce sont les langues à écriture multiple : zh-Hans pour le chinois simplifié, zh-Hant pour le traditionnel. Si vous mettez juste zh, vous ne dites rien de précis et Google peut faire un choix qui ne vous convient pas.
Liste rapide des formats à connaître
fr— français, toutes régions confonduesfr-FR— français de France spécifiquementen-GB— anglais britanniquept-BRvspt-PT— brésilien vs portugaisx-default— page de repli si aucune correspondance
La réciprocité, ou pourquoi votre hreflang ne marche pas
Voilà le point que je vois bafoué dans à peu près un site multilingue sur deux que j'audite. Une page A déclare « ma version allemande est B ». Mais B ne déclare pas « ma version française est A ». Google appelle ça no return tags, et il ignore alors la déclaration. Toute la chaîne tombe.
La règle de l'auto-référence
Chaque page doit citer toutes ses sœurs, y compris elle-même. Si vous avez cinq langues, chaque page porte cinq balises <link rel="alternate">, dont une vers sa propre URL. Cette auto-référence paraît redondante, elle est en réalité obligatoire.
J'ai fait cette erreur sur mon propre site il y a un moment. J'avais omis l'auto-référence sur une seule version, la version suisse. Cette version a mis plusieurs semaines à retrouver un comportement normal après correction. Une balise oubliée, un pays qui disparaît. C'est disproportionné, mais c'est ainsi.
À quoi sert x-default
x-default désigne la page à servir quand aucune correspondance de langue ou de région ne joue. Typiquement, une version internationale en anglais, ou une page sélecteur de langue. Placez-la sur une page réellement utile : une redirection automatique vers cette page, par exemple, évite de larguer un visiteur japonais sur le site français sans échappatoire.
Les trois syntaxes, et laquelle choisir
Trois manières d'implémenter hreflang existent, et elles ne sont pas interchangeables. J'ai longtemps cru qu'elles servaient juste à varier les plaisirs. Non, chacune a son terrain.
| Syntaxe | Quand l'utiliser | Limite |
|---|---|---|
Balise <link> dans le <head> | Pages HTML classiques, contrôle direct du code | Chaque page doit répéter toutes les balises ; maintenance lourde sur gros sites |
En-tête HTTP Link | Fichiers non HTML : PDF, vidéo, images | Impossible à poser sur une page HTML sans outil serveur |
| Sitemap XML | Très gros volumes, sites dynamiques | Problème de désynchronisation avec le contenu réel si l'on oublie de régénérer |
Ma préférence, et je l'assume : sur un site de moins de 500 pages, balise <link> dans le <head>, générée automatiquement par le CMS. Au-delà, sitemap XML pour l'échelle. Le piège du sitemap : si le contenu change mais pas le sitemap, votre signal devient obsolète. J'ai vu un client avec 8 000 pages dont le sitemap n'avait pas été régénéré depuis un an. Un an de signal hreflang faux.
Le vrai risque de contenu dupliqué
Contrairement à une idée répandue, une traduction authentique n'est pas du contenu dupliqué. Google fait le distinguo. Le vrai danger, ce sont les variantes d'une même langue — fr-FR, fr-BE, fr-CA — avec un texte quasi identique. Là, Google peut choisir de ne présenter qu'une seule version et ignorer les autres.
Deux garde-fous : d'abord, adapter réellement le contenu par marché (prix en devise locale, références culturelles, exemples). Ensuite, coupler hreflang avec un canonical auto-référent. Chaque page se canonise elle-même. Jamais de canonical groupé vers la version principale.
Le piège du canonical vers l'anglais
C'est l'erreur que j'ai vu le plus de fois dans ma vie d'auditeur. Une équipe se dit : « pour éviter le duplicate, tout pointe en canonical vers la version anglaise ». Sauf que cette version anglaise n'est pas la même page traduite, c'est une autre page. Résultat : toutes vos versions localisées sont désindexées en faveur de l'anglais. Le hreflang est correct, mais il pointe vers des pages que Google a déjà écartées. Franchement, c'est le bug le plus coûteux que j'ai eu à corriger.
Comment auditer vos hreflang sans tout casser
Un audit propre commence par un crawl complet avec un outil dédié, où vous activez la vérification hreflang. Vous obtenez trois colonnes : URL, langue déclarée, réciprocité. Tri par réciprocité absente, et vous avez votre priorité.
- Réciprocité absente : la page cible ne cite pas la page source.
- Code de langue invalide : format non conforme (tiret bas, casse, mauvais code).
- URL non indexée : le hreflang pointe vers une page bloquée en robots.txt ou en noindex.
- Auto-référence manquante : la page ne se cite pas elle-même.
- Canonical incohérent : la page canonise ailleurs que vers elle-même.
Sur un site de 500 pages et 4 langues, je compte 2 000 URL à vérifier, et l'audit me prend une demi-journée quand tout est propre. Sur un site mal construit, trois jours. La différence, ce sont les erreurs en cascade.
Un dernier point, moins technique : testez manuellement. Changez la langue de votre navigateur, ou utilisez une simulation de géolocalisation. Voyez si le résultat affiché est bien celui attendu. Parfois, les crawlers disent tout va bien et l'utilisateur reçoit la mauvaise version.
Reste une question que je n'ai pas résolue : faut-il traduire tout le site, ou seulement les pages à fort potentiel ? J'ai longtemps pensé que tout devait être traduit, par principe. Aujourd'hui, sur les projets où j'interviens, je recommande souvent de commencer par un sous-ensemble — la page d'accueil, les pages produits clés, deux ou trois articles — et de mesurer avant d'étendre. Un site multilingue à moitié traduit qui fonctionne vaut mieux qu'une usine à gaz parfaitement traduite qui ne convertit rien.