DomainLens

Guides

International SEO Checklist: Structure, Hreflang and Targeting

The structure decision is made once and is expensive to change. Everything else in international SEO is downstream of getting it right.

Check your site before you start fixing

Run a fresh DomainLens audit and use the report as your priority list.

Run a free SEO audit

Choosing a URL structure

For most sites the subdirectory is correct. It keeps everything on one domain, so authority accumulates in one place, and it is by far the cheapest to operate. Choose a ccTLD when local trust genuinely matters commercially — a German customer preferring example.de is a real effect, and it costs you a separate site to run.

StructureExampleTrade-off
Subdirectoryexample.com/de/Simplest; shares domain authority
Subdomainde.example.comSeparable hosting; weaker consolidation
ccTLDexample.deStrongest local signal; most expensive
Parameterexample.com?lang=deAvoid — poor signals, easy to break

Language and region are different questions

A site can target a language, a region, or a combination. Spanish for Spain and Spanish for Mexico are the same language and different markets; English for the UK and English for the US likewise.

Decide which axis you are actually varying. Publishing a page per language-region combination when only the language differs creates near-duplicates with nothing to distinguish them, and none of them earn their place.

  • Language only — one page per language, hreflang with a language code.
  • Region only — one page per region, hreflang with language plus region.
  • Both — the full matrix, and only if each cell is genuinely different.
  • Neither — one page. Not every international site needs localisation.

The hreflang rules that break implementations

Three rules cause almost every failure, and all three are mechanical rather than strategic.

  • Reciprocity — every page in the set must list every other, including itself. A missing return link voids the whole annotation.
  • Valid codes — ISO 639-1 for language, ISO 3166-1 for region. "uk" is Ukrainian, not the United Kingdom.
  • Self-canonical — each version canonical to itself. Canonicalising translations to the original removes them from the index.
A correct set, on every page in it
<link rel="canonical" href="https://example.com/de/page">
<link rel="alternate" hreflang="en" href="https://example.com/page">
<link rel="alternate" hreflang="de" href="https://example.com/de/page">
<link rel="alternate" hreflang="es" href="https://example.com/es/page">
<link rel="alternate" hreflang="x-default" href="https://example.com/page">

<!-- Identical on all four URLs. Generate the set from
     one shared list, never per page. -->

Partial translation, handled honestly

Most international sites are partially translated, and the correct handling is to annotate only what genuinely exists. A locale URL serving the original language because no translation was written is a duplicate: canonicalise it to the original and leave it out of the hreflang set. Advertising five language versions when three of them are the English page is worse than advertising two. See hreflang vs canonical and hreflang tags .

Things that are not international SEO

The IP redirect is the most damaging and the most common. Googlebot crawls predominantly from the US, so an IP-based redirect can mean your German pages are never seen.

  • Automatic redirection by IP address — it prevents crawlers and travellers reaching the version they asked for. Offer a suggestion, not a redirect.
  • Machine translation published without review; it ranks badly and reads worse.
  • Duplicating the entire site for a market you have no ability to serve.
  • Geo-targeting in Search Console for a ccTLD, which already carries the signal.

How DomainLens contributes

DomainLens reports the canonical and hreflang annotations a page serves together, which is where the contradictions surface — a translation canonicalised to the original, or an alternate set that does not match between pages. See the HTML lang attribute for the page-level declaration.

Subdirectory, subdomain or ccTLD?
Subdirectory for most sites — cheapest and keeps authority consolidated. A ccTLD when local trust matters commercially and you can run a separate site.
Should I redirect users by IP address?
No. It stops crawlers and travellers reaching the version they requested. Suggest an alternative version instead and let the user choose.
Do I need hreflang for a single-language site?
No. There is nothing to annotate and a one-entry set conveys nothing.
What if only some pages are translated?
Annotate only the languages that genuinely exist per page, and canonicalise untranslated locale URLs to the original.

Related resources