J'ai longtemps cru que les balises hreflang étaient un détail technique, un truc de geek SEO à régler en fin de projet. Grossière erreur. Après avoir lancé un site bilingue anglais/français pour un client il y a trois ans, j'ai passé six mois à voir le trafic français atterrir sur la version anglaise et vice-versa. Un désastre. Le taux de rebond flirtait avec les 80 % sur les pages mal ciblées. Je peux vous dire que j'ai appris à aimer les balises hreflang, à mes dépens.
Points clés à retenir
- Les balises hreflang indiquent à Google quelle version linguistique ou régionale d'une page afficher à un visiteur, selon sa langue et sa localisation.
- L'attribut
langdans le HTML est pour les navigateurs et l'accessibilité ; le hreflang est pour les moteurs de recherche. Les deux sont complémentaires, pas interchangeables. - Trois méthodes d'implémentation : dans le
<head>, dans les en-têtes HTTP, ou dans le sitemap XML. Choisissez celle qui colle à votre stack technique. - L'auto-référencement (chaque page se déclare elle-même) est obligatoire. Google le vérifie.
- La valeur
x-defaultsert de filet de sécurité pour les langues/régions non couvertes. - L'absence de réciprocité (un lien A→B sans B→A) est l'erreur la plus fréquente et la plus destructrice.
- Les plugins SEO comme Rank Math ou Yoast peuvent gérer le hreflang en WordPress, mais vérifiez le code généré — j'ai vu des surprises.
Pourquoi vos visiteurs voient la mauvaise langue ?
Imaginez : vous êtes à Montréal, vous cherchez "meilleur café en grain". Google voit une version française (fr-ca) et une version française générique (fr). Sans hreflang, il affiche les deux, ou pire, la mauvaise. Le visiteur clique, atterrit sur une page anglaise (en-us) et repart frustré. J'ai perdu des leads comme ça. Concrètement, le hreflang est un attribut HTML qui se niche dans le <head> de chaque page. Il dit à Google : "Cette URL est pour les francophones de Belgique, celle-ci pour les hispanophones du Mexique." Sans ça, vous laissez l'algorithme deviner. Et il se trompe souvent.
La structure d'une balise hreflang
Un exemple vaut mieux qu'un long discours. Pour une page française destinée à la France :
<link rel="alternate" hreflang="fr-fr" href="https://www.exemple.fr/page" />
Le code langue (fr) est obligatoire. Le code région (fr) est optionnel mais fortement recommandé si vous ciblez plusieurs pays parlant la même langue. Vous devez aussi ajouter une balise pour chaque version, y compris celle de la page elle-même. Auto-référencement, ça s'appelle. Google le considère comme un signal de qualité. Enfin, n'oubliez pas le x-default :
<link rel="alternate" hreflang="x-default" href="https://www.exemple.com/" />
Cette balise attrape les utilisateurs dont la langue/région n'est pas explicitement couverte. Sans elle, Google peut envoyer n'importe qui sur n'importe quelle version. Un vrai jeu de roulette.
Hreflang vs lang : ne mélangez pas les rôles
J'ai vu des collègues confondre les deux. L'attribut lang sur la balise <html> sert aux navigateurs et aux lecteurs d'écran. Il déclare la langue du contenu de la page. Le hreflang, lui, parle aux moteurs de recherche. Les deux sont nécessaires. Sur mon site, j'utilise <html lang="fr"> pour la version française et des balises hreflang dans le <head> pour chaque variante régionale. L'un ne remplace pas l'autre. Et si vous ne mettez que le lang, Google ignorera vos versions alternatives. Testé, approuvé.
Comment implémenter les balises hreflang : trois méthodes
Chaque méthode a ses avantages et ses inconvénients. J'ai testé les trois sur différents projets. Voici mon retour d'expérience.
1. Dans le <head> HTML (méthode simple)
Pour chaque page, vous listez toutes les versions linguistiques. Reprenons l'exemple d'un site avec une page d'accueil en français (fr), anglais (en) et allemand (de) :
<head>
<link rel="alternate" hreflang="fr" href="https://www.exemple.fr/" />
<link rel="alternate" hreflang="en" href="https://www.exemple.com/en/" />
<link rel="alternate" hreflang="de" href="https://www.exemple.de/" />
<link rel="alternate" hreflang="x-default" href="https://www.exemple.com/" />
</head>
Avantage : simple à mettre en place si vous avez peu de pages. Inconvénient : quand vous avez 500 pages en 5 langues, le code devient vite un cauchemar à maintenir. J'ai abandonné cette méthode dès que le site a dépassé 50 pages.
2. Dans le sitemap XML (méthode scalable)
Google lit les balises hreflang directement dans votre sitemap. Vous regroupez les URL alternatives sous un même bloc <url>. Exemple :
<url>
<loc>https://www.exemple.fr/</loc>
<xhtml:link rel="alternate" hreflang="fr" href="https://www.exemple.fr/" />
<xhtml:link rel="alternate" hreflang="en" href="https://www.exemple.com/en/" />
<xhtml:link rel="alternate" hreflang="de" href="https://www.exemple.de/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.exemple.com/" />
</url>
Avantage : idéal pour les gros sites. Le sitemap centralise tout. Inconvénient : Google peut mettre quelques jours à le recrawler après une modification. J'ai perdu une semaine à cause d'un sitemap mal formaté — un espace de trop dans l'URL et tout plantait.
3. Dans les en-têtes HTTP (pour les PDF et fichiers non-HTML)
Si vous servez des PDF multilingues, des fichiers JSON ou des pages dynamiques, le hreflang peut être passé dans l'en-tête HTTP. Exemple :
Link: <https://www.exemple.fr/document.pdf>; rel="alternate"; hreflang="fr",
<https://www.exemple.com/document.pdf>; rel="alternate"; hreflang="en"
Je ne l'utilise que pour les fichiers statiques. Pour les pages web, la méthode du <head> reste plus simple à debugger.
Les erreurs qui tuent vos efforts (et comment les éviter)
J'en ai fait plusieurs. Voici les trois plus communes.
1. Absence de réciprocité
Si la page A (fr) pointe vers la page B (en), la page B doit obligatoirement pointer vers la page A. Google vérifie. J'ai oublié une fois sur une page de blog : résultat, Google a ignoré les deux. Pendant trois mois, les deux versions sont restées invisibles dans les SERP pour les requêtes ciblées. Une perte de trafic de 40 % sur ce contenu.
2. Codes ISO incorrects
Le code langue suit la norme ISO 639-1 (fr, en, de). Le code région suit ISO 3166-1 alpha-2 (fr, us, de). Ne mettez pas "fr-fr" pour la France et "fr-be" pour la Belgique si vos pages ne sont pas réellement adaptées à chaque pays. Google déteste le contenu dupliqué. Et il vous le fera payer avec une baisse de classement.
3. Pas de x-default
J'ai déjà parlé de ce filet de sécurité. Sans lui, un utilisateur au Japon, par exemple, verra la version anglaise alors que vous préféreriez une page d'accueil générique. Ajoutez-le systématiquement.
Ajouter des balises hreflang dans WordPress
Si vous êtes sous WordPress, deux plugins dominent : Rank Math et Yoast. Les deux gèrent le hreflang automatiquement si vous utilisez leurs fonctionnalités multilingues. Mais attention : j'ai testé Yoast sur un site avec 300 pages et traductions manuelles via WPML. Le code généré était correct, mais j'ai dû vérifier chaque balise une par une. Rank Math a été plus fiable sur ce coup-là — il propose un testeur de balises dans son interface. Mon conseil : quel que soit le plugin, inspectez le code source après installation. J'ai déjà vu des balises avec des tirets manquants ou des codes en minuscules alors qu'il faut du majuscule pour la région (fr-FR, pas fr-fr). Les plugins ne sont pas infaillibles.
Gérer les pages sans équivalent : le cas du contenu partiellement traduit
Vous avez un article de blog traduit en anglais et en allemand, mais pas encore en espagnol ? Ne mettez pas de balise hreflang pour la version manquante. Sur mon site, j'ai une section "Ressources" en anglais uniquement. Les autres versions linguistiques n'ont pas de page équivalente. Je n'ajoute donc pas de hreflang pour ces URL. Si je le faisais, Google verrait un lien mort et risquerait de pénaliser l'ensemble. Laissez ces pages sans balise, ou pointez vers x-default.
Comment tester et valider vos balises hreflang
Ne faites pas confiance à votre code les yeux fermés. Google Search Console propose un outil de test d'URL : collez votre URL et vérifiez les balises hreflang détectées. J'utilise aussi l'extension Chrome "Hreflang Tag Checker" de Merkle. Elle liste toutes les balises d'une page et signale les incohérences. Mon rituel : après chaque déploiement de traduction, je passe 10 pages au test. Si une erreur persiste, je corrige avant la prochaine crawl. Une fois, j'ai trouvé une boucle infinie : page A pointait vers B, B vers C, C vers A. Google a tout ignoré. Le testeur a sauvé mon week-end.
Tableau comparatif des méthodes d'implémentation
| Méthode | Volume de pages | Facilité de maintenance | Délai de prise en compte | Recommandé pour |
|---|---|---|---|---|
| <head> HTML | Faible (<50) | Moyenne (manuelle) | Quelques heures à 2 jours | Petits sites, landing pages |
| Sitemap XML | Élevé (>50) | Bonne (automatisable) | Quelques jours | Sites e-commerce, blogs importants |
| En-têtes HTTP | Faible (fichiers) | Faible (nécessite config serveur) | Quelques heures | PDF, JSON, API |
Et après ?
Les balises hreflang ne font pas tout. Sans contenu de qualité, traduit correctement (pas du Google Trad), elles ne sauveront pas votre SEO. Mais les ignorer, c'est comme envoyer vos cartons de déménagement à l'autre bout du pays sans code postal. Vous pouvez toujours espérer que le facteur devine votre rue. Moi, j'ai arrêté de croire aux miracles. Depuis que j'ai implémenté correctement le hreflang sur mon site, le taux de rebond a chuté de 65 % à 40 % sur les pages multilingues. Le trafic organique a grimpé de 25 % en trois mois. Pas mal pour un attribut HTML.