SEO hreflang

01What is it?
Validate existing hreflang implementations or generate correct hreflang tags for multi-language and multi-region sites. Its edge is a particular angle on search and SEO workflows, giving the agent tighter constraints than a plain SEO hreflang request.
02Inputs
Context for search and SEO workflows: your goals, audience, constraints, and any source material the skill asks for.
03Output
A ready-to-use result for search and SEO workflows: the analysis, copy, or recommendations the agent produces.
Install-only

Install as a package

Installs this one skill package for your coding agent, including any supporting files that skill ships with — not every skill in the repository. Read the tutorial.

Terminal
$ npx skills add agricidaniel/claude-seo --skill seo-hreflang

Skill instructions

The instruction file for this skill. The skill also includes other files you need to install to use it.

SKILL.md

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

  • Required: 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)
  • Common errors:
    • eng instead of en (ISO 639-2, not valid for hreflang)
    • jp instead of ja (incorrect code for Japanese)
    • zh without region qualifier (ambiguous; use zh-Hans or zh-Hant)

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)
  • Common errors:
    • en-uk instead of en-GB (UK is not a valid ISO 3166-1 code)
    • es-LA (Latin America is not a country; use specific countries)
    • Region without language prefix

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
  • Verify both domains are verified in Google Search Console
  • Sitemap-based implementation recommended for cross-domain setups

Common Mistakes

IssueSeverityFix
Missing self-referencing tagCriticalAdd hreflang pointing to same page URL
Missing return tags (A→B but no B→A)CriticalAdd matching return tags on all alternates
Missing x-defaultHighAdd x-default pointing to fallback/selector page
Invalid language code (e.g., eng)HighUse ISO 639-1 two-letter codes
Invalid region code (e.g., en-uk)HighUse ISO 3166-1 Alpha-2 codes
Hreflang on non-canonical URLHighMove hreflang to canonical URL only
HTTP/HTTPS mismatch in URLsMediumStandardize all URLs to HTTPS
Trailing slash inconsistencyMediumMatch canonical URL format exactly
Hreflang in both HTML and sitemapLowChoose one method (sitemap preferred for large sites)
Language without region when neededLowAdd 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

MethodBest ForProsCons
HTML link tagsSmall sites (<50 variants)Easy to implement, visible in sourceBloats <head>, hard to maintain at scale
HTTP headersNon-HTML filesWorks for PDFs, imagesComplex server config, not visible in HTML
XML sitemapLarge sites, cross-domainScalable, centralized managementNot visible on page, requires sitemap maintenance

Hreflang Generation

Process

  1. Detect languages: Scan site for language indicators (URL path, subdomain, TLD, HTML lang attribute)
  2. Map page equivalents: Match corresponding pages across languages/regions
  3. Validate language codes: Verify all codes against ISO 639-1 and ISO 3166-1
  4. Generate tags: Create hreflang tags for each page including self-referencing
  5. Verify return tags: Confirm all relationships are bidirectional
  6. Add x-default: Set fallback for each page set
  7. 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 50,000 URLs 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

LanguageURLSelf-RefReturn Tagsx-defaultStatus
en-UShttps://...
frhttps://...⚠️
dehttps://...

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:

  1. Identify all language versions and their target markets
  2. Load the relevant cultural profile(s)
  3. Check CTAs match cultural expectations (direct vs indirect)
  4. Check trust signals are locale-appropriate (certifications, legal pages)
  5. Check for foreign brand references on localized pages
  6. Check number/date/currency formatting consistency
  7. 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

ScenarioAction
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 foundReport the absence. Check for other internationalization signals (subdirectories, subdomains, ccTLDs) and recommend the appropriate hreflang implementation method.
Invalid language/region codes detectedList each invalid code with the correct replacement. Provide a corrected hreflang tag set ready to implement.
Cultural profile not available for languageUse the Default Profile checklist from cultural-profiles.md. Note that assessment is based on general guidelines, not a pre-built profile.
Content parity directory emptyReport that no content files were found. Suggest verifying the directory path or providing a URL for live site analysis.

Supporting file: LICENSE.txt

MIT License - see repository root LICENSE file for complete terms.

Copyright (c) 2026 AgriciDaniel
https://github.com/AgriciDaniel/claude-seo

Supporting file: references/content-parity.md

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:

DimensionWhat to CompareAcceptable VarianceSeverity if Failing
Page existenceDoes equivalent page exist in all declared languages?0% — all declared languages must have the pageHigh
Section structureSame number of H2/H3 sections?±1 section allowedMedium
FAQ itemsSame number of FAQ questions?±2 items allowedMedium
ImagesSame number of images with localized alt text?Must match exactlyMedium
Charts/SVGsCharts present in all versions?Must match exactlyLow
Word countProportional to language expansion ratio?±30% of expected ratioLow
Schema markupJSON-LD present and localized in all versions?Must match type and key propertiesHigh
Title tagLocalized with target keyword in local language?Must be localized, not EnglishHigh
Meta descriptionLocalized and within character limits?Must be localizedMedium

