Si votre site WordPress propose du contenu en plusieurs langues ou cible différentes régions, l'implémentation des balises hreflang est essentielle pour l'optimisation pour les moteurs de recherche. Sans elles, Google et les autres moteurs de recherche peuvent afficher la mauvaise version linguistique dans leurs résultats ou traiter vos pages traduites comme du contenu dupliqué, ce qui dilue votre classement sur toutes les versions linguistiques. Les balises hreflang indiquent aux moteurs de recherche exactement quelle langue et variante régionale chaque page représente, afin que les utilisateurs atterrissent toujours sur la version la plus pertinente pour eux.
Ce que sont les balises hreflang et comment les moteurs de recherche les utilisent
Hreflang est un attribut HTML qui spécifie la langue (et éventuellement la cible géographique) d'une page. Il apparaît comme un élément <link> dans la section <head> de votre page, ou comme une entrée dans votre sitemap XML. Voici à quoi ressemble un ensemble typique de balises hreflang pour une page disponible en anglais et en allemand :
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/ueber-uns/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/about/" />Lorsque Googlebot explore une page et trouve ces balises, il comprend que les deux URL représentent le même contenu dans différentes langues. Il sert ensuite la version appropriée en fonction des préférences linguistiques et de la localisation du chercheur. La balise x-default agit comme un repli général pour les utilisateurs dont la langue ou la région ne correspond à aucune des valeurs hreflang spécifiées.
Hreflang utilise les codes de langue ISO 639-1 (par exemple, en, de, fr) et éventuellement les codes pays ISO 3166-1 Alpha 2 (par exemple, en-US, de-AT, pt-BR). Le code de langue seul cible tous les utilisateurs de cette langue indépendamment de la localisation, tandis que l'ajout d'un code pays restreint le ciblage à une région spécifique.
Quand vous avez besoin d'un ciblage régional ou uniquement linguistique
Le choix entre les codes uniquement linguistiques (comme de) et les codes spécifiques à une région (comme de-DE, de-AT, de-CH) dépend de votre stratégie de contenu :
- Uniquement linguistique (
de) : Utilisez ceci lorsque votre contenu allemand convient à tous les utilisateurs germanophones indépendamment de leur pays. C'est le bon choix pour la plupart des blogs, sites informatifs et produits SaaS. - Spécifique à une région (
de-DE,de-AT) : Utilisez ceci lorsque vous avez du contenu distinct adapté à des pays spécifiques. Par exemple, une boutique e-commerce avec une disponibilité de produits, des prix ou des informations légales différentes pour l'Allemagne, l'Autriche et la Suisse a besoin de balises spécifiques à la région.
Une erreur courante est d'utiliser des codes spécifiques à une région alors que des codes uniquement linguistiques suffiraient. Si votre contenu allemand est identique pour tous les germanophones, utiliser de est plus simple et évite la nécessité de créer des pages distinctes pour chaque région.
Configurer hreflang avec WPML
WPML (WordPress Multilingual Plugin) est l'extension multilingue premium la plus utilisée, et elle gère automatiquement les balises hreflang :
- Achetez et installez WPML Multilingual CMS depuis wpml.org.
- Lancez l'assistant de configuration. Choisissez votre langue par défaut et ajoutez toutes les langues que votre site prend en charge.
- Sélectionnez votre structure d'URL. WPML prend en charge les sous-répertoires (
/en/,/de/), les sous-domaines (en.example.com) ou des domaines distincts. Les sous-répertoires sont les plus courants et les plus faciles à gérer. - Commencez à traduire votre contenu. Pour chaque article ou page, cliquez sur l'icône « + » à côté de la langue cible dans la boîte de langue WPML pour créer une traduction.
- WPML génère automatiquement des balises hreflang pour chaque page ayant des traductions. Il ajoute également la balise
x-defaultpointant vers votre version dans la langue par défaut.
Pour vérifier la sortie, consultez la source de n'importe quelle page traduite et recherchez hreflang. Vous devriez voir une balise <link> pour chaque langue, y compris la langue de la page actuelle (un hreflang auto-référençant, qui est obligatoire).
WPML s'intègre également avec Yoast SEO et Rank Math. Lorsque les deux extensions sont actives, l'extension SEO prend en charge la génération hreflang et ajoute sa propre couche de validation, qui peut détecter les mauvaises configurations courantes.
Configurer hreflang avec Polylang
Polylang est une alternative gratuite populaire à WPML. Elle génère automatiquement des balises hreflang pour toutes les traductions liées :
- Installez et activez Polylang depuis le répertoire des extensions WordPress.
- Allez dans Langues > Langues et ajoutez chaque langue que votre site prend en charge. Définissez la locale, le code de langue et le format d'URL (le sous-répertoire est recommandé).
- Attribuez une langue à chaque article et page existants. Polylang ajoute une colonne de langue à votre liste d'articles, ce qui facilite la visualisation des articles traduits.
- Liez les traductions ensemble. Lors de l'édition d'un article, utilisez la boîte « Traductions » dans la barre latérale pour le connecter à son équivalent dans d'autres langues.
- Polylang émet automatiquement des balises hreflang dans le
<head>pour toutes les traductions liées.
Une différence importante avec WPML : Polylang n'ajoute pas automatiquement la balise x-default dans toutes les configurations. Pour vous assurer qu'elle est présente, allez dans Langues > Paramètres > Hreflang et vérifiez que x-default est défini sur votre langue principale. Si vous utilisez Polylang Pro (la version premium), cela est géré automatiquement.
Configurer hreflang avec TranslatePress
TranslatePress adopte une approche différente en vous permettant de traduire le contenu directement sur le frontend :
- Installez et activez TranslatePress.
- Allez dans Réglages > TranslatePress et ajoutez vos langues.
- Cliquez sur « Traduire le site » dans la barre d'outils d'administration pour ouvrir l'éditeur de traduction visuel.
- Naviguez vers n'importe quelle page et cliquez sur les éléments de texte pour les traduire en ligne.
- TranslatePress gère automatiquement la génération des balises hreflang pour toutes les pages traduites.
TranslatePress stocke les traductions dans la base de données plutôt que de créer des articles distincts, ce qui signifie que la gestion de votre contenu est plus simple mais que les options de structure d'URL sont plus limitées.
Combiner Yoast SEO ou Rank Math avec des extensions multilingues
Yoast SEO et Rank Math détectent les extensions multilingues populaires et prennent en charge la génération des balises hreflang lorsque les deux sont actives. Cette intégration ajoute une validation supplémentaire :
- Correspondance d'URL canonique : L'extension SEO vérifie que le href hreflang correspond à l'URL canonique de chaque page, prévenant une mauvaise configuration courante.
- Gestion noindex : Les pages marquées comme noindex sont automatiquement exclues de la sortie hreflang, puisque les moteurs de recherche ne devraient pas les indexer de toute façon.
- Intégration au sitemap : Les annotations hreflang sont incluses dans le sitemap XML généré par l'extension SEO, fournissant aux moteurs de recherche une seconde source de données hreflang.
Si vous utilisez Yoast SEO avec WPML ou Polylang, vérifiez SEO > Général > Fonctionnalités et assurez-vous que la fonctionnalité hreflang n'est pas désactivée. Rank Math gère cela automatiquement sans nécessiter de configuration supplémentaire.
Implémentation manuelle de hreflang dans WordPress
Pour les sites avec une configuration multilingue personnalisée (par exemple, en utilisant des installations WordPress séparées pour chaque langue, ou une approche CMS headless), vous devrez peut-être ajouter manuellement les balises hreflang :
function add_hreflang_tags() {
if (is_singular()) {
$post_id = get_the_ID();
// Définir votre mappage langue-vers-URL
// Stocker les traductions comme méta d'article ou dans une table personnalisée
$translations = array(
'en' => get_post_meta($post_id, '_url_en', true),
'de' => get_post_meta($post_id, '_url_de', true),
'fr' => get_post_meta($post_id, '_url_fr', true),
);
// Supprimer les entrées vides
$translations = array_filter($translations);
// Ajouter la page actuelle (hreflang auto-référençant requis)
$current_lang = get_locale();
$lang_code = substr($current_lang, 0, 2); // 'en_US' devient 'en'
$translations[$lang_code] = get_permalink();
// Émettre les balises hreflang
foreach ($translations as $lang => $url) {
echo '<link rel="alternate" hreflang="' . esc_attr($lang) . '" href="' . esc_url($url) . '" />' . "\n";
}
// x-default (pointe généralement vers l'anglais ou votre langue principale)
if (!empty($translations['en'])) {
echo '<link rel="alternate" hreflang="x-default" href="' . esc_url($translations['en']) . '" />' . "\n";
}
} elseif (is_front_page() || is_home()) {
// Gérer la page d'accueil séparément
$home_translations = array(
'en' => 'https://example.com/en/',
'de' => 'https://example.com/de/',
'fr' => 'https://example.com/fr/',
);
foreach ($home_translations as $lang => $url) {
echo '<link rel="alternate" hreflang="' . esc_attr($lang) . '" href="' . esc_url($url) . '" />' . "\n";
}
echo '<link rel="alternate" hreflang="x-default" href="' . esc_url($home_translations['en']) . '" />' . "\n";
}
}
add_action('wp_head', 'add_hreflang_tags');Dans une configuration de production, vous remplaceriez les tableaux d'URL codés en dur par des recherches dynamiques depuis votre système de mappage de traduction, qu'il s'agisse de méta d'article, d'une table de base de données personnalisée ou d'un appel API à votre plateforme de gestion de traductions.
Ajouter hreflang aux sitemaps XML
Pour les sites avec des milliers de pages, déclarer hreflang dans votre sitemap XML peut être plus efficace que d'ajouter des balises au HTML de chaque page. L'approche par sitemap XML réduit la taille de la page et donne aux moteurs de recherche une source centralisée de données hreflang. Voici le format XML :
<url>
<loc>https://example.com/en/about/</loc>
<xhtml:link rel="alternate" hreflang="en"
href="https://example.com/en/about/" />
<xhtml:link rel="alternate" hreflang="de"
href="https://example.com/de/ueber-uns/" />
<xhtml:link rel="alternate" hreflang="x-default"
href="https://example.com/en/about/" />
</url>WPML et Polylang ajoutent tous deux automatiquement les annotations hreflang à leurs sitemaps. Si vous utilisez Yoast SEO avec une extension multilingue, Yoast inclut également hreflang dans son sitemap. Pour les implémentations manuelles, vous pouvez utiliser une extension comme « XML Sitemap Generator for Google » et personnaliser la sortie du sitemap pour inclure des entrées hreflang.
Vous pouvez utiliser à la fois les balises hreflang HTML et les annotations de sitemap XML simultanément. Google traite les deux et les concilie. S'il y a des conflits entre les deux, Google utilise sa propre heuristique pour déterminer le mappage correct.
Règles critiques de hreflang à suivre
Hreflang est notoirement facile à implémenter incorrectement. Suivez ces règles pour éviter les pièges courants :
- Le lien bidirectionnel (réciproque) est obligatoire : Si la page A (anglaise) inclut un hreflang pointant vers la page B (allemande), alors la page B doit également inclure un hreflang pointant vers la page A. Si le lien n'est qu'unidirectionnel, les moteurs de recherche l'ignorent entièrement. C'est l'erreur hreflang la plus courante.
- Le hreflang auto-référençant est requis : Chaque page doit inclure une balise hreflang qui pointe vers elle-même. Si votre page anglaise a des balises hreflang pour les versions allemande et française, elle doit également avoir une balise hreflang pour la version anglaise pointant vers sa propre URL.
- Utilisez uniquement des URL canoniques : L'URL dans chaque balise hreflang doit correspondre exactement à l'URL canonique de cette page. Si une page a une balise
rel="canonical"pointant vers une URL différente, utilisez l'URL canonique dans la balise hreflang, pas l'URL de la page actuelle. - Chaque variante linguistique a besoin de l'ensemble complet : Si vous avez 4 versions linguistiques, chaque variante de page doit inclure les 4 balises hreflang plus x-default. Des ensembles incomplets amènent les moteurs de recherche à ignorer entièrement l'annotation hreflang pour ce groupe de pages.
- Les pages doivent retourner un code de statut 200 : N'incluez pas d'URL dans les balises hreflang qui redirigent (301/302) ou retournent des erreurs (404/500). Les moteurs de recherche signaleront cela comme des erreurs hreflang et pourraient finir par cesser de traiter vos annotations hreflang.
- Incluez toujours x-default : La balise x-default sert de repli pour les utilisateurs dont la langue ou la région ne correspond à aucune de vos variantes spécifiées. Sans elle, ces utilisateurs pourraient ne pas voir votre contenu dans les résultats de recherche du tout.
Déboguer et valider votre implémentation hreflang
Après avoir configuré les balises hreflang, une validation approfondie est essentielle. Même de petites erreurs peuvent rendre toute votre configuration hreflang inefficace :
- Analyse InspectWP : Faites passer chaque version linguistique de votre site dans InspectWP. Il détecte toutes les balises hreflang et liste chaque variante linguistique, ce qui facilite la vérification que toutes les balises sont présentes et pointent vers les bonnes URL.
- Google Search Console : Consultez le rapport Ciblage international (sous Anciens outils et rapports) pour les erreurs hreflang. Google signale les problèmes comme les liens de retour manquants, les codes de langue inconnus et les conflits hreflang avec les balises canoniques.
- Inspection manuelle du code source : Consultez la source de chaque version linguistique et vérifiez que les balises hreflang sont présentes, bidirectionnelles et auto-référençantes. Vérifiez que les URL sont absolues (pas relatives) et utilisent le bon protocole (https, pas http).
- Audit Ahrefs ou Screaming Frog : Pour les grands sites, utilisez un outil d'exploration pour vérifier toutes les pages en une seule fois. Ces outils peuvent identifier les balises hreflang manquantes, les liens non réciproques et les incohérences de codes de langue sur l'ensemble de votre site.
Hreflang pour les réseaux WordPress Multisite
Si vous gérez un WordPress Multisite où chaque sous-site représente une langue différente, l'implémentation hreflang nécessite une conscience inter-sites. WPML prend en charge les configurations Multisite, en liant le contenu entre les sous-sites. Pour les implémentations manuelles, vous devez interroger les bases de données des autres sous-sites pour trouver l'article traduit correspondant et construire l'URL hreflang dynamiquement. La fonction switch_to_blog() de WordPress vous permet d'interroger les données d'un autre sous-site au sein du même réseau.
Considérations de performance pour les grands sites multilingues
Sur les sites avec de nombreuses langues (10+), les balises hreflang peuvent ajouter un balisage significatif à chaque page. Chaque page a besoin d'une balise par langue plus x-default, donc un site avec 15 langues ajoute 16 éléments <link> à l'en-tête de chaque page. Pour les sites sensibles à la performance, considérez ces stratégies :
- Utilisez hreflang dans le sitemap XML au lieu du HTML : Déplacer les déclarations hreflang vers le sitemap supprime entièrement le balisage de vos pages, réduisant la taille de la page.
- Mettez en cache la sortie hreflang : Si vous générez les balises hreflang dynamiquement (par exemple, à partir de requêtes de base de données), mettez le résultat en cache en utilisant les transients WordPress ou votre cache d'objets pour éviter des accès répétés à la base de données à chaque chargement de page.
- Utilisez des en-têtes HTTP pour le contenu non HTML : Pour les PDF et autres ressources non HTML, vous pouvez déclarer hreflang en utilisant des en-têtes HTTP
Linkau lieu de balises HTML.