Erreurs hreflang : leur signification et comment les corriger

La plupart des erreurs hreflang se résument à un problème : les versions linguistiques d’une page ne sont pas cohérentes entre elles, si bien que les moteurs de recherche ne peuvent pas se fier à ce qu’elles indiquent. Corrigez-les en priorité, en commençant par les liens de retour manquants et les pages qui ne se référencent pas elles-mêmes. Ces problèmes viennent généralement d’un seul paramètre de modèle ou d’extension : vous les corrigez donc une fois, plutôt que page par page. Voici la signification de chaque erreur, dans l’ordre où je m’y attaquerais.

Avant de commencer : vérifiez deux pages

Hreflang est un ensemble de liens qui indique aux moteurs de recherche quelle version linguistique d’une page afficher à chaque personne. Les problèmes se situent souvent dans la relation entre deux pages : vérifiez donc une page et l’une de ses traductions, et pas seulement votre page d’accueil.

Le vérificateur hreflang gratuit lit les balises d’une page dans l’en-tête HTML et l’en-tête HTTP Link, puis ouvre jusqu’à 20 de ses versions linguistiques pour vérifier qu’elles répondent et renvoient un lien. À savoir : il ne lit pas votre sitemap XML. Si vos balises hreflang se trouvent uniquement dans le sitemap, le rapport indiquera qu’il n’en a trouvé aucune. Cela ne signifie pas que votre configuration est incorrecte. Vérifiez ces entrées à l’aide des règles ci-dessous.

Les erreurs à corriger en priorité

Elles peuvent amener les moteurs de recherche à ignorer vos balises hreflang pour une page ou une paire de pages.

Une version linguistique ne renvoie pas de lien (« lien de retour manquant »). Si votre page en anglais indique que la page en allemand est sa version allemande, la page en allemand doit également indiquer la page en anglais. Lorsque le lien ne fonctionne que dans un sens, les moteurs de recherche peuvent ignorer la paire. Cela arrive généralement lorsqu’une langue a été ajoutée plus tard ou lorsque seules les balises de votre langue principale sont présentes. Correction : chaque version doit contenir la même liste complète.

La page ne se référence pas elle-même. Chaque page répertorie toutes ses versions, y compris la sienne. Correction : ajoutez l’URL de la page elle-même à la liste. Si le rapport indique qu’elle se référence elle-même « avec une barre oblique finale différente », utilisez l’adresse exacte à laquelle la page répond. Pour un moteur de recherche, /de et /de/ sont deux URL distinctes.

Une version linguistique ne renvoie pas de code 200. Un lien vers une page qui renvoie une erreur 404 ou une erreur serveur est une impasse. Cela arrive souvent lorsqu’une page n’existe que dans certaines langues, mais qu’un modèle répertorie toutes les langues sans distinction. Correction : indiquez uniquement les langues dans lesquelles la page existe réellement, ou publiez la version manquante.

L’URL canonique pointe vers une autre page. Les moteurs de recherche ignorent les balises hreflang d’une page qui n’est pas canonique. Le cas classique : chaque traduction a une URL canonique qui pointe vers la page dans la langue principale, ce qui indique aux moteurs de recherche que les traductions ne sont pas les véritables pages. Correction : l’URL canonique de chaque version linguistique doit pointer vers elle-même.

Un code de langue est incorrect. Voici les deux erreurs les plus fréquentes :

  • en-UK n’est pas valide, car le code pays du Royaume-Uni est GB. Utilisez en-GB.
  • en_US n’est pas valide, car hreflang utilise un trait d’union. Utilisez en-US.

Les codes de langue proviennent de la norme ISO 639-1, auxquels on peut ajouter le code pays ISO 3166-1, par exemple de ou de-AT. Un code pays seul ne désigne pas une langue.

Une URL est relative ou vide. Les URL hreflang doivent être absolues, avec https:// et le nom de domaine. /de/pricing ne suffit pas.

Les balises se trouvent dans le corps de la page. Les moteurs de recherche ne lisent les liens hreflang que dans <head>. Une balise ou un script parasite qui ferme prématurément l’en-tête, ou un thème qui génère les balises trop tard, en est souvent la cause.

Une langue pointe vers deux URL différentes. Chaque langue ne peut avoir qu’une seule adresse par ensemble. Vérifiez si deux systèmes génèrent des balises en même temps, par exemple un thème et une extension.

Les avertissements à corriger lorsque vous y viendrez