Freshness Tracking

Detect stale translations by comparing:

  1. File modification timestamps: If EN version was updated after DE version, DE may be stale
  2. Frontmatter dates: Compare date_modified or lastmod across language versions
  3. 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 LanguageExpected RatioAcceptable Range
German (DE)1.25-1.35x1.10-1.50x
French (FR)1.15-1.25x1.00-1.40x
Spanish (ES)1.15-1.25x1.00-1.40x
Japanese (JA)0.75-0.90x0.60-1.00x
Chinese (ZH)0.70-0.80x0.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:

CheckWhat to Look ForSeverity
Foreign brand referencesUS-specific brands on non-US pages (e.g., "Walmart" on de-DE)Medium
Foreign statisticsUS-only data cited on localized pages (e.g., "80% of Americans")Medium
CTA aggressivenessAggressive CTAs on formal-culture pages (e.g., "BUY NOW!" on ja-JP)Low
Legal referencesWrong jurisdiction laws cited (e.g., CCPA on de-DE instead of DSGVO)High
Currency/unit mismatchUSD prices on EUR pages, imperial units on metric pagesHigh
Untranslated elementsEnglish text remaining in navigation, buttons, alt text, schemaMedium

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 |

Supporting file: references/cultural-profiles.md

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)

DimensionGuideline
FormalityHigh. Use "Sie" (formal you). Professional tone expected.
HumorConservative. Avoid sarcasm and wordplay in CTAs.
CTA StyleIndirect preferred. "Jetzt entdecken" over "Jetzt kaufen".
Trust SignalsCertifications (TUV, ISO), "Datenschutz" (privacy), Impressum required by law.
LegalImpressum page mandatory. DSGVO (GDPR). Widerrufsrecht (right of withdrawal).
Number Format1.000,00 (dot for thousands, comma for decimal)
Date FormatDD.MM.YYYY
CurrencyEUR (DE/AT), CHF (CH)
Color SymbolismBlue = trust, Green = eco/nature, Red = caution (not urgency)
Brand SubstitutionWalmart → 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)

DimensionGuideline
FormalityMedium-high. "Vous" default. "Tu" only for youth/casual brands.
HumorAppreciated when sophisticated. Avoid blunt/direct humor.
CTA StyleElegant phrasing. "Decouvrir nos solutions" over "Achetez maintenant".
Trust Signals"Fabrique en France" (made in France), professional certifications, press mentions.
LegalMentions legales required. CNIL (data protection). CGV (terms).
Number Format1 000,00 (space for thousands, comma for decimal)
Date FormatDD/MM/YYYY
CurrencyEUR (FR/BE), CAD (CA-FR), CHF (CH-FR)
Color SymbolismBlue = stability, White = purity/luxury, Red = passion
Brand SubstitutionWalmart → Carrefour, Amazon → Fnac/Cdiscount, Target → Leclerc
Word Expansion+15-25% vs English

Hispanic (ES, LATAM)

DimensionGuideline
FormalityVaries by country. Spain: "Usted" formal. LATAM: mixed.
HumorWarm and relational. Self-deprecating humor accepted.
CTA StyleWarm, personal. "Empieza tu viaje" over "Comprar ahora".
Trust SignalsCommunity proof, family/relationship themes, celebrity endorsements popular.
LegalLOPD (Spain data protection). Each LATAM country has own regulations.
Number FormatSpain: 1.000,00 / LATAM: varies by country
Date FormatDD/MM/YYYY (most), DD-MM-YYYY (some LATAM)
CurrencyEUR (ES), regional currencies (MXN, ARS, COP, CLP, PEN)
Color SymbolismRed = energy/passion, Yellow = warmth, Blue = trust
Brand SubstitutionWalmart → Mercadona (ES) / Coppel (MX), Amazon → MercadoLibre
Word Expansion+15-25% vs English

Japanese (JA)

DimensionGuideline
FormalityVery high. Keigo (honorific language) expected in business.
HumorSubtle. Avoid direct humor in B2B. Kawaii (cute) elements acceptable in B2C.
CTA StyleSubtle and polite. "Otoiawase" (inquire) over direct "buy now".
Trust SignalsCompany longevity, ISO certifications, endorsements from recognized institutions.
LegalAPPI (Act on Protection of Personal Information). Tokutei Shotorihiki law.
Number Format1,000 (comma for thousands, no decimal in most contexts)
Date FormatYYYY/MM/DD or YYYY年MM月DD日
CurrencyJPY (no decimals)
Color SymbolismWhite = purity, Red = vitality/celebration, Black = formality
Brand SubstitutionAmazon → 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:

  1. Research formality norms: Check if the language has formal/informal registers (e.g., Korean has 7 speech levels)
  2. Check text direction: LTR vs RTL (Arabic, Hebrew, Farsi, Urdu)
  3. Verify number/date formats: Use CLDR (Unicode Common Locale Data Repository)
  4. Research legal requirements: Privacy law, business registration, consumer protection
  5. Check word expansion ratio: Germanic/Slavic languages expand, CJK languages contract
  6. Verify currency and payment preferences: Local payment methods may need mention
  7. Research color meanings: Colors have different cultural associations globally

How to Use in Analysis

When running /seo hreflang on a multi-language site:

  1. Identify all language versions and their target markets
  2. Load the relevant cultural profile(s)
  3. Check that CTAs, trust signals, and legal pages match the cultural expectations
  4. Flag mismatches as "Cultural Adaptation" findings (Medium severity)
  5. Check number/date/currency formatting consistency within each locale version

Supporting file: references/locale-formats.md

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

LocaleThousandsDecimalExample
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

LocaleFormatExample
en-USMM/DD/YYYY04/14/2026
en-GBDD/MM/YYYY14/04/2026
de-DEDD.MM.YYYY14.04.2026
fr-FRDD/MM/YYYY14/04/2026
es-ESDD/MM/YYYY14/04/2026
ja-JPYYYY/MM/DD or YYYY年MM月DD日2026/04/14
pt-BRDD/MM/YYYY14/04/2026
ko-KRYYYY.MM.DD2026.04.14
zh-CNYYYY年MM月DD日2026年04月14日

Currency Formats

LocaleSymbolPlacementExample
en-US$Before$1,234.56
en-GB£Before£1,234.56
de-DEAfter (space)1.234,56 €
fr-FRAfter (space)1 234,56 €
es-ESAfter (space)1.234,56 €
ja-JP¥Before¥1,234
pt-BRR$BeforeR$ 1.234,56
ko-KRBefore₩1,234
zh-CN¥Before¥1,234.56
de-CHCHFBeforeCHF 1'234.56

Address Formats

RegionOrderExample
US/CAStreet, City, State ZIP123 Main St, Austin, TX 78701
UKStreet, City, Postcode10 Downing St, London, SW1A 2AA
DE/ATStreet Nr, PLZ CityHauptstr. 1, 10115 Berlin
FRStreet, Code Postal City1 Rue de Rivoli, 75001 Paris
JPPostal City District Street〒100-0001 東京都千代田区千代田1-1

Phone Formats

RegionFormatExample
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)

LanguageExpansionImpact
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:

  1. Scan for number patterns on the page (prices, statistics, measurements)
  2. Compare against the expected format for the page's declared language
  3. Flag US-format numbers on non-US pages (e.g., "$1,234.56" on a de-DE page)
  4. Check date formats in blog posts, copyright notices, update timestamps
  5. Verify currency symbols match the target market
  6. Check that phone numbers use international format with correct country code

Supporting file: references/machine-translation-qa.md

Machine-translation QA flag (Jan 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).

"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

SignalSeverityNotes
Multiple hreflang alternates point to URLs whose content is identical except for header chromeCriticalIndicates the body wasn't translated; just template wrapped.
lang="xx" attribute on <html> doesn't match the body languageHighTranslation pipeline output without a final QA step.
Auto-translated <meta name="description"> longer than 160 chars (untrimmed)MediumThe translator overran the snippet limit — no human reviewer caught it.
lang attribute is auto or missing entirelyMediumPages that don't declare their language confuse hreflang + AI crawlers.
Untranslated proper nouns or product names sprinkled in bodyLow (heuristic)Common MT failure mode; hard to detect automatically.
Schema.org inLanguage field absent or wrongMediumMulti-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-content via python3 scripts/content_quality.py.
  • For "is this translated by Google's own auto-translate widget" detection, look for the .goog-te-banner-frame iframe; auto- translate widgets are explicitly exempted from MT-scaled-content abuse but produce poor passage-citability anyway.

Primary sources

Last verified: 2026-05-17.

How do I install SEO hreflang in Cursor, Claude Code, or Codex?

Run npx skills add agricidaniel/claude-seo --skill seo-hreflang in the project where you want it, then ask your agent for the skill by name. The --skill flag installs only SEO hreflang, not every skill in the repository.

Where does SEO hreflang come from and what license is it under?

SEO hreflang comes from the agricidaniel/claude-seo repository on GitHub. That repository has 10.3K GitHub stars. The skill is published under the MIT license.

Prefer plain text? Read the SEO hreflang guide as markdown.