“We have an English, a German and a French version” is a common way to describe an international site. It hides the real question: which markets do you serve?
German is spoken in Germany, Austria and Switzerland, with different currencies, delivery terms, legal mentions and sometimes vocabulary. English covers the US, the UK, Ireland, Australia and many buyers who simply prefer it. A language version is a translation. A market version is an offer adapted to a country.
International SEO goes more smoothly when that distinction is made explicit before any URL or tag is created.
Step 1: decide what you are targeting
Start with a short matrix. For each version you plan, write down:
| Version | Language | Country | Different offer? | Needs its own URLs? |
|---|---|---|---|---|
| English, global | en | none | No | Yes |
| English, UK | en | GB | Prices in GBP, UK delivery | Yes |
| German, Germany | de | DE | EUR, German legal pages | Yes |
| German, Switzerland | de | CH | CHF, Swiss delivery | Yes, if the offer differs |
| French, France | fr | FR | No | Yes |
The rule of thumb: create a market-specific version only when something meaningful changes for the user (price, currency, availability, legal content, contact details). If only the spelling changes, a single language version may be enough.
Step 2: choose a URL structure
Google’s guide to managing multi-regional and multilingual sites compares the main options:
| Structure | Example | Strengths (per Google) | Trade-offs (per Google) |
|---|---|---|---|
| Country-code domain | example.de | Clear geotargeting | Expensive, limited to one country |
| Subdomain | de.example.com | Easy to set up, allows different server locations | Users may not know whether “de” means language or country |
| Subdirectory | example.com/de/ | Easy to set up, low maintenance | Single server location, sections harder to separate |
| URL parameter | example.com?loc=de | Not recommended by Google |
There is no universally best answer. Subdirectories are often the simplest to operate. Country-code domains make sense when you have a strong local brand and local teams. What matters most is consistency: once you pick a pattern such as /de-ch/ versus /de/, use it everywhere.
Step 3: understand how Google picks language and country
Two points surprise many teams.
Language comes from the content. Google states that it does not use code-level language information such as lang attributes or the URL to determine the language of a page, and that it does not use hreflang or the HTML lang attribute to detect it. A “German” page with mostly English content is, for Google, an English page.
Country comes from several signals. For locale targeting, Google lists country-code domains, hreflang annotations, server location and other cues such as local addresses, phone numbers, currency and Business Profile information. It ignores locational meta tags such as geo.position.
That is why a market version needs genuinely local signals, not just a translated menu.
Step 4: implement hreflang correctly
Hreflang tells Google which URLs are equivalent versions of a page for different languages or regions. Google accepts three methods: HTML link tags, HTTP headers, and XML sitemaps. They are equivalent; using more than one adds nothing.
A minimal example for one page in the HTML head:
<link rel="alternate" hreflang="en" href="https://example.com/en/oak-table/" />
<link rel="alternate" hreflang="en-GB" href="https://example.com/en-gb/oak-table/" />
<link rel="alternate" hreflang="de-DE" href="https://example.com/de/eichentisch/" />
<link rel="alternate" hreflang="de-CH" href="https://example.com/de-ch/eichentisch/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />
The rules from Google’s documentation:
- Self-reference: each version must list itself as well as all other versions.
- Return links: if two pages do not both point to each other, the tags are ignored.
- Fully qualified URLs: include the protocol (
https://). Alternates can sit on different domains. - Valid codes: the language uses ISO 639-1, and an optional region uses ISO 3166-1 Alpha 2. You cannot use a country code by itself.
- Scripts: where needed, script codes such as
zh-Hantandzh-Hansare supported.
x-default
The reserved x-default value is used when no other language or region in your set matches the user’s browser setting. It typically points to a language or country selector, or to the version you consider the generic fallback. It is not a language; it is a “none of the above” option.
Common mistakes that make hreflang fail
| Mistake | Why it fails | Fix |
|---|---|---|
hreflang="uk" for the United Kingdom |
uk is the language code for Ukrainian |
Use en-GB |
hreflang="en-UK" |
Google notes that UK has no effect as a region |
Use GB |
hreflang="be" for Belgium |
be is the Belarusian language code |
Use fr-BE or nl-BE |
| Missing return links | Tags are ignored without reciprocity | Generate all annotations from one shared mapping |
| Relative URLs | Alternates must be fully qualified | Output absolute URLs |
| Pointing to redirected or non-indexable URLs | The alternate is not a valid final page | Point to the final, indexable URL |
The last row is good practice rather than a quoted rule: annotating URLs that redirect or are blocked creates confusion that is easy to avoid.
Avoid automatic redirects by location or language
It is tempting to redirect visitors automatically based on IP or browser language. Google advises against it: its crawler usually comes from the USA and does not send an Accept-Language header, so it may never see some variants, and IP location is unreliable. Suggest the right version with a banner, and let users switch freely.
Duplicate content across markets
Translated pages are not duplicates. Google states that localized versions are only considered duplicates if the main content remains untranslated. When the same language serves several countries with near-identical pages (for example en-GB and en-IE), Google recommends choosing a preferred version and using rel=”canonical” and hreflang so searchers get the right one. Adding real local differences (prices, delivery, contact details) also helps each version stand on its own.
Checklist before launching a new market
- The market, not just the language, is defined
- The URL pattern is consistent across the site
- Main content is translated, not only navigation
- Local signals exist: currency, address, phone, legal pages
- Hreflang lists every version, including itself, with return links
- Codes are valid (
en-GB, neveren-UK) x-defaultpoints to a sensible fallback- No automatic redirects based on IP or browser language
How SearchFirefly helps
SearchFirefly’s multi-market views separate Google performance and tracked keywords by country or language, so a market’s results are not hidden inside a global average. AI visibility is measured with questions asked in each market’s language across ChatGPT, Gemini, Perplexity, Google AI Overviews and Google AI Mode, showing which brands and sources each assistant cites per market.