Seo international
Audit and generate hreflang annotations for multilingual sites — check reciprocity, BCP-47 validity, self-reference, x-default, hreflang/canonical conflicts, and <html lang> agreement, and emit reciprocal hreflang link sets. Module M20 (conditional). Feeds the Search SEO score.From its SKILL.md
npx -y skills add Hainrixz/claude-seo-ai --skill seo-internationalAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- runs commandsInstructs the agent to run 1 command, including `node ${CLAUDE_SKILL_DIR}/../../scripts/hreflang-check.mjs --url <u>`.
SKILL.md
4.2 KB, ~1.0k tokens by cl100k_base, as published. Nobody here has run it
seo-international (M20)
hreflang tells search engines which language/region URL to serve. This module is conditional: it only runs when seo-vertical-detect flags a multilingual site (multiple lang/locale URLs, language switcher, or existing hreflang). On monolingual sites every finding is not_applicable at severity 0. Schema-type concerns defer to references/schema-tier1.md; this module owns link-level localization only.
Audits
Working from the PageSnapshot (rendered_dom if present, else raw_html). Read hreflang from <link rel="alternate" hreflang="..."> in <head> (also accept HTTP Link: headers / sitemap xhtml:link when present):
- Reciprocity — if page A declares an alternate B, B must declare A back. One-way hreflang is ignored by Google.
- BCP-47 validity — each
hreflangvalue is a valid language (en) or language-region (en-GB,pt-BR) tag; region is ISO-3166-1 alpha-2, not a country-of-language guess (en-UKis invalid; useen-GB). - Self-reference — the page lists itself in its own hreflang set.
- x-default — at least one
hreflang="x-default"for the language-selector / fallback URL. - hreflang↔canonical conflict — an hreflang URL must be self-canonical; pointing hreflang at a URL whose
rel=canonicalis a different page neutralizes the cluster (cross-check M2/seo-indexability). <html lang>agreement — the documentlangattribute matches the locale this URL targets in its own hreflang entry.
Fixes
- AUTO (
fixable: auto): when the locale→URL map is known (supplied by the user, a sitemap, or discovered alternates), generate a complete reciprocal hreflang link set — every locale + a singlex-default— as a<head>diff forfix. Additive and deterministic. - PROPOSED (
fixable: proposed): a partial set inferred from discovered alternates that needs the user to confirm the locale map before write. - ADVISORY (
fixable: advisory): "this looks multilingual but no locale map exists" — never written by the tool. - Never fabricate locales, region codes, or alternate URLs. If the map is incomplete, leave a clearly-marked
TODO(locale)placeholder and ask the user.
Verification
- Offline:
node ${CLAUDE_SKILL_DIR}/../../scripts/hreflang-check.mjs --url <u>— parses the alternate set, validates BCP-47 tags, and checks reciprocity/self-reference/x-default across the discovered cluster. - Reciprocity requires fetching each declared alternate; when those URLs (or a sitemap tier) are unavailable, status is
needs_api, never a falsepass.
Findings
Findings conform to schema/finding.schema.json. On a confirmed multilingual site severity is 4; otherwise the check is not_applicable at severity 0. Examples:
M20.hreflang.missing_reciprocal— page declareshreflang="de-DE"for a URL that does not point back (status: fail, severity 4,fixable: proposed, axissearch, confidenceestablished).evidence.observedquotes the one-way<link>;verification.reproduceruns the hreflang-check command above.M20.hreflang.invalid_bcp47—hreflang="en-UK"(fail, severity 4,fixable: auto, axissearch, confidenceestablished; recommenden-GB).M20.hreflang.missing_xdefault— cluster has nox-defaultfallback (warn, severity 4,fixable: auto, axissearch, confidencedirectional).M20.hreflang.not_applicable— monolingual site (not_applicable, severity 0).
Honesty
- hreflang is a targeting/clustering signal, not a ranking boost: it selects which existing URL to show in a locale, it does not raise rankings. Don't sell it as a ranking lever.
- hreflang does not fix thin or machine-translated content, and it is not a substitute for
rel=canonical— the two work together. - Bing/Yandex use it weakly to not-at-all; the documented beneficiary is Google. Don't claim cross-engine parity.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.
Gives 0 of the 12 instructions most marketing audience skills give in ~1.0k tokens
Counted across 690 of the 894 authors here whose files we hold, read 2026-08-07
- Apply Poppins font to headingsin 41 of 690, across 6 files
- Apply Lora font to body textin 41 of 690, across 6 files
- Use Arial fallback for headingsin 39 of 690, across 4 files
- Use Georgia fallback for body textin 39 of 690, across 4 files
- Maintain text hierarchy and formattingin 39 of 690, across 4 files
- Use accent colors for non-text shapesin 38 of 690, across 3 files
- Use RGB values for precise color matchingin 38 of 690, across 3 files
- Use brand colors for primary text and backgroundsin 36 of 690, across 1 file
- Read product marketing context file before asking questions, starting, or auditingin 35 of 690, across 23 files
- Use active voice instead of passive voicein 26 of 690, across 10 files
- Implement or generate appropriate JSON-LD structured datain 24 of 690, across 17 files
- Prioritize clarity over clevernessin 22 of 690, across 8 files
Said here and by no other author read
- report needs_api status when required data is unavailable
- emit findings per finding schema
- activate only for multilingual sites
- check reciprocal hreflang declarations
- validate BCP-47 language-region tags
- verify presence of an x-default entry
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.