Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Validates hreflang tags, multi-language configuration, regional targeting, and internationalisation best practices. Use when auditing sites with multiple languages, regions, or localised content.
.claude/skills/thisisahsaniqbal-international-seo/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 82% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -55% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 24% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -9% | 0% |
Audit the page for multi-language and regional targeting issues.
> When to activate: Only relevant if the site serves multiple languages, regions, or has localised content. If a page is monolingual with no internationalisation signals, report ✅ PASS "No internationalisation issues (single-language site)".
Look for <link rel="alternate" hreflang="..."> in <head>:
| Check | Status | |---|---| | No hreflang tags on a multi-language site | ❌ FAIL "Add hreflang tags to indicate language/region variants" | | Hreflang tags present | ✅ PASS — list all language-region codes found |
| Rule | Violation = | |---|---| | Self-referencing hreflang missing (page must include itself) | ❌ FAIL | | x-default fallback missing | ⚠️ WARN "Add hreflang=\"x-default\" for the default/fallback page" | | Invalid language code (must be ISO 639-1, e.g. en, fr, de) | ❌ FAIL | | Invalid region code (must be ISO 3166-1 alpha-2, e.g. en-US, fr-CA) | ⚠️ WARN | | Hreflang URLs return 4xx or 5xx | ❌ FAIL "Hreflang points to broken URL" | | Duplicate hreflang entries for same language-region | ⚠️ WARN |
| Check | Status | |---|---| | <html lang="..."> missing | ❌ FAIL | | lang value doesn't match hreflang self-reference | ⚠️ WARN "Mismatch between html lang and hreflang" | | Properly set | ✅ PASS |
<meta http-equiv="Content-Language" content="..."> → check if presentlang attribute → ⚠️ WARN if mismatchDetect URL pattern used:
| Pattern | Example | Assessment | |---|---|---| | Subdirectory | /en/, /fr/, /de/ | ✅ Recommended | | Subdomain | en.example.com | ✅ Acceptable | | ccTLD | example.fr, example.de | ✅ Strong geo-targeting | | URL parameter | ?lang=en | ⚠️ WARN "Not recommended — search engines may ignore parameters" |
| Check | Status | |---|---| | Page has lang="en" but content appears in another language | ⚠️ WARN "Language mismatch detected" | | <title> and <meta description> not translated (same across language variants) | ⚠️ WARN | | Images with alt text not translated | ⚠️ WARN |
<meta name="geo.region">, <meta name="geo.placename">, <meta name="geo.position"> → ✅ PASS if present<link rel="canonical"> pointing to regional varianthreflang on some pages but not others → flag inconsistencydir="rtl" attribute on <html> or <body>| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 11,655 | 15,157 | +30% | 1 | 1 | 0% | 1,976 | 3,601 | +82% | 0 | 0 | — |
case-02 | pass→pass | 12,185 | 8,607 | -29% | 1 | 1 | 0% | 2,200 | 2,271 | +3% | 0 | 0 | — |
case-03 | fail→pass | 17,034 | 3,259 | -81% | 1 | 1 | 0% | 3,075 | 1,370 | -55% | 0 | 0 | — |
case-04 | fail→pass | 10,424 | 7,426 | -29% | 1 | 1 | 0% | 2,094 | 2,459 | +17% | 0 | 0 | — |
case-05 | pass→pass | 12,602 | 7,322 | -42% | 1 | 1 | 0% | 2,144 | 2,334 | +9% | 0 | 0 | — |
case-06 | pass→pass | 8,792 | 6,780 | -23% | 1 | 1 | 0% | 1,729 | 2,119 | +23% | 0 | 0 | — |
case-07 | fail→pass | 9,885 | 7,588 | -23% | 1 | 1 | 0% | 1,928 | 2,392 | +24% | 0 | 0 | — |
case-08 | fail→pass | 9,882 | 4,349 | -56% | 1 | 1 | 0% | 1,743 | 1,592 | -9% | 0 | 0 | — |
case-09 | fail→pass | 14,961 | 5,810 | -61% | 1 | 1 | 0% | 2,645 | 2,042 | -23% | 0 | 0 | — |
case-10 | pass→pass | 13,686 | 8,245 | -40% | 1 | 1 | 0% | 2,462 | 2,441 | -1% | 0 | 0 | — |
case-11 | pass→pass | 15,504 | 13,721 | -12% | 1 | 1 | 0% | 2,621 | 3,491 | +33% | 0 | 0 | — |
case-12 | fail→pass | 11,778 | 7,425 | -37% | 1 | 1 | 0% | 2,221 | 2,447 | +10% | 0 | 0 | — |
case-13 | fail→pass | 13,458 | 7,896 | -41% | 1 | 1 | 0% | 2,253 | 2,525 | +12% | 0 | 0 | — |
case-14 | fail→pass | 13,273 | 4,456 | -66% | 1 | 1 | 0% | 2,246 | 1,688 | -25% | 0 | 0 | — |
case-15 | fail→pass | 11,414 | 7,882 | -31% | 1 | 1 | 0% | 2,111 | 2,277 | +8% | 0 | 0 | — |
case-16 | fail→pass | 12,051 | 7,333 | -39% | 1 | 1 | 0% | 2,033 | 2,170 | +7% | 0 | 0 | — |
case-17 | pass→pass | 6,500 | 3,173 | -51% | 1 | 1 | 0% | 917 | 1,362 | +49% | 0 | 0 | — |
case-18 | pass→pass | 14,355 | 9,197 | -36% | 1 | 1 | 0% | 2,239 | 2,611 | +17% | 0 | 0 | — |
case-19 | fail→pass | 14,521 | 6,273 | -57% | 1 | 1 | 0% | 2,441 | 1,931 | -21% | 0 | 0 | — |
case-20 | fail→pass | 17,058 | 9,040 | -47% | 1 | 1 | 0% | 2,859 | 2,509 | -12% | 0 | 0 | — |
case-21 | pass→fail | 16,177 | 15,411 | -5% | 1 | 1 | 0% | 3,157 | 3,567 | +13% | 0 | 0 | — |
case-22 | pass→fail | 12,785 | 10,164 | -21% | 1 | 1 | 0% | 2,217 | 2,541 | +15% | 0 | 0 | — |
case-23 | pass→fail | 16,577 | 9,653 | -42% | 1 | 1 | 0% | 1,944 | 2,730 | +40% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +43 percentage points is the difference between those two pass rates over the 23 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.