seo-hreflang skill (claude-seo)
- Install
- SKILL.md (verbatim)
- Validation Checks
- 1. Self-Referencing Tags
- 2. Return Tags
- 3. x-default Tag
- 4. Language Code Validation
- 5. Region Code Validation
- 5b. Geo-targeting signal hierarchy
- 6. Canonical URL Alignment
- 7. Protocol Consistency
- 8. Cross-Domain Support
- Common Mistakes
- Implementation Methods
- Method 1: HTML Link Tags
- Method 2: HTTP Headers
- Method 3: XML Sitemap (Recommended for large sites)
- Method Comparison
- Hreflang Generation
- Process
- Hreflang Sitemap Generation
- Sitemap with Hreflang
- Output
- Hreflang Validation Report
- Generated Hreflang Tags
- Recommendations
- Cultural Adaptation Assessment
- Content Parity Audit
- Locale Format Validation
- Reference Files
- Error Handling
- Other files in this skill
- references/content-parity.md (verbatim)
- Content Parity Matrix
- Freshness Tracking
- Word Count Ratio Validation
- Cultural Adaptation Quality Gates
- Parity Score Calculation
- Output Format
- references/cultural-profiles.md (verbatim)
- DACH Region (DE, AT, CH)
- Francophone (FR, BE, CA-FR, CH-FR)
- Hispanic (ES, LATAM)
- Japanese (JA)
- Default Profile (Unlisted Languages)
- How to Use in Analysis
- references/locale-formats.md (verbatim)
- Number Formats
- Date Formats
- Currency Formats
- Address Formats
- Phone Formats
- Text Expansion Ratios (vs English)
- Validation Rules
- references/machine-translation-qa.md (verbatim)
- Signals the seo-hreflang audit should surface
- What the audit should NOT flag
- Cross-skill delegation
- Primary sources
What it does. 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". Part of seo skill (claude-seo: 25 sub-skills, 18 sub-agents) (AgriciDaniel/claude-seo).
| Upstream | AgriciDaniel/claude-seo |
| Skill file | skills/seo-hreflang/SKILL.md |
| License | MIT (skill folder LICENSE.txt) |
| Author | Daniel Agrici |
| Fetched | 2026-09-10 |
Install
- Claude Code:
/plugin marketplace add AgriciDaniel/claude-seo; other agents:npx skills add AgriciDaniel/claude-seo --skill seo-hreflang. - Raw file:
curl -sL https://raw.githubusercontent.com/AgriciDaniel/claude-seo/HEAD/skills/seo-hreflang/SKILL.md
SKILL.md (verbatim)
name: seo-hreflang
description: >
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".
user-invocable: true
argument-hint: "[url]"
license: MIT
metadata:
author: AgriciDaniel
version: "2.2.6"
category: seo
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-USis valid (language + script + region). - Common errors:
enginstead ofen(ISO 639-2, not valid for hreflang)jpinstead ofja(incorrect code for Japanese)zhis valid but ambiguous for script-specific pages; preferzh-Hansorzh-Hantwhen 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-ukinstead ofen-GB(UK is not a valid ISO 3166-1 region code)EU/UNas 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.
6. Canonical URL Alignment
- Hreflang tags must only appear on canonical URLs
- If a page has
rel=canonicalpointing 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:xhtmlnamespace 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 profilesreferences/locale-formats.md: Number, date, currency, address, phone format tables per localereferences/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. |
Other files in this skill
- LICENSE.txt
- references/content-parity.md
- references/cultural-profiles.md
- references/locale-formats.md
- references/machine-translation-qa.md
references/content-parity.md (verbatim)
Content Parity Audit for Multi-Language Sites
Load this reference when auditing content parity across language versions of a site. Content parity ensures all language versions provide equivalent value and SEO signals.
Original concept: Chris Muller (Pro Hub Challenge)
Content Parity Matrix
For each page that exists in multiple languages, check:
| Dimension | What to Compare | Acceptable Variance | Severity if Failing |
|---|---|---|---|
| Page existence | Does equivalent page exist in all declared languages? | 0% — all declared languages must have the page | High |
| Section structure | Same number of H2/H3 sections? | ±1 section allowed | Medium |
| FAQ items | Same number of FAQ questions? | ±2 items allowed | Medium |
| Images | Same number of images with localized alt text? | Must match exactly | Medium |
| Charts/SVGs | Charts present in all versions? | Must match exactly | Low |
| Word count | Proportional to language expansion ratio? | ±30% of expected ratio | Low |
| Schema markup | JSON-LD present and localized in all versions? | Must match type and key properties | High |
| Title tag | Localized with target keyword in local language? | Must be localized, not English | High |
| Meta description | Localized and within character limits? | Must be localized | Medium |
Freshness Tracking
Detect stale translations by comparing:
- File modification timestamps: If EN version was updated after DE version, DE may be stale
- Frontmatter dates: Compare
date_modifiedorlastmodacross language versions - Content hash comparison: If the source language content hash changed since last translation
Freshness delta thresholds:
- Fresh: Translated within 7 days of source update → OK
- Aging: 8-30 days since source update → Low priority update
- Stale: 31-90 days since source update → Medium priority update
- Outdated: 90+ days since source update → High priority update
Word Count Ratio Validation
Expected word count ratios vs English source:
| Target Language | Expected Ratio | Acceptable Range |
|---|---|---|
| German (DE) | 1.25-1.35x | 1.10-1.50x |
| French (FR) | 1.15-1.25x | 1.00-1.40x |
| Spanish (ES) | 1.15-1.25x | 1.00-1.40x |
| Japanese (JA) | 0.75-0.90x | 0.60-1.00x |
| Chinese (ZH) | 0.70-0.80x | 0.55-0.95x |
A German translation that is shorter than the English original likely has missing content. A Japanese translation that is longer than English likely has unnecessary padding.
Cultural Adaptation Quality Gates
Beyond direct translation, check for cultural markers that indicate proper localization:
| Check | What to Look For | Severity |
|---|---|---|
| Foreign brand references | US-specific brands on non-US pages (e.g., "Walmart" on de-DE) | Medium |
| Foreign statistics | US-only data cited on localized pages (e.g., "80% of Americans") | Medium |
| CTA aggressiveness | Aggressive CTAs on formal-culture pages (e.g., "BUY NOW!" on ja-JP) | Low |
| Legal references | Wrong jurisdiction laws cited (e.g., CCPA on de-DE instead of DSGVO) | High |
| Currency/unit mismatch | USD prices on EUR pages, imperial units on metric pages | High |
| Untranslated elements | English text remaining in navigation, buttons, alt text, schema | Medium |
Parity Score Calculation
Score out of 100:
- Page existence parity: 30 points
- SEO element parity (title, meta, schema): 30 points
- Content structure parity (sections, images, FAQ): 25 points
- Freshness parity: 15 points
Interpretation:
- 90-100: Excellent parity across all language versions
- 70-89: Good parity with minor gaps to address
- 50-69: Significant parity issues affecting some language versions
- Below 50: Major parity failures requiring immediate attention
Output Format
Present as a matrix table:
| Page | EN | DE | FR | ES | JA | Parity Score |
|------|----|----|----|----|----| -------------|
| /about | ✅ | ✅ | ✅ | ❌ | ✅ | 80/100 |
| /pricing | ✅ | ✅ | ⚠️ | ❌ | ❌ | 45/100 |
references/cultural-profiles.md (verbatim)
Cultural Adaptation Profiles for International SEO
Load this reference when analyzing multi-language sites or generating hreflang implementations. Profiles guide cultural assessment beyond technical validation.
Original concept: Chris Muller (Pro Hub Challenge)
DACH Region (DE, AT, CH)
| Dimension | Guideline |
|---|---|
| Formality | High. Use "Sie" (formal you). Professional tone expected. |
| Humor | Conservative. Avoid sarcasm and wordplay in CTAs. |
| CTA Style | Indirect preferred. "Jetzt entdecken" over "Jetzt kaufen". |
| Trust Signals | Certifications (TUV, ISO), "Datenschutz" (privacy), Impressum required by law. |
| Legal | Impressum page mandatory. DSGVO (GDPR). Widerrufsrecht (right of withdrawal). |
| Number Format | 1.000,00 (dot for thousands, comma for decimal) |
| Date Format | DD.MM.YYYY |
| Currency | EUR (DE/AT), CHF (CH) |
| Color Symbolism | Blue = trust, Green = eco/nature, Red = caution (not urgency) |
| Brand Substitution | Walmart → MediaMarkt, Home Depot → Hornbach, Amazon → Otto/Zalando |
| Word Expansion | +25-35% vs English (plan for longer headlines and button text) |
Francophone (FR, BE, CA-FR, CH-FR)
| Dimension | Guideline |
|---|---|
| Formality | Medium-high. "Vous" default. "Tu" only for youth/casual brands. |
| Humor | Appreciated when sophisticated. Avoid blunt/direct humor. |
| CTA Style | Elegant phrasing. "Decouvrir nos solutions" over "Achetez maintenant". |
| Trust Signals | "Fabrique en France" (made in France), professional certifications, press mentions. |
| Legal | Mentions legales required. CNIL (data protection). CGV (terms). |
| Number Format | 1 000,00 (space for thousands, comma for decimal) |
| Date Format | DD/MM/YYYY |
| Currency | EUR (FR/BE), CAD (CA-FR), CHF (CH-FR) |
| Color Symbolism | Blue = stability, White = purity/luxury, Red = passion |
| Brand Substitution | Walmart → Carrefour, Amazon → Fnac/Cdiscount, Target → Leclerc |
| Word Expansion | +15-25% vs English |
Hispanic (ES, LATAM)
| Dimension | Guideline |
|---|---|
| Formality | Varies by country. Spain: "Usted" formal. LATAM: mixed. |
| Humor | Warm and relational. Self-deprecating humor accepted. |
| CTA Style | Warm, personal. "Empieza tu viaje" over "Comprar ahora". |
| Trust Signals | Community proof, family/relationship themes, celebrity endorsements popular. |
| Legal | LOPD (Spain data protection). Each LATAM country has own regulations. |
| Number Format | Spain: 1.000,00 / LATAM: varies by country |
| Date Format | DD/MM/YYYY (most), DD-MM-YYYY (some LATAM) |
| Currency | EUR (ES), regional currencies (MXN, ARS, COP, CLP, PEN) |
| Color Symbolism | Red = energy/passion, Yellow = warmth, Blue = trust |
| Brand Substitution | Walmart → Mercadona (ES) / Coppel (MX), Amazon → MercadoLibre |
| Word Expansion | +15-25% vs English |
Japanese (JA)
| Dimension | Guideline |
|---|---|
| Formality | Very high. Keigo (honorific language) expected in business. |
| Humor | Subtle. Avoid direct humor in B2B. Kawaii (cute) elements acceptable in B2C. |
| CTA Style | Subtle and polite. "Otoiawase" (inquire) over direct "buy now". |
| Trust Signals | Company longevity, ISO certifications, endorsements from recognized institutions. |
| Legal | APPI (Act on Protection of Personal Information). Tokutei Shotorihiki law. |
| Number Format | 1,000 (comma for thousands, no decimal in most contexts) |
| Date Format | YYYY/MM/DD or YYYY年MM月DD日 |
| Currency | JPY (no decimals) |
| Color Symbolism | White = purity, Red = vitality/celebration, Black = formality |
| Brand Substitution | Amazon → Rakuten, Google Shopping → Yahoo! Shopping Japan |
| Word Contraction | -10-25% vs English (Japanese is more compact) |
Default Profile (Unlisted Languages)
When analyzing a locale without a pre-built profile above:
- Research formality norms: Check if the language has formal/informal registers (e.g., Korean has 7 speech levels)
- Check text direction: LTR vs RTL (Arabic, Hebrew, Farsi, Urdu)
- Verify number/date formats: Use CLDR (Unicode Common Locale Data Repository)
- Research legal requirements: Privacy law, business registration, consumer protection
- Check word expansion ratio: Germanic/Slavic languages expand, CJK languages contract
- Verify currency and payment preferences: Local payment methods may need mention
- Research color meanings: Colors have different cultural associations globally
How to Use in Analysis
When running /seo hreflang on a multi-language site:
- Identify all language versions and their target markets
- Load the relevant cultural profile(s)
- Check that CTAs, trust signals, and legal pages match the cultural expectations
- Flag mismatches as "Cultural Adaptation" findings (Medium severity)
- Check number/date/currency formatting consistency within each locale version
references/locale-formats.md (verbatim)
Locale Format Reference for International SEO
Load this reference when validating content parity or generating localized content. Mismatched formats (e.g., US date format on a German page) signal poor localization and reduce user trust.
Original concept: Chris Muller (Pro Hub Challenge)
Number Formats
| Locale | Thousands | Decimal | Example |
|---|---|---|---|
| en-US | , | . | 1,234.56 |
| en-GB | , | . | 1,234.56 |
| de-DE | . | , | 1.234,56 |
| de-AT | . | , | 1.234,56 |
| de-CH | ' | . | 1'234.56 |
| fr-FR | (space) | , | 1 234,56 |
| fr-CA | (space) | , | 1 234,56 |
| es-ES | . | , | 1.234,56 |
| es-MX | , | . | 1,234.56 |
| ja-JP | , | . | 1,234 |
| pt-BR | . | , | 1.234,56 |
| it-IT | . | , | 1.234,56 |
| nl-NL | . | , | 1.234,56 |
| ko-KR | , | . | 1,234 |
| zh-CN | , | . | 1,234.56 |
Date Formats
| Locale | Format | Example |
|---|---|---|
| en-US | MM/DD/YYYY | 04/14/2026 |
| en-GB | DD/MM/YYYY | 14/04/2026 |
| de-DE | DD.MM.YYYY | 14.04.2026 |
| fr-FR | DD/MM/YYYY | 14/04/2026 |
| es-ES | DD/MM/YYYY | 14/04/2026 |
| ja-JP | YYYY/MM/DD or YYYY年MM月DD日 | 2026/04/14 |
| pt-BR | DD/MM/YYYY | 14/04/2026 |
| ko-KR | YYYY.MM.DD | 2026.04.14 |
| zh-CN | YYYY年MM月DD日 | 2026年04月14日 |
Currency Formats
| Locale | Symbol | Placement | Example |
|---|---|---|---|
| en-US | $ | Before | $1,234.56 |
| en-GB | £ | Before | £1,234.56 |
| de-DE | € | After (space) | 1.234,56 € |
| fr-FR | € | After (space) | 1 234,56 € |
| es-ES | € | After (space) | 1.234,56 € |
| ja-JP | ¥ | Before | ¥1,234 |
| pt-BR | R$ | Before | R$ 1.234,56 |
| ko-KR | ₩ | Before | ₩1,234 |
| zh-CN | ¥ | Before | ¥1,234.56 |
| de-CH | CHF | Before | CHF 1'234.56 |
Address Formats
| Region | Order | Example |
|---|---|---|
| US/CA | Street, City, State ZIP | 123 Main St, Austin, TX 78701 |
| UK | Street, City, Postcode | 10 Downing St, London, SW1A 2AA |
| DE/AT | Street Nr, PLZ City | Hauptstr. 1, 10115 Berlin |
| FR | Street, Code Postal City | 1 Rue de Rivoli, 75001 Paris |
| JP | Postal City District Street | 〒100-0001 東京都千代田区千代田1-1 |
Phone Formats
| Region | Format | Example |
|---|---|---|
| US | +1 (XXX) XXX-XXXX | +1 (512) 555-0123 |
| UK | +44 XXXX XXXXXX | +44 2071 234567 |
| DE | +49 XXX XXXXXXX | +49 30 12345678 |
| FR | +33 X XX XX XX XX | +33 1 23 45 67 89 |
| JP | +81 X-XXXX-XXXX | +81 3-1234-5678 |
Text Expansion Ratios (vs English)
| Language | Expansion | Impact |
|---|---|---|
| German | +25-35% | Longer headlines, buttons, navigation labels |
| French | +15-25% | Moderate expansion |
| Spanish | +15-25% | Moderate expansion |
| Italian | +15-25% | Moderate expansion |
| Portuguese | +15-25% | Moderate expansion |
| Dutch | +10-20% | Slight expansion |
| Japanese | -10-25% | Contraction (more compact) |
| Korean | -10-20% | Contraction |
| Chinese | -20-30% | Significant contraction |
Validation Rules
When checking locale format consistency:
- Scan for number patterns on the page (prices, statistics, measurements)
- Compare against the expected format for the page's declared language
- Flag US-format numbers on non-US pages (e.g., "$1,234.56" on a de-DE page)
- Check date formats in blog posts, copyright notices, update timestamps
- Verify currency symbols match the target market
- Check that phone numbers use international format with correct country code
references/machine-translation-qa.md (verbatim)
Machine-translation QA flag (September 11, 2025 QRG)
Google's January 23, 2025 Quality Rater Guidelines update added explicit language about machine-translated content with no human review as a form of scaled content abuse (§4.6.5). This is also the enforceable webmaster-facing spam policy (updated 2026-05-15), which names "automated transformations like synonymizing, translating, or other obfuscation techniques" as scaled content abuse: https://developers.google.com/search/docs/essentials/spam-policies
"Using automated tools (generative AI or otherwise) as a low-effort way to produce many pages that add little-to-no value."
Machine-translated content is fine when reviewed by a human speaker and corrected. Untranslated MT — or "lightly post-edited" output that still contains hallucinated terms, wrong gender/number agreement, or untranslated proper nouns — is treated as scaled content abuse.
Signals the seo-hreflang audit should surface
| Signal | Severity | Notes |
|---|---|---|
Multiple hreflang alternates point to URLs whose content is identical except for header chrome |
Critical | Indicates the body wasn't translated; just template wrapped. |
lang="xx" attribute on <html> doesn't match the body language |
High | Translation pipeline output without a final QA step. |
Auto-translated <meta name="description"> longer than 160 chars (untrimmed) |
Medium | The translator overran the snippet limit — no human reviewer caught it. |
lang attribute is auto or missing entirely |
Medium | Pages that don't declare their language confuse hreflang + AI crawlers. |
| Untranslated proper nouns or product names sprinkled in body | Low (heuristic) | Common MT failure mode; hard to detect automatically. |
Schema.org inLanguage field absent or wrong |
Medium | Multi-language audits should cross-check inLanguage vs. body. |
What the audit should NOT flag
- Sites that have a few MT pages clearly labelled as MT (a human-translation-fallback pattern). Google's QRG explicitly permits MT when honestly labelled and clearly scoped.
- Machine-translated UI strings — those are i18n, not "content".
- Content with
lang="auto"if the audit can't fetch a fallback signal (be conservative; don't claim what we can't verify).
Cross-skill delegation
- For per-page hreflang validation, stay inside
seo-hreflang. - For broader scaled-content scoring (entropy of translated pages,
AI-pattern detection in body), defer to
seo-contentvia"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run content_quality.py. - For "is this translated by Google's own auto-translate widget"
detection, look for the
.goog-te-banner-frameiframe. There is no per-mechanism exemption: in June 2025 Google removed the robots.txt-blocking guidance for auto-translated pages, and auto/AI- translated content is now judged case-by-case on user value. Use page-levelnoindexfor low-value translated pages, not sitewide blocks; the widget also produces poor passage-citability.
Primary sources
- Current QRG (September 11, 2025; 182 pages; nothing newer through 2026-07-09): https://services.google.com/fh/files/misc/hsw-sqrg.pdf
- John Mueller on MT (multiple SOTR episodes, 2024-2025): MT is OK when reviewed by a human; bulk MT without review is abuse.
Last verified: 2026-07-09.
Back to seo skill (claude-seo: 25 sub-skills, 18 sub-agents) or Agent skills.