Ils n’entraînent pas toujours de conséquences, mais ils sont faciles à éliminer :

  • Pas de x-default. Il désigne la page destinée aux visiteurs dont vous ne proposez pas la langue, souvent votre langue principale ou un sélecteur de langue. C’est facultatif, mais recommandé.
  • La valeur de <html lang> ne correspond pas. Une page indiquée comme étant en allemand avec <html lang="en"> envoie des signaux contradictoires. Il s’agit généralement d’une valeur par défaut du modèle que personne n’a modifiée.
  • Une version linguistique redirige. Créez un lien vers l’adresse finale, et non vers une adresse qui y redirige. Les liens en http:// et l’absence de www en sont les causes les plus fréquentes.
  • Une version linguistique répertorie un ensemble de langues différent. Une page en indique cinq et sa traduction, quatre. C’est souvent le signe qu’une langue a été ajoutée à certaines pages, mais pas aux autres.
  • La même URL est répertoriée pour plusieurs langues. Plusieurs pays peuvent partager une page (de-DE, de-AT), mais si toutes les langues pointent vers la même adresse, cela signifie généralement que les traductions ne sont pas des pages distinctes.
  • Le HTML et l’en-tête HTTP ne concordent pas. Choisissez une méthode et utilisez-la systématiquement.

À quoi ressemble un ensemble correct

Pour une page en anglais et en allemand, les deux pages comportent le même bloc dans leur <head> :

<link rel="alternate" hreflang="en" href="https://example.com/pricing" />
<link rel="alternate" hreflang="de" href="https://example.com/de/preise" />
<link rel="alternate" hreflang="x-default" href="https://example.com/pricing" />

L’URL canonique de la page en anglais est https://example.com/pricing. Celle de la page en allemand est https://example.com/de/preise. C’est tout : la même liste sur les deux pages, des adresses complètes, des codes valides et une URL canonique propre à chaque page. Le générateur de la page du vérificateur crée ce bloc et les entrées correspondantes du sitemap à partir de votre liste de langues et d’URL.

Corrigez la source, pas la page

Sur un site de toute taille, personne ne devrait modifier les balises hreflang à la main. Lorsqu’une vérification échoue, cherchez ce qui génère les balises :

  1. Un thème ou un modèle. Une seule correction s’applique à toutes les pages : c’est la bonne nouvelle.
  2. Une extension. Commencez par vérifier ses paramètres et assurez-vous qu’une autre extension ou votre thème ne génère pas également des balises.
  3. Un générateur de sitemap. Régénérez le sitemap après toute modification de vos langues.
  4. Un site créé à la main. Envisagez de générer la liste à partir d’un tableau unique de pages et de langues, afin qu’une nouvelle langue ne soit pas ajoutée à seulement la moitié du site.

Relancez ensuite la vérification sur les deux mêmes pages, ainsi que sur une page ajoutée récemment. C’est souvent sur les nouvelles pages que le problème réapparaît.

Ne vous attendez pas à voir les résultats de recherche changer le jour même. Les moteurs de recherche doivent d’abord explorer à nouveau les pages, et hreflang est un signal, pas une consigne : des balises correctes ne garantissent donc pas quelle version s’affichera pour chaque recherche. Si la mauvaise langue reste bien positionnée malgré tout, vérifiez que la bonne page propose un contenu réel et complet et que vos autres pages y renvoient. Notre guide pour ajouter une deuxième langue présente cette configuration plus générale.

Si vous préférez ne plus avoir à vous en soucier

J’ai intégré cette fonctionnalité à FolioPress, car hreflang repose sur beaucoup de règles pour quelque chose qui devrait rester invisible. Chaque page reçoit ses balises automatiquement, sur la page et dans le sitemap, avec des liens de retour, x-default, des URL canoniques autoréférentes et une adresse traduite pour chaque langue. Une page ne répertorie que les langues pour lesquelles elle dispose d’une version, afin qu’une traduction manquante ne crée pas de lien mort.

Cette solution n’est utile que si vous créez votre site avec FolioPress. Elle ne corrige pas les balises hreflang d’un site hébergé ailleurs. Si votre site actuel vous convient par ailleurs, corriger son modèle sera moins coûteux. Si c’est la deuxième ou troisième fois qu’une extension linguistique casse quelque chose cette année, les offres commencent à 12 € par mois, avec un essai gratuit de 30 jours (tarifs).