International SEO that avoids self-inflicted wounds: hreflang setup and common errors, region versus language targeting, URL structure choice, localized content that is more than a translation, and measuring performance per region. Use when a site serves more than one language or country, when the wrong country version ranks or converts, when adding a new locale, or when auditing hreflang tags in HTML, HTTP headers, or a sitemap. Standalone and tool neutral.
./install.sh international-seoname: "international_seo" description: "International SEO that avoids self-inflicted wounds: hreflang setup and common errors, region versus language targeting, URL structure choice, localized content that is more than a translation, and measuring performance per region. Use when a site serves more than one language or country, when the wrong country version ranks or converts, when adding a new locale, or when auditing hreflang tags in HTML, HTTP headers, or a sitemap. Standalone and tool neutral."
Get the right version of a page in front of the right searcher, and keep it that way. Most international SEO damage is self-inflicted: a cluster where one page forgets to link back, a country code that does not exist, every locale canonicalized to the home market, or twenty translated pages for countries the business cannot ship to. This skill works in a fixed order: decide whether a separate version should exist at all, pick the targeting level and URL structure, build one complete hreflang cluster, validate it with the bundled checker, then measure each locale on its own. It follows Google Search Central guidance on localized versions and multi-regional sites, and it says plainly where that guidance ends and judgment begins.
references/codes-and-targeting.md: does the offer differ by country, by one specific country, or only by writing system? Language only (es) is the default. Add a region (es-MX) only when price, currency, shipping, legal terms, availability, or terms of sale actually differ for that country. Use a script (zh-Hans, zh-Hant) when pages differ by writing system. If nothing differs, do not build the version. A single version site needs no hreflang at all.x-default. Values follow one pattern: ISO 639-1 language first in lowercase, optional ISO 15924 script in title case, optional ISO 3166-1 Alpha 2 region in uppercase. The United Kingdom is en-GB, never en-UK, because UK is a reserved code with no effect in Google Search. EU and UN are reserved the same way. A region alone is invalid, and numeric regions such as es-419 are not supported by Google. For Latin American Spanish, ship one es page or one page per country where the offer differs. Full code rules and worked traps are in references/codes-and-targeting.md.xhtml:link entries in an XML sitemap, and it treats the three as equivalent. There is no benefit in using more than one at once, and split methods drift apart. Use HTML tags for small sites where templates are easy to control, sitemaps for large sites or many locales where head tags get heavy and templates are owned by another team, and HTTP headers mainly for non HTML files such as PDFs. Generate both forms with python3 bin/hreflang_check.py generate variants.json and compare against what the site actually ships.examples/pricing-cluster.json, then run python3 bin/hreflang_check.py check cluster.json. The checker flags invalid and reserved codes, missing self references, alternate sets that differ between pages, missing return tags among the supplied pages, duplicate values, relative URLs, canonical conflicts, mixed protocols, and a missing x-default as a warning. Run python3 bin/hreflang_check.py demo first to see a clean three region cluster pass and a broken cluster fail on six errors. Then spot check the live pages: view the raw server HTML, not only the rendered page, because tags injected late by scripts may not be in the first response a crawler reads. Targets outside the export file get a warning, not a pass, so export the whole cluster.references/localization-and-measurement.md: full language coverage including forms and emails, keyword research done in the locale, local currency and formats, an offer that is true for that country, local trust signals, and a fluent regional review of the final page. Keep one language for content and navigation on each page, since Google judges language from visible content. Do not auto redirect visitors based on a guessed language or location. It can block both users and crawlers from reaching every version. Put a visible language and region switcher on every locale page instead.html lang attribute and the content-language meta tag, so set html lang correctly on every locale page as a matter of course. That costs nothing and helps accessibility tools at the same time. Do not promise a ranking effect on any engine from these tags. Hreflang is a hint about which version to serve, not a directive and not a ranking boost.references/localization-and-measurement.md. Re-run the validator after any template, CMS, domain, or protocol change and after every new locale launch, because clusters break at change points.A finished international SEO job delivers all of these:
bin/hreflang_check.py, with the checker output kept.references/localization-and-measurement.md, with clicks, impressions, position, wrong version findings, and one named next action per locale.x-default. If a market cannot be expressed in those sets, say so and use the language only form or per country pages.publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e
No ratings yet — be the first to rate it.