Guide : How to Audit Hreflang at Scale

A repeatable, outil-driven traiter pour auditing hreflang à travers a grand site — pulling chaque annotation depuis tout three implementation méthodes, reading cluster graphs et reciprocal matrices, et prioritizing corrections par damage, pas frequency.

Première publication : 2 juil. 2026 · Dernière mise à jour : 3 août 2026 · Avancé
1 indice probant sur cette page

Auditing hreflang à scale est a graph-validation problème, pas a balise-validation problème: vous vérifier si chaque page dans a cluster points back à chaque autre page, pas si un page a a balise. Pull chaque annotation depuis tout three implementation locations (HTML head, HTTP headers, XML sitemap) avec a robot d’exploration — Google donne vous aucun validator et GSC's International Targeting rapport était supprimé Sept 22, 2022 — alors construire le reciprocal-balise matrix. Spot-vérifier a cluster visually avec mon gratuit returntag graph et matrix, or utiliser Ahrefs Site Audit et Screaming Frog pour complet-site coverage. Triage par damage: manquant retourner balises premier (ils break le entier pair), alors incorrect langue/region codes et non-canonical targets, alors manquant x-default dernier (la plupart courant à 56,3%, le moins harmful). Dans mon Brighton SEO 2023 study de 374 756 domains, over 67% en utilisant hreflang avait au moins un erreur.

TL;DR — A scaled hreflang audit est graph validation, pas balise validation. Étape 1: pull chaque annotation depuis tout three legal locations (HTML head, HTTP Link headers, XML sitemap) avec a robot d’exploration configuré pour votre ccTLD/subdomain setup — GSC ne peut pas faire ce (International Targeting supprimé Sept 22, 2022, et même avant que il seulement reported le canonical member de a cluster). Étape 2: construire le reciprocal-balise matrix — chaque URL dans a cluster × chaque autre, fait A→B exist, fait B→A. Lire il dans mon returntag cluster graph/matrix pour a focused vérifier, or utiliser Ahrefs et Screaming Frog pour site-wide exploration. Étape 3: classify dans four patterns — manquant retourner balises, incorrect codes, non-canonical targets, mixed absolute/relative URLs. Étape 4: prioritize par damage, pas frequency — retourner balises premier (ils break le entier pair), alors codes, alors x-default dernier (la plupart courant à 56,3%, le moins harmful). Étape 5: re-vérifier contre le indexé URL, pas le declared canonical.

Ce article est le hreflang-spécifique companion à mon broader International SEO Audit, qui treats hreflang as un de six audit areas. Ici Je’m going un level deeper on le hreflang-seulement methodology à scale. Pour fundamentals — ce que hreflang est, le three façons à implement il, le reciprocal règle — voir le Hreflang hub et, pour le fallback balise, x-default.

Preuve à l’appui de cette affirmation A complete audit needs to inspect HTML, HTTP Link headers, and XML sitemaps because Google supports hreflang in all three locations. Portée : Google Search-supported hreflang delivery methods. Niveau de confiance : élevé · Vérifié : Google: Localized versions

The core reframe: ce is a graph problem

«Here’s the mental shift that makes scaled auditing tractable. You are not checking “does this page have a hreflang tag.” You’re checking “does every page in this page’s cluster point back to it, and does every URL in the cluster resolve to a 200, canonical, indexable page.” » (Traduction) (Résumé en français de la section trente, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Google’s propre documentation is the raison:

“Si page X liens to page Y, page Y doit lien back to page X. Si ce n’est pas the cas pour tout pages que utiliser hreflang annotations, ceux annotations may be ignored or pas interpreted correctement.”

Preuve à l’appui de cette affirmation A hreflang audit must verify return links because Google says non-reciprocal annotations may be ignored or interpreted incorrectly. Portée : Google Search hreflang reciprocity guidance; impact is stated as possible, not guaranteed cluster-wide invalidation. Niveau de confiance : élevé · Vérifié : Google: Hreflang guidelines

Lire que carefully. Un manquant retourner lien peut causer le affected annotations à être ignored or interpreted incorrectly. c’est pourquoi a unique-page view est structurally incapable de auditing hreflang: le échec lives dans le relationship entre pages, pas on quelconque un page. Vous besoin a explorer que records chaque cluster member et cross-references les.

Scope matters ici aussi: le ignored annotations sont le ones dans le broken pair, pas automatiquement chaque relationship dans a plus grand cluster. A five-page cluster avec un manquant retourner typically garde processing son autre complet pairs normally — c’est exactly ce que mon returntag screenshot ci-dessous montre: nine reciprocal pairs intact, un manquant retourner flagged. ne pas assume un broken edge nukes le entier cluster; go vérifier chaque pair, parce que le outil a à vérifier chaque pair à tell vous que.

Et il obtient harder as le site grows — qui est exactly Google’s propre explanation pour pourquoi big sites sont le ones avec erreurs. On Recherche Off le Record, Gary Illyes décrit le erreurs as emerging quand a site a nombreux properties, chaque avec son propre Structure d’URL — as soon as vous ont à vary le modèle à travers properties, c’est où le erreurs come dans, avec Lizzi Sassman ajout que c’est harder à sync les up quand vous êtes localizing URLs et alors making typos. c’est le signature de an enterprise setup: plusieurs ccTLDs, chaque on a slightly différent publishing convention. Donc a bon audit segments findings par property/domain groupe, parce que c’est où le erreurs en réalité cluster operationally.

Étape 1 — Pull chaque hreflang annotation site-wide

Le three places hreflang lives

Google accepts hreflang in three equivalent locations, and vous doit vérifier tout three:

Preuve à l’appui de cette affirmation A complete audit needs to inspect HTML, HTTP Link headers, and XML sitemaps because Google supports hreflang in all three locations. Portée : Google Search-supported hreflang delivery methods. Niveau de confiance : élevé · Vérifié : Google: Localized versions
  1. HTML <link> balises dans le <head> — le courant cas.
  2. HTTP Link: réponse headers — utilisé pour non-HTML fichiers comme PDFs.
  3. xhtml:link entries dans an XML sitemap — courant à scale parce que il centralizes le annotations dans un fichier au lieu de templating les sur chaque page.

A robot d’exploration que seulement lit le HTML head va silently miss header- or sitemap-declared alternates. Il ne va pas flag les as broken — il simplement ne va pas voir les, qui est pire, parce que vous’ll think une page a aucun hreflang quand il en réalité a a complet définir delivered via sitemap. Configurer le explorer à lire tout three avant vous confiance a unique number.

Configuring the robot d’exploration pour votre structure

  • Screaming Frog: enable Configuration > Spider > Explorer Hreflang (ce aussi picks up sitemap et header hreflang quand vous point il à les). Pour ccTLDs/subdomains que référence chaque autre, ajouter le sibling domains sous Config > CDNs — sinon cross-domain hreflang liens sont simplement pas validated, pas flagged as broken. Ce est le unique la plupart courant blind spot à scale, parce que enterprise sites sont le ones la plupart probable à utiliser ccTLDs, et ccTLDs sont exactly ce que nécessite ce supplémentaire étape.
  • Ahrefs Site Audit: assurez-vous le sibling domains sont à l’intérieur le project scope pour le même raison. Alors utiliser Page Explorer à filter pages par hreflang problème type à scale avant vous drill dans individual cluster graphs.

Pourquoi GSC can’t do ce pour vous

Deux raisons, et le deuxième est le un la plupart personnes miss:

  1. Le rapport est gone. Le GSC International Targeting rapport — qui utilisé à flag some hreflang problèmes — était deprecated et supprimé (announced August 2022; supprimé après September 22, 2022). Rien replaced il directement.
  2. Même quand il existed, il seulement ever showed le canonical. On Recherche Off le Record, Illyes explained que Search Console seulement rapports on canonicals — pour la plupart similar-langue hreflang clusters, le alternates ne sont pas canonical, donc vous étaient effectively blind à ce que était happening on le non-canonical members de a cluster, parce que Google stores les dans le duplicate cluster sans keeping le alternate details. c’est a structural raison GSC était jamais a complet hreflang audit outil, pas simplement “the report got removed.” c’est le direct justification pour going robot-premier.

Google aussi simplement ne fait pas ship a validator. On le même podcast, Illyes said Google a jamais provided an hreflang validator — ils avait some underused reporting et alors supprimé il — et maintenant points personnes à external outils comme Aleyda Solis’ outil, Bill Hunt’s hreflang checker, et Merkle’s outil. Prendre que as permission à lean on tiers robots d’exploration pour le job GSC ne peut pas faire — mais pas as an endorsement. Google’s propre documentation est explicit que il ne fait pas maintain or vérifier tiers hreflang debugging outils, donc treat quelconque outil’s sortie, mine inclus, as diagnostic evidence vous encore ont à raison à propos de, pas an official verdict. Quand a finding en réalité matters, confirmer il contre le raw artifact — le HTTP réponse, le sitemap XML, or le rendu HTML — plutôt que stopping à le outil’s parsed summary.

Step 2 — Construire the reciprocal-tag matrix

Normalize ce que vous pulled

Avant vous construire le matrix, obtenir tout dans un consistent shape. Pour chaque declared hreflang relationship, record l’URL source, l’URL cible, le locale valeur, le source méthode (HTML head, HTTP header, or sitemap), et — critically — le cible’s code d’état, chaîne de redirections, indexability, canonical cible, et si le explorer saw il dans raw HTML or le rendu DOM. Différent robots d’exploration export ce differently; normalizing il dans directed URL-à-URL edges avec que context attached est ce que rend le matrix, et chaque classification dans Étape 3, fiable au lieu de a pile de disconnected lignes.

Ce que the matrix represents

Conceptually, pour chaque cluster vous construire a tableau où le lignes et columns sont chaque URL dans que cluster, et chaque cell réponses a oui/aucun question: fait a hreflang lien exist depuis le ligne URL à le column URL? A correct cluster est symmetric — si A→B est présent, B→A est présent. Chaque asymmetric cell (a lien que exists dans un direction seulement) est a manquant retourner balise.

Vous ne pas literally hand-construire ce spreadsheet à scale — le outils construire il pour vous. Mais holding le matrix dans votre head est ce que lets vous lire le outil sortie correctement. Mon returntag outil draws le matrix as a graph et aussi exposes le underlying cells; Screaming Frog’s “Missing Return Links” filter pulls le asymmetric cells dans a liste, et Ahrefs Site Audit provides un autre à-scale cluster view. Même relationship vérifier, différent presentations et explorer scopes.

Reading il as a graph: mon returntag cluster validator

Pour a focused cluster vérifier, mon gratuit returntag outil renders le declared locale relationships as a graph et a reciprocal matrix. Chaque locale est a node, chaque declared hreflang annotation est an edge, et le problème liste identifies le exact URL que fails à lien back. Le screenshot ci-dessous est a sitemap-seulement exécuter: il lit ce que le sitemap declares et deliberately ne fait pas récupérer page head balises or HTTP Link headers. Utiliser Page URL mode quand vous besoin le complet three-source picture pour une page’s cluster.

How to lire it:

  • A clean cluster est a fully-connected mesh — chaque node lié à chaque autre node, les deux directions.
  • A un-way edge est votre asymmetric cell: page X points à Y mais Y ne fait pas point back. c’est le renvoyer-balise erreur, vu au lieu de lire.
  • An orphaned node — une URL que apparaît dans le cluster mais ne fait pas lien back dans il — est an unlinked hreflang URL.

Le practical win est triage speed et stakeholder communication: au lieu de handing a developer an abstract spreadsheet ligne, vous montrer le un-way relationship et le exact manquant renvoyer-balise erreur ensemble. Pour hundreds or thousands de clusters, garder Ahrefs Site Audit or Screaming Frog dans le workflow pour complet explorer coverage; returntag est le rapide façon à inspect et expliquer a spécifique cluster.

Reading il as a spreadsheet: le Screaming Frog filters

Si vous êtes dans Screaming Frog, le matrix surfaces as a définir de filters (après vous exécuter Explorer Analysis post-explorer à populate le renvoyer-lien données). Fonctionner les dans roughly ce order, parce que il maps à le priority order dans Étape 4:

  • Manquant Retourner Liens — le asymmetric cells; votre highest-priority findings.
  • Inconsistent Langue & Region Retourner Liens — a retourner lien exists mais avec a différent code que le outbound un (A dit B est fr-FR, B dit A est en-GB quand A est vraiment en-US) — a subtler pair-breaker.
  • Non-Canonical Retourner Liens — le retourner lien points à une URL c’est canonicalized elsewhere, donc le signal chain breaks même though a balise exists.
  • Noindex Retourner Liens — le retourner cible est noindexed, donc il ne peut pas carry le annotation.
  • Non-200 Hreflang URLs — le cible est a redirection or an erreur page.
  • Unlinked Hreflang URLs et Incorrect Langue & Region Codes — orphaned nodes et code-validation erreurs.

Export le entier définir via Rapports > Hreflang. (Pour le complet filter-par-filter walkthrough à le summary level, le Screaming Frog hreflang tutorial est excellent — Je’m pas going à re-type leur config étapes ici.)

Step 3 — Classify ce que vous trouver into four error patterns

Votre explorer sortie va être noisy. Sort chaque finding dans un de four buckets — ces sont le patterns que repeat à travers le 374 756-domain study. (Je’m pulling seulement le deux figures que anchor le priority argument; le complet nine-type erreur tableau est déjà dans le International SEO Audit article — aucun point re-pasting il.)

1. Manquant retourner tags — the pair-breaker

Le asymmetric cells depuis votre matrix. 15,3% de hreflang-en utilisant domains ont ces. As Je put il dans le study writeup: “As Je mentioned, hreflang balises fonctionner dans pairs. Si les deux pages ne pas référence chaque autre, ils ne peut pas establish le connection et swap correctement dans le résultats de recherche.” Ce est le category que invalidates le entier pair’s signal per Google’s docs, qui est pourquoi c’est premier dans le priority order — même though c’est pas le la plupart courant erreur.

2. Incorrect langue/region codes — le quietly-forgiving un

Utiliser ISO 639-1 pour langue et ISO 3166-1 alpha-2 pour region. Le classic breakers: jp au lieu de ja pour Japanese, le typo js pour ja, three-letter codes comme gbr au lieu de gb, la (Laos) misused pour “Latin America.”

Un plus distinction worth building dans votre audit: BCP 47 (le underlying langue-balise spec) permits a beaucoup broader définir de valeurs que Google’s hreflang implementation en réalité acts on — script subtags et autre BCP 47-legal constructs que Google’s propre hreflang documentation ne fait pas confirmer as recognized valeurs. A code peut être perfectly well-formed BCP 47 et encore pas être quelque chose Google’s hreflang guidance documents as pris en charge. Valider contre Google’s documented langue/region/x-default règles précisément, pas générique BCP 47 well-formedness — a syntactically valide balise peut encore être functionally invisible à Google.

«But here’s the nuance that cuts against naive prioritization: Google silently corrects some of these and not others. Its documentation states that if you use codes reserved for something else, “Google Search ignores that part of the annotation (for example, using EU, UN, or UK in hreflang annotations doesn’t have an effect on Google Search).” So UK is effectively dropped (you want GB), but it doesn’t nuke the rest of the annotation — whereas a code that’s simply wrong (jp for ja) does break that pair. An audit needs to distinguish “technically wrong but Google handles it” from “wrong and actually breaks the pair,” because they don’t get the same urgency. » (Traduction) (Résumé en français de la section soixante-dix, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

3. Non-URL canoniques in hreflang — the invisible un

Ce est le modèle que semble fine dans a balise export et breaks anyway. A clé distinction Je drew à Pubcon 2019: hreflang est à propos de le indexé version, pas le canonical. Si votre hreflang points à une URL c’est canonicalized away depuis qu’est-ce que en réalité indexé, le signal chain breaks même though le balise itself est “valide.” Ce seulement surfaces quand vous cross-reference le explorer export contre indexation status — la plupart hreflang tutorials skip il parce que ils treat hreflang as an isolated balise vérifier au lieu de partie de le indexation pipeline. (Plus on verifying ce dans Étape 5.)

il y a a même-langue alignment vérifier worth ajout ici aussi. Quand plusieurs near-duplicate URLs pourrait plausibly servir as le canonical pour a locale, Google’s propre canonicalization guidance favors a même-langue (or meilleur-substitute) URL, et donne some preference à une page c’est partie de a complet reciprocal hreflang cluster over un que n’est pas. c’est a raison à garder hreflang targets pointed à même-langue canonical candidates plutôt que letting les drift sur a différent-langue duplicate. None de ce est quelque chose a robot d’exploration or checker peut prove outright, though — il peut montrer vous le configuré signaux (balise canonicals, hreflang edges, cluster membership), pas Google’s réel final selection. Treat explorer sortie as diagnostic evidence, pas confirmation.

Preuve à l’appui de cette affirmation Audit canonical targets for same-language or best-substitute alignment and compare reciprocal hreflang-cluster membership, because Google documents a cluster preference among otherwise similar URLs. Portée : localized HTML pages, HTTP headers, XML sitemaps and search systems as applicable Niveau de confiance : élevé · Vérifié : How to specify a canonical URL with rel=canonical and other methods

4. Mixed absolute/relative URLs — le templating bug

«Google is explicit: “Alternate URLs must be fully-qualified, including the transport method (http/https), so: https://example.com/foo, not //example.com/foo or /foo.” At scale this is almost never a one-off typo — it’s a templating bug that hits thousands of URLs at once because the hreflang block is generated from a partial URL pattern. That’s why crawlers flag it as a systemic issue: find one, and you’ve usually found a whole template’s worth. » (Traduction) (Résumé en français de la section soixante-quinze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Step 4 — Prioritize: retourner tags premier, codes suivant, x-default dernier

Le unique la plupart important idea dans ce entier article: erreur severity n’est pas proportional à erreur frequency. Sort votre findings par damage, pas par comment nombreux lignes le outil renvoyé.

TierErreur modèlePourquoi ici
1 — corriger premierManquant retourner balises; inconsistent renvoyer-lien codesBreaks le entier pair’s signal per Google’s docs. Highest damage.
2 — corriger suivantIncorrect codes que Google ne fait pas silently corriger (jp→ja); non-canonical / broken targetsBreaks individual relationships; some sont silently handled, some ne sont pas — triage accordingly.
3 — batchMixed absolute/relative URLs, manquant self-referenceRéel hygiene problèmes, généralement template-wide, mais pas toujours cluster-breaking.
4 — dernierManquant x-defaultLa plupart courant, le moins damaging.

Pourquoi x-default goes dernier despite étant everywhere: c’est le unique la plupart courant finding dans chaque study — 56,3% dans mon 374 756-domain study, et 47,95% dans Dan Taylor’s independent 18 786-domain SALT.agency study (deux studies, very différent scales, même headline: la plupart sites sont manquant il). Mais as Je wrote dans le study: “Paramètre an x-default n’est pas requis. Mais il est recommended si vous besoin a fallback page pour utilisateurs whose langue paramètres ne pas match quelconque de votre localized versions.” Google’s propre team treats il as a UX fallback, pas an indexation-critical signal — on Recherche Off le Record, Illyes décrit x-default as annotating a fallback page pour quand il y a aucun matching langue pour a utilisateur, et noted il peut même être un autre langue page plutôt que a dedicated selector. Corriger il, mais corriger il après le choses que en réalité break clusters.

«Self-reference sits in tier 3 for the same reason: even Illyes, who worked on Google’s hreflang implementation, said on record he doesn’t fully remember why self-reference is required and is fairly sure clusters would work without it — he framed it mainly as making clusters easier to set up because you can copy/paste the same block everywhere. It’s implementation hygiene, not a functional requirement. » (Traduction) (Résumé en français de la section quatre-vingts, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Pour le broader impact × effort matrix que spans tout six international audit areas (pas simplement hreflang), utiliser le Frameworks lens dans International SEO Audit plutôt que rebuilding il ici.

Step 5 — Re-verify contre the indexé URL, pas the explorer

Votre explorer valide le balises. Il ne fait pas valider que l’URL le balise points à est le un Google en réalité indexé. Parce que hreflang suit le indexé version (Étape 3, modèle 3), a balise que points à une URL c’est été canonicalized away — or que redirections, or est noindexed downstream — encore breaks le signal même après votre bulk corriger réussir rapports “clean.”

Donc après le corrections ship, spot-vérifier le highest-valeur clusters avec Inspection d’URL dans Search Console: confirmer l’URL Google rapports as indexé est le même URL votre hreflang références. Ce est le étape que catches canonical-chain drift, qui est invisible dans a plain hreflang-balise export. Vous ne pas faire il pour chaque URL — vous faire il pour votre money pages dans chaque market, après le explorer dit vous êtes fait.

A one-line remarque on Bing

ne pas expect Bing Webmaster Outils à valider quelconque de ce. Bing treats hreflang as a beaucoup weaker signal que Google fait et supprimé son Geo Targeting fonctionnalité back dans 2020 — il leans on le Contenu-Langue header à la place. A hreflang-à-scale audit est fundamentally a Google-facing exercise; vérifier Contenu-Langue pour Bing séparément (covered dans International SEO Audit).

Ajouter une note d’expert

Épingler une citation d’expert

Nouvelle personne ? Créez son profil non revendiqué à /admin/experts/ → Épingler une citation d’expert d’abord.