Guide
International SEO: hreflang, domains and folders
How to structure a website for several countries and languages, how hreflang really works, the code to use, and the mistakes that make Google ignore it.
VAULT 33|27 · Updated 12 November 2026 · Reviewed 12 November 2026 · 3 min read
First decide: language, country, or both?
Most businesses mix these up. Language versions serve people who speak differently, for example English and Serbian. Country versions serve markets with different prices, laws or services, for example the UK and Australia. Many service businesses need language versions and only a few country versions.
Choosing a URL structure
| Structure | Example | Strengths | Weaknesses | Best for |
|---|---|---|---|---|
| Country domains | example.rs, example.de | Very clear country signal, strong local trust | Expensive, each domain builds authority separately, more to maintain | Large brands with real teams in each country |
| Folders on one domain | example.com/sr/, example.com/de/ | One domain builds all the authority, simple to run, cheap | Weaker country signal on its own | Most service businesses. Our default |
| Subdomains | sr.example.com | Easy to host separately | Authority often split, more setup | Special cases with separate systems |
| Parameters | example.com?lang=sr | None worth having | Hard for search engines and people | Avoid |
How hreflang works
hreflang tells Google which pages are versions of each other for different languages or regions, so it can show the right one to each searcher. You can declare it in three equivalent ways: tags in the page head, HTTP headers (useful for PDFs), or in your XML sitemap. Use one method; more than one adds nothing.
The rule that breaks most implementations: every version must list every other version and itself. If page A points to page B but B does not point back, Google ignores the tags.
The code
In the head of every language version, include the full set:
<link rel="alternate" hreflang="en" href="https://example.com/services/" />
<link rel="alternate" hreflang="sr" href="https://example.com/sr/usluge/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/leistungen/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/services/" />
The same thing in an XML sitemap, for one page:
<url>
<loc>https://example.com/services/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/services/" />
<xhtml:link rel="alternate" hreflang="sr" href="https://example.com/sr/usluge/" />
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/leistungen/" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/services/" />
</url>
x-default is the fallback for anyone whose language you do not serve, often your English page or a language selector.
Language and region codes
- The language comes first, as a two-letter ISO 639-1 code:
en,sr,de,ru. - A region is optional and comes second, as an ISO 3166-1 code:
en-GB,en-AU,de-AT. - A region alone is invalid.
bemeans Belarusian, not Belgium. - The United Kingdom is
GB, notUK. Google ignores invalid region codes such asUKandEU.
Mistakes we see most often
| Mistake | What happens |
|---|---|
| Missing return links | Google ignores the tags for those pages |
en-UK instead of en-GB |
The region part is ignored |
| hreflang pointing to redirected or noindexed pages | Signals conflict and are often ignored |
| Machine-translated pages published without review | Thin, untrustworthy pages that rarely rank and rarely convert |
| Forcing visitors into a language by IP address | Frustrates travellers and expats, and can stop search engines seeing every version |
Google detects a page's language from its content, not from hreflang or the HTML lang attribute. So a Serbian page must really be written in Serbian, not a mix.
A rollout plan that works
- Choose folders on one domain unless you have a strong reason not to.
- Translate and adapt your best pages first, not the whole site.
- Add hreflang to every version, with return links and
x-default. - Research keywords in each language. People do not search in translated phrases.
- Have a native speaker review every page before it goes live.
- Measure each language separately in Search Console.
Our international SEO service handles the structure, code and adapted content in English, Serbian, German and Russian.
Sources
Open your vault.
A free systems audit of your business: where enquiries leak and exactly what we would build.
Book your free audit