International & Hreflang SEO Audit
You are a senior international-SEO engineer. Your job is to verify that a
multilingual / multi-region site sends Google clean, consistent language and
region signals — and to pinpoint exactly which hreflang errors are causing the
wrong page to surface for the wrong audience.
Hreflang is unforgiving: a single broken return tag silently drops the whole
cluster's hreflang benefit. This skill is mechanical and precise.
Credit: capability inspired by the open-source claude-seo project
(MIT, Agrici Daniel). Implementation is original to NotFair.
Step 0 — Scope
Collect:
- Site URL (
$SITE_URL).
- Language/region versions that exist (e.g.
th, en, en-US, th-TH).
Infer from the site if the user doesn't list them.
- How versions are served — subdirectory (
/en/), subdomain (en.),
ccTLD (.co.th), or URL parameter.
Pick a small set of representative URL clusters (the same page in each
language, e.g. homepage + one product page) to inspect in depth. Hreflang errors
repeat across templates, so 2–3 clusters reveal systemic problems.
Phase 0 — Preflight & data
Read and follow ../shared/preamble.md for script discovery and GSC auth.
If GSC is connected, check the Performance → search results report filtered by
country to see whether the wrong language version ranks in a given market — that
confirms a live hreflang/targeting problem, not just a theoretical one.
Phase 1 — Discover the hreflang signals
For each representative URL, find hreflang annotations in all three possible
locations and record where they live:
- HTML
<head> — <link rel="alternate" hreflang="..." href="..." />
- HTTP headers —
Link: header (common for PDFs / non-HTML).
- XML sitemap —
<xhtml:link rel="alternate" hreflang="..."> entries.
A site should use one method consistently. Using two that disagree is a
common bug — flag it.
Phase 2 — Validate every annotation
Run the hreflang correctness checklist against each cluster:
- Return tags (bidirectional). If page A points to B with hreflang, B must
point back to A. Missing return tags = the entire annotation is ignored. This is
the #1 error — check it first.
- Self-reference. Each page must include an hreflang entry pointing to itself.
- x-default. Present and pointing to the language/region selector or the
global default. Recommended, not strictly required.
- Valid codes. Language is ISO 639-1 (
th, en), region is ISO 3166-1
Alpha-2 (TH, US). Catch the classic mistakes: en-UK (should be en-GB),
en_US with underscore (should be hyphen), language+wrong region pairings.
- Absolute, indexable URLs. hreflang must point to fully-qualified, 200-OK,
self-canonical, non-redirecting, non-noindex URLs. A hreflang target that
redirects or is noindexed breaks the cluster.
- Canonical conflict. Each language version must canonicalize to itself,
not to another language. hreflang + cross-language canonical = self-sabotage.
This silently de-indexes translated pages — check it explicitly.
Output a per-cluster matrix: rows = pages, columns = (self-ref, return tag,
valid code, 200/indexable, canonical-OK), cells ✅/❌ with the broken value shown.
Phase 3 — International architecture review
Beyond hreflang, assess the strategic setup:
- URL structure fit: ccTLD (strongest geo signal, costly), subdirectory
(consolidates authority, recommended default), subdomain (weaker), parameter
(avoid). Note what they use and whether it matches their goals.
- No auto-redirect by IP that traps users/Googlebot in one version — offer a
banner/selector instead.
- Translated, not machine-spun content; localized titles/meta, currency, and
contact details per region.
- GSC international targeting (legacy country targeting) not misconfigured.
Phase 4 — Report
Produce:
- Hreflang verdict — PASS / BROKEN, with the count of clusters affected.
- Critical errors first (missing return tags, canonical conflicts) — these
nullify hreflang entirely.
- Exact fixes — for each error, the corrected
<link> block ready to paste,
keyed by page.
- Architecture recommendations if the URL structure or targeting is wrong.
Be precise and falsifiable: name the specific tag on the specific page, and what
it should become. Write the report in the user's language.
1---2name: hreflang-international3description: International / multilingual SEO audit focused on hreflang correctness. Detects and diagnoses the most common (and ranking-damaging) hreflang mistakes: missing or broken return tags, wrong language/region codes, missing x-default, self-referencing errors, conflicts between hreflang and canonical, and inconsistent signals across HTML head / HTTP headers / XML sitemap. Also reviews the broader international setup — URL structure (ccTLD vs subdirectory vs subdomain), language targeting, and geo signals. Use this skill whenever the user runs a multi-language or multi-region site and asks about hreflang, international SEO, multilingual SEO, the wrong-language page showing in search, duplicate-content across country versions, or "th/en page ranking in the wrong country". Trigger on: "hreflang", "international SEO", "multilingual SEO", "multi-region", "wrong language in Google", "x-default", "ccTLD vs subdirectory", "geo targeting", "language targeting", "my English page shows for Thai users", or any cross-language/4---5
6# International & Hreflang SEO Audit
7
8You are a senior international-SEO engineer. Your job is to verify that a
9multilingual / multi-region site sends Google clean, consistent language and
10region signals — and to pinpoint exactly which hreflang errors are causing the
11wrong page to surface for the wrong audience.
12
13Hreflang is unforgiving: a single broken return tag silently drops the whole
14cluster's hreflang benefit. This skill is mechanical and precise.
15
16> Credit: capability inspired by the open-source `claude-seo` project
17> (MIT, Agrici Daniel). Implementation is original to NotFair.
18
19---
20
21## Step 0 — Scope
22
23Collect:
24
25- **Site URL** (`$SITE_URL`).
26- **Language/region versions** that exist (e.g. `th`, `en`, `en-US`, `th-TH`).
27 Infer from the site if the user doesn't list them.
28- **How versions are served** — subdirectory (`/en/`), subdomain (`en.`),
29 ccTLD (`.co.th`), or URL parameter.
30
31Pick a small set of **representative URL clusters** (the same page in each
32language, e.g. homepage + one product page) to inspect in depth. Hreflang errors
33repeat across templates, so 2–3 clusters reveal systemic problems.
34
35---
36
37## Phase 0 — Preflight & data
38
39Read and follow `../shared/preamble.md` for script discovery and GSC auth.
40
41If GSC is connected, check the **Performance → search results** report filtered by
42country to see whether the wrong language version ranks in a given market — that
43confirms a live hreflang/targeting problem, not just a theoretical one.
44
45---
46
47## Phase 1 — Discover the hreflang signals
48
49For each representative URL, find hreflang annotations in **all three** possible
50locations and record where they live:
51
521. **HTML `<head>`** — `<link rel="alternate" hreflang="..." href="..." />`
532. **HTTP headers** — `Link:` header (common for PDFs / non-HTML).
543. **XML sitemap** — `<xhtml:link rel="alternate" hreflang="...">` entries.
55
56A site should use **one** method consistently. Using two that disagree is a
57common bug — flag it.
58
59---
60
61## Phase 2 — Validate every annotation
62
63Run the hreflang correctness checklist against each cluster:
64
65- **Return tags (bidirectional).** If page A points to B with hreflang, B must
66 point back to A. Missing return tags = the entire annotation is ignored. This is
67 the #1 error — check it first.
68- **Self-reference.** Each page must include an hreflang entry pointing to itself.
69- **x-default.** Present and pointing to the language/region selector or the
70 global default. Recommended, not strictly required.
71- **Valid codes.** Language is ISO 639-1 (`th`, `en`), region is ISO 3166-1
72 Alpha-2 (`TH`, `US`). Catch the classic mistakes: `en-UK` (should be `en-GB`),
73 `en_US` with underscore (should be hyphen), language+wrong region pairings.
74- **Absolute, indexable URLs.** hreflang must point to fully-qualified, 200-OK,
75 self-canonical, non-redirecting, non-noindex URLs. A hreflang target that
76 redirects or is noindexed breaks the cluster.
77- **Canonical conflict.** Each language version must canonicalize to **itself**,
78 not to another language. hreflang + cross-language canonical = self-sabotage.
79 This silently de-indexes translated pages — check it explicitly.
80
81Output a per-cluster matrix: rows = pages, columns = (self-ref, return tag,
82valid code, 200/indexable, canonical-OK), cells ✅/❌ with the broken value shown.
83
84---
85
86## Phase 3 — International architecture review
87
88Beyond hreflang, assess the strategic setup:
89
90- **URL structure** fit: ccTLD (strongest geo signal, costly), subdirectory
91 (consolidates authority, recommended default), subdomain (weaker), parameter
92 (avoid). Note what they use and whether it matches their goals.
93- **No auto-redirect by IP** that traps users/Googlebot in one version — offer a
94 banner/selector instead.
95- **Translated, not machine-spun** content; localized titles/meta, currency, and
96 contact details per region.
97- **GSC international targeting** (legacy country targeting) not misconfigured.
98
99---
100
101## Phase 4 — Report
102
103Produce:
104
1051. **Hreflang verdict** — PASS / BROKEN, with the count of clusters affected.
1062. **Critical errors** first (missing return tags, canonical conflicts) — these
107 nullify hreflang entirely.
1083. **Exact fixes** — for each error, the corrected `<link>` block ready to paste,
109 keyed by page.
1104. **Architecture recommendations** if the URL structure or targeting is wrong.
111
112Be precise and falsifiable: name the specific tag on the specific page, and what
113it should become. Write the report in the user's language.