Hreflang & International SEO
Validate existing hreflang implementations or generate correct hreflang tags
for multi-language and multi-region sites. Supports HTML, HTTP header, and
XML sitemap implementations.
Validation Checks
1. Self-Referencing Tags
- Every page must include an hreflang tag pointing to itself
- The self-referencing URL must exactly match the page's canonical URL
- Missing self-referencing tags cause Google to ignore the entire hreflang set
2. Return Tags
- If page A links to page B with hreflang, page B must link back to page A
- Every hreflang relationship must be bidirectional (A→B and B→A)
- Missing return tags invalidate the hreflang signal for both pages
- Check all language versions reference each other (full mesh)
3. x-default Tag
- Recommended when a selector/fallback URL exists: designates the fallback page for unmatched languages/regions
- Typically points to the language selector page or English version
- Only one x-default per set of alternates
- Must also have return tags from all other language versions
4. Language Code Validation
- Must use ISO 639-1 two-letter codes (e.g.,
en, fr, de, ja)
- An optional ISO 15924 script subtag is the documented, official mechanism
for script:
zh-Hant (Traditional) / zh-Hans (Simplified). Script may
combine with a region, e.g. zh-Hans-US is valid (language + script + region).
- Common errors:
eng instead of en (ISO 639-2, not valid for hreflang)
jp instead of ja (incorrect code for Japanese)
zh is valid but ambiguous for script-specific pages; prefer zh-Hans or zh-Hant when targeting a script
5. Region Code Validation
- Optional region qualifier uses ISO 3166-1 Alpha-2 (e.g.,
en-US, en-GB, pt-BR)
- Format:
language-REGION (lowercase language, uppercase region)
- A country code alone is invalid, you cannot specify a region without a
language (Google's own bad example is
be, which is actually the Belarusian
language code, not Belgium).
- Common errors:
en-uk instead of en-GB (UK is not a valid ISO 3166-1 region code)
EU / UN as a region (not valid ISO 3166-1 values)
es-LA (Latin America is not a country; use specific countries)
- Region without language prefix
5b. Geo-targeting signal hierarchy
- Practical locale-signal heuristic: ccTLD > hreflang annotations >
server location/IP > addresses/language/currency/Business Profile. Do not
present this as a confirmed Google ranking order. hreflang is a
hint, not a directive. Google ignores locational meta tags and
HTML geotargeting attributes.
- The Search Console International Targeting report and the manual
country-targeting setting were removed in 2022, do not recommend setting
country targeting in GSC; hreflang is the remaining lever.
5c. Region-specific Search units (EEA, South Africa, Turkiye)
- Google documents Search experiences that exist only in certain countries:
aggregator units, supplier units, and carousels for hotel, flight,
long-distance transport, and product queries shown to users in the EEA,
South Africa, and Turkiye (documentation added 2026-09-08). Eligibility and
participation are documented per unit; they are not ranking signals.
- When a site serves those regions with hreflang variants, note in the report
whether the business is an aggregator or a direct supplier and point to the
regional documentation, so the client is not surprised by a different result
layout in those markets.
6. Canonical URL Alignment
- Hreflang tags must only appear on canonical URLs
- If a page has
rel=canonical pointing elsewhere, hreflang on that page is ignored
- The canonical URL and hreflang URL must match exactly (including trailing slashes)
- Non-canonical pages should not be in any hreflang set
7. Protocol Consistency
- All URLs in an hreflang set must use the same protocol (HTTPS or HTTP)
- Mixed HTTP/HTTPS in hreflang sets causes validation failures
- After HTTPS migration, update all hreflang tags to HTTPS
8. Cross-Domain Support
- Hreflang works across different domains (e.g., example.com and example.de)
- Cross-domain hreflang requires return tags on both domains
- Use Google Search Console verification for monitoring or cross-site sitemap submission when needed
- Sitemap-based implementation recommended for cross-domain setups
Common Mistakes
| Issue |
Severity |
Fix |
| Missing self-referencing tag |
Critical |
Add hreflang pointing to same page URL |
| Missing return tags (A→B but no B→A) |
Critical |
Add matching return tags on all alternates |
| Missing x-default when fallback behavior is required |
Medium |
Add x-default pointing to fallback/selector page |
Invalid language code (e.g., eng) |
High |
Use ISO 639-1 two-letter codes |
Invalid region code (e.g., en-uk) |
High |
Use ISO 3166-1 Alpha-2 codes |
| Hreflang on non-canonical URL |
High |
Move hreflang to canonical URL only |
| HTTP/HTTPS mismatch in URLs |
Medium |
Standardize all URLs to HTTPS |
| Trailing slash inconsistency |
Medium |
Match canonical URL format exactly |
| Hreflang in both HTML and sitemap |
Low |
Choose one method (sitemap preferred for large sites) |
| Language without region when needed |
Low |
Add region qualifier for geo-targeted content |
Implementation Methods
Method 1: HTML Link Tags
Best for: Sites with <50 language/region variants per page.
<link rel="alternate" hreflang="en-US" href="https://example.com/page" />
<link rel="alternate" hreflang="en-GB" href="https://example.co.uk/page" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />
<link rel="alternate" hreflang="x-default" href="https://example.com/page" />
Place in <head> section. Every page must include all alternates including itself.
Method 2: HTTP Headers
Best for: Non-HTML files (PDFs, documents).
Link: <https://example.com/page>; rel="alternate"; hreflang="en-US",
<https://example.com/fr/page>; rel="alternate"; hreflang="fr",
<https://example.com/page>; rel="alternate"; hreflang="x-default"
Set via server configuration or CDN rules.
Method 3: XML Sitemap (Recommended for large sites)
Best for: Sites with many language variants, cross-domain setups, or 50+ pages.
See Hreflang Sitemap Generation section below.
Method Comparison
| Method |
Best For |
Pros |
Cons |
| HTML link tags |
Small sites (<50 variants) |
Easy to implement, visible in source |
Bloats <head>, hard to maintain at scale |
| HTTP headers |
Non-HTML files |
Works for PDFs, images |
Complex server config, not visible in HTML |
| XML sitemap |
Large sites, cross-domain |
Scalable, centralized management |
Not visible on page, requires sitemap maintenance |
Hreflang Generation
Process
- Detect languages: Scan site for language indicators (URL path, subdomain, TLD, HTML lang attribute)
- Map page equivalents: Match corresponding pages across languages/regions
- Validate language codes: Verify all codes against ISO 639-1 and ISO 3166-1
- Generate tags: Create hreflang tags for each page including self-referencing
- Verify return tags: Confirm all relationships are bidirectional
- Add x-default: Set fallback for each page set
- Output: Generate implementation code (HTML, HTTP headers, or sitemap XML)
Hreflang Sitemap Generation
Sitemap with Hreflang
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://example.com/page</loc>
<xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/page" />
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />
<xhtml:link rel="alternate" hreflang="de" href="https://example.de/page" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/page" />
</url>
<url>
<loc>https://example.com/fr/page</loc>
<xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/page" />
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />
<xhtml:link rel="alternate" hreflang="de" href="https://example.de/page" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/page" />
</url>
</urlset>
Key rules:
- Include the
xmlns:xhtml namespace declaration
- Every
<url> entry must include ALL language alternates (including itself)
- Each alternate must appear as a separate
<url> entry with its own full set
- Split at whichever comes first: 50,000 URLs or 50MB uncompressed per sitemap file
Output
Hreflang Validation Report
Summary
- Total pages scanned: XX
- Language variants detected: XX
- Issues found: XX (Critical: X, High: X, Medium: X, Low: X)
Validation Results
| Language |
URL |
Self-Ref |
Return Tags |
x-default |
Status |
| en-US |
https://... |
✅ |
✅ |
✅ |
✅ |
| fr |
https://... |
❌ |
⚠️ |
✅ |
❌ |
| de |
https://... |
✅ |
❌ |
✅ |
❌ |
Generated Hreflang Tags
- HTML
<link> tags (if HTML method chosen)
- HTTP header values (if header method chosen)
hreflang-sitemap.xml (if sitemap method chosen)
Recommendations
- Missing implementations to add
- Incorrect codes to fix
- Method migration suggestions (e.g., HTML to sitemap for scale)
Cultural Adaptation Assessment
When analyzing a multi-language site, go beyond technical hreflang validation to assess
whether the content is culturally adapted for each target market.
Load references/cultural-profiles.md for pre-built profiles (DACH, Francophone, Hispanic, Japanese).
Assessment steps:
- Identify all language versions and their target markets
- Load the relevant cultural profile(s)
- Check CTAs match cultural expectations (direct vs indirect)
- Check trust signals are locale-appropriate (certifications, legal pages)
- Check for foreign brand references on localized pages
- Check number/date/currency formatting consistency
- Flag cultural adaptation issues as Medium severity
Output: Cultural Adaptation Score per language version (0-100) with specific findings.
Content Parity Audit
Command: /seo hreflang audit <directory-or-url>
Audit content parity across all language versions of a site or local content directory.
Load references/content-parity.md for the full parity matrix and scoring methodology.
What it checks:
- Page existence across all declared languages
- Section structure equivalence (H2/H3 count)
- SEO element parity (title, meta, schema localization)
- Word count ratio validation (DE should be 25-35% longer than EN, JA 10-25% shorter)
- Freshness tracking (stale translations detected via timestamps)
- Cultural marker scanning (foreign brands, wrong legal references, untranslated elements)
Output: Parity matrix table with per-page scores and prioritized action items.
Locale Format Validation
Load references/locale-formats.md for number, date, currency, address, and phone format
reference tables per locale.
Checks:
- Number format consistency (e.g., "1,000.00" should be "1.000,00" on de-DE pages)
- Date format matches locale expectations
- Currency symbols and placement correct for target market
- Phone numbers use international format with correct country code
Reference Files
Load on-demand as needed (do NOT load all at startup):
references/cultural-profiles.md: DACH, Francophone, Hispanic, Japanese cultural adaptation profiles
references/locale-formats.md: Number, date, currency, address, phone format tables per locale
references/content-parity.md: Content parity audit methodology and scoring
Error Handling
| Scenario |
Action |
| URL unreachable (DNS failure, connection refused) |
Report the error clearly. Do not guess site structure. Suggest the user verify the URL and try again. |
| No hreflang tags found |
Report the absence. Check for other internationalization signals (subdirectories, subdomains, ccTLDs) and recommend the appropriate hreflang implementation method. |
| Invalid language/region codes detected |
List each invalid code with the correct replacement. Provide a corrected hreflang tag set ready to implement. |
| Cultural profile not available for language |
Use the Default Profile checklist from cultural-profiles.md. Note that assessment is based on general guidelines, not a pre-built profile. |
| Content parity directory empty |
Report that no content files were found. Suggest verifying the directory path or providing a URL for live site analysis. |
1---2name: seo-hreflang3description: Hreflang and international SEO audit, validation, and generation. Detects common mistakes, validates language/region codes, and generates correct hreflang implementations. Use when user says "hreflang", "i18n SEO", "international SEO", "multi-language", "multi-region", or "language tags".4license: MIT5---67# Hreflang & International SEO89Validate existing hreflang implementations or generate correct hreflang tags10for multi-language and multi-region sites. Supports HTML, HTTP header, and11XML sitemap implementations.1213## Validation Checks1415### 1. Self-Referencing Tags16- Every page must include an hreflang tag pointing to itself17- The self-referencing URL must exactly match the page's canonical URL18- Missing self-referencing tags cause Google to ignore the entire hreflang set1920### 2. Return Tags21- If page A links to page B with hreflang, page B must link back to page A22- Every hreflang relationship must be bidirectional (A→B and B→A)23- Missing return tags invalidate the hreflang signal for both pages24- Check all language versions reference each other (full mesh)2526### 3. x-default Tag27- Recommended when a selector/fallback URL exists: designates the fallback page for unmatched languages/regions28- Typically points to the language selector page or English version29- Only one x-default per set of alternates30- Must also have return tags from all other language versions3132### 4. Language Code Validation33- Must use ISO 639-1 two-letter codes (e.g., `en`, `fr`, `de`, `ja`)34- An **optional ISO 15924 script subtag** is the documented, official mechanism35 for script: `zh-Hant` (Traditional) / `zh-Hans` (Simplified). Script may36 combine with a region, e.g. `zh-Hans-US` is valid (language + script + region).37- Common errors:38 - `eng` instead of `en` (ISO 639-2, not valid for hreflang)39 - `jp` instead of `ja` (incorrect code for Japanese)40 - `zh` is valid but ambiguous for script-specific pages; prefer `zh-Hans` or `zh-Hant` when targeting a script4142### 5. Region Code Validation43- Optional region qualifier uses ISO 3166-1 Alpha-2 (e.g., `en-US`, `en-GB`, `pt-BR`)44- Format: `language-REGION` (lowercase language, uppercase region)45- A **country code alone is invalid**, you cannot specify a region without a46 language (Google's own bad example is `be`, which is actually the Belarusian47 *language* code, not Belgium).48- Common errors:49 - `en-uk` instead of `en-GB` (UK is not a valid ISO 3166-1 region code)50 - `EU` / `UN` as a region (not valid ISO 3166-1 values)51 - `es-LA` (Latin America is not a country; use specific countries)52 - Region without language prefix5354### 5b. Geo-targeting signal hierarchy55- Practical locale-signal heuristic: **ccTLD > hreflang annotations >56 server location/IP > addresses/language/currency/Business Profile**. Do not57 present this as a confirmed Google ranking order. hreflang is a58 **hint, not a directive**. Google **ignores** locational meta tags and59 HTML geotargeting attributes.60- The Search Console **International Targeting report and the manual61 country-targeting setting were removed in 2022**, do **not** recommend setting62 country targeting in GSC; hreflang is the remaining lever.6364### 5c. Region-specific Search units (EEA, South Africa, Turkiye)65- Google documents Search experiences that exist only in certain countries:66 **aggregator units**, **supplier units**, and carousels for hotel, flight,67 long-distance transport, and product queries shown to users in the EEA,68 South Africa, and Turkiye (documentation added 2026-09-08). Eligibility and69 participation are documented per unit; they are not ranking signals.70- When a site serves those regions with hreflang variants, note in the report71 whether the business is an aggregator or a direct supplier and point to the72 regional documentation, so the client is not surprised by a different result73 layout in those markets.7475### 6. Canonical URL Alignment76- Hreflang tags must only appear on canonical URLs77- If a page has `rel=canonical` pointing elsewhere, hreflang on that page is ignored78- The canonical URL and hreflang URL must match exactly (including trailing slashes)79- Non-canonical pages should not be in any hreflang set8081### 7. Protocol Consistency82- All URLs in an hreflang set must use the same protocol (HTTPS or HTTP)83- Mixed HTTP/HTTPS in hreflang sets causes validation failures84- After HTTPS migration, update all hreflang tags to HTTPS8586### 8. Cross-Domain Support87- Hreflang works across different domains (e.g., example.com and example.de)88- Cross-domain hreflang requires return tags on both domains89- Use Google Search Console verification for monitoring or cross-site sitemap submission when needed90- Sitemap-based implementation recommended for cross-domain setups9192## Common Mistakes9394| Issue | Severity | Fix |95|-------|----------|-----|96| Missing self-referencing tag | Critical | Add hreflang pointing to same page URL |97| Missing return tags (A→B but no B→A) | Critical | Add matching return tags on all alternates |98| Missing x-default when fallback behavior is required | Medium | Add x-default pointing to fallback/selector page |99| Invalid language code (e.g., `eng`) | High | Use ISO 639-1 two-letter codes |100| Invalid region code (e.g., `en-uk`) | High | Use ISO 3166-1 Alpha-2 codes |101| Hreflang on non-canonical URL | High | Move hreflang to canonical URL only |102| HTTP/HTTPS mismatch in URLs | Medium | Standardize all URLs to HTTPS |103| Trailing slash inconsistency | Medium | Match canonical URL format exactly |104| Hreflang in both HTML and sitemap | Low | Choose one method (sitemap preferred for large sites) |105| Language without region when needed | Low | Add region qualifier for geo-targeted content |106107## Implementation Methods108109### Method 1: HTML Link Tags110Best for: Sites with <50 language/region variants per page.111112```html113<link rel="alternate" hreflang="en-US" href="https://example.com/page" />114<link rel="alternate" hreflang="en-GB" href="https://example.co.uk/page" />115<link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />116<link rel="alternate" hreflang="x-default" href="https://example.com/page" />117```118119Place in `<head>` section. Every page must include all alternates including itself.120121### Method 2: HTTP Headers122Best for: Non-HTML files (PDFs, documents).123124```125Link: <https://example.com/page>; rel="alternate"; hreflang="en-US",126 <https://example.com/fr/page>; rel="alternate"; hreflang="fr",127 <https://example.com/page>; rel="alternate"; hreflang="x-default"128```129130Set via server configuration or CDN rules.131132### Method 3: XML Sitemap (Recommended for large sites)133Best for: Sites with many language variants, cross-domain setups, or 50+ pages.134135See Hreflang Sitemap Generation section below.136137### Method Comparison138| Method | Best For | Pros | Cons |139|--------|----------|------|------|140| HTML link tags | Small sites (<50 variants) | Easy to implement, visible in source | Bloats `<head>`, hard to maintain at scale |141| HTTP headers | Non-HTML files | Works for PDFs, images | Complex server config, not visible in HTML |142| XML sitemap | Large sites, cross-domain | Scalable, centralized management | Not visible on page, requires sitemap maintenance |143144## Hreflang Generation145146### Process1471. **Detect languages**: Scan site for language indicators (URL path, subdomain, TLD, HTML lang attribute)1482. **Map page equivalents**: Match corresponding pages across languages/regions1493. **Validate language codes**: Verify all codes against ISO 639-1 and ISO 3166-11504. **Generate tags**: Create hreflang tags for each page including self-referencing1515. **Verify return tags**: Confirm all relationships are bidirectional1526. **Add x-default**: Set fallback for each page set1537. **Output**: Generate implementation code (HTML, HTTP headers, or sitemap XML)154155## Hreflang Sitemap Generation156157### Sitemap with Hreflang158```xml159<?xml version="1.0" encoding="UTF-8"?>160<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"161 xmlns:xhtml="http://www.w3.org/1999/xhtml">162 <url>163 <loc>https://example.com/page</loc>164 <xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/page" />165 <xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />166 <xhtml:link rel="alternate" hreflang="de" href="https://example.de/page" />167 <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/page" />168 </url>169 <url>170 <loc>https://example.com/fr/page</loc>171 <xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/page" />172 <xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />173 <xhtml:link rel="alternate" hreflang="de" href="https://example.de/page" />174 <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/page" />175 </url>176</urlset>177```178179Key rules:180- Include the `xmlns:xhtml` namespace declaration181- Every `<url>` entry must include ALL language alternates (including itself)182- Each alternate must appear as a separate `<url>` entry with its own full set183- Split at whichever comes first: 50,000 URLs or 50MB uncompressed per sitemap file184185## Output186187### Hreflang Validation Report188189#### Summary190- Total pages scanned: XX191- Language variants detected: XX192- Issues found: XX (Critical: X, High: X, Medium: X, Low: X)193194#### Validation Results195| Language | URL | Self-Ref | Return Tags | x-default | Status |196|----------|-----|----------|-------------|-----------|--------|197| en-US | https://... | ✅ | ✅ | ✅ | ✅ |198| fr | https://... | ❌ | ⚠️ | ✅ | ❌ |199| de | https://... | ✅ | ❌ | ✅ | ❌ |200201### Generated Hreflang Tags202- HTML `<link>` tags (if HTML method chosen)203- HTTP header values (if header method chosen)204- `hreflang-sitemap.xml` (if sitemap method chosen)205206### Recommendations207- Missing implementations to add208- Incorrect codes to fix209- Method migration suggestions (e.g., HTML to sitemap for scale)210211## Cultural Adaptation Assessment212213When analyzing a multi-language site, go beyond technical hreflang validation to assess214whether the content is culturally adapted for each target market.215216Load `references/cultural-profiles.md` for pre-built profiles (DACH, Francophone, Hispanic, Japanese).217218**Assessment steps:**2191. Identify all language versions and their target markets2202. Load the relevant cultural profile(s)2213. Check CTAs match cultural expectations (direct vs indirect)2224. Check trust signals are locale-appropriate (certifications, legal pages)2235. Check for foreign brand references on localized pages2246. Check number/date/currency formatting consistency2257. Flag cultural adaptation issues as Medium severity226227**Output:** Cultural Adaptation Score per language version (0-100) with specific findings.228229## Content Parity Audit230231**Command:** `/seo hreflang audit <directory-or-url>`232233Audit content parity across all language versions of a site or local content directory.234235Load `references/content-parity.md` for the full parity matrix and scoring methodology.236237**What it checks:**238- Page existence across all declared languages239- Section structure equivalence (H2/H3 count)240- SEO element parity (title, meta, schema localization)241- Word count ratio validation (DE should be 25-35% longer than EN, JA 10-25% shorter)242- Freshness tracking (stale translations detected via timestamps)243- Cultural marker scanning (foreign brands, wrong legal references, untranslated elements)244245**Output:** Parity matrix table with per-page scores and prioritized action items.246247## Locale Format Validation248249Load `references/locale-formats.md` for number, date, currency, address, and phone format250reference tables per locale.251252**Checks:**253- Number format consistency (e.g., "1,000.00" should be "1.000,00" on de-DE pages)254- Date format matches locale expectations255- Currency symbols and placement correct for target market256- Phone numbers use international format with correct country code257258## Reference Files259260Load on-demand as needed (do NOT load all at startup):261- `references/cultural-profiles.md`: DACH, Francophone, Hispanic, Japanese cultural adaptation profiles262- `references/locale-formats.md`: Number, date, currency, address, phone format tables per locale263- `references/content-parity.md`: Content parity audit methodology and scoring264265## Error Handling266267| Scenario | Action |268|----------|--------|269| URL unreachable (DNS failure, connection refused) | Report the error clearly. Do not guess site structure. Suggest the user verify the URL and try again. |270| No hreflang tags found | Report the absence. Check for other internationalization signals (subdirectories, subdomains, ccTLDs) and recommend the appropriate hreflang implementation method. |271| Invalid language/region codes detected | List each invalid code with the correct replacement. Provide a corrected hreflang tag set ready to implement. |272| Cultural profile not available for language | Use the Default Profile checklist from cultural-profiles.md. Note that assessment is based on general guidelines, not a pre-built profile. |273| Content parity directory empty | Report that no content files were found. Suggest verifying the directory path or providing a URL for live site analysis. |