International SEO and Hreflang: Setting Up a Multilingual Site

An exporting Turkish manufacturer, a hotel hosting Russian and German guests or a SaaS startup adding English all face one question: which URL structure should each language and country get, and how do you tell Google which page to show to whom?
This article covers the URL structure decision, hreflang syntax, x-default and the hreflang mistakes I see most often in audits. For crawling and indexing fundamentals, the technical SEO guide is a good starting point.
Short answer: In international SEO you first choose a URL structure (ccTLD, subfolder or subdomain), then connect every language version with hreflang. Hreflang must be reciprocal, each page must also list itself, and codes must use ISO 639-1 for language with an optional ISO 3166-1 Alpha-2 region.
ccTLD, subfolder or subdomain?
Google's documentation on multi-regional and multilingual sites compares four options. Budget, team structure and the number of markets drive the choice.
| Structure | Example | Pros | Cons |
|---|---|---|---|
| Country domain (ccTLD) | example.de | Clear geotargeting, easy to separate sites | Expensive, more infrastructure, one country only |
| Subdomain | de.example.com | Easy setup, different server locations possible | Users may not know if “de” means language or country |
| Subfolder | example.com/de/ | Easy setup, same host, low maintenance | Harder to separate sites, single server location |
| URL parameter | example.com?loc=de | — | Not recommended by Google; hard to segment |
The structure I recommend most often is the subfolder: authority accumulates on one domain and maintenance stays simple. A ccTLD makes sense when you have separate legal entities or country teams. Changing an existing structure is a migration project; the site migration SEO guide covers the steps. For folder and slug decisions, see SEO-friendly URL structure.
What hreflang does and does not do
Hreflang tells Google about language or regional versions of the same content. It is just as important to know what it does not do.
Google also advises against automatically redirecting users between language versions based on assumptions, since this can stop both users and Googlebot from seeing all versions. Use a visible language switcher.
Hreflang syntax: code example and rules
Google treats three methods as equivalent: link elements in the HTML head, the HTTP Link header (for non-HTML files such as PDFs) and the XML sitemap. Pick one; using all three adds maintenance with no benefit in Search.
<link rel="alternate" hreflang="tr" href="https://example.com/urunler/celik-raf/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/products/steel-shelf/" />
<link rel="alternate" hreflang="de-DE" href="https://example.com/de/produkte/stahlregal/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/products/steel-shelf/" />The same block must appear in the head of all three pages. The rules:
- The first code is an ISO 639-1 language code (tr, en, de, ru, ar); the region is optional and uses ISO 3166-1 Alpha-2 (DE, AT, GB).
- A region code cannot stand alone: “DE” is invalid, while “de-DE” or “de” are valid.
- URLs must be fully qualified including the protocol; relative paths like “/en/” are invalid.
- Every page lists itself (self-referencing) and the other page links back; non-reciprocal annotations are ignored.
- Codes such as “UK” or “EU” have no effect in Google Search; use en-GB for the United Kingdom.
When should you use x-default?
x-default is the fallback page shown when no version matches the user's browser language. According to Google's documentation, it works best for language selector pages or entry pages that redirect automatically.
If you have no selector page, I usually make the version with the broadest audience (English for most Turkish exporters) the x-default. Making the Turkish version x-default can lead to a Brazilian user who does not read Turkish landing on a Turkish page.
An example multilingual site structure
In the subfolder structure below, the three language versions of each product page form one hreflang cluster. Turkish sits at the root and other languages live in their own folders.
- / (Turkish, hreflang=tr)
- /urunler/celik-raf/
- /iletisim/
- /en/ (hreflang=en, x-default)
- /en/products/steel-shelf/
- /en/contact/
- /de/ (hreflang=de-DE)
- /de/produkte/stahlregal/
- /de/kontakt/
Localised slugs are clearer for users but harder to map. Store each item's language counterparts in a CMS field and generate hreflang tags from that relationship rather than by hand. I set up this model often in B2B manufacturer SEO projects for export-focused sites.
Common hreflang mistakes
- Each version lists itself and all other versions
- Canonical points to the page's own language version
- URLs in hreflang return 200 and are indexable
- Valid codes such as en-GB or de-AT
- One-way links from the Turkish page only
- Every language's canonical points to the Turkish page
- Redirected or noindex URLs in hreflang
- Invalid codes such as “uk” or “tr-TU”
The costliest mistake is pointing the canonical of every language version to the main language: Google may then treat the other versions as duplicates and drop them from the index. Old, redirected URLs left in hreflang after a migration are also common; I explain redirect logic in 301 vs 302 redirects.
How to test your hreflang setup
- Crawl the siteCrawl every language folder with a site crawler and export the hreflang report.
- Check reciprocityFilter out pages with no return link or no self-reference.
- Match status codesEvery URL in hreflang should return 200, with no noindex or redirect.
- Inspect rendered HTMLVerify tags injected by JavaScript in the rendered HTML of URL Inspection.
- Monitor resultsUse the country filter in the Performance report to see whether the right version is shown.
I compare crawlers for this job in SEO audit tools compared. For setting up or auditing a multilingual site, see SEO consulting or book a free intro call.
Frequently Asked Questions
Does hreflang replace the HTML lang attribute?
No, they do different jobs. The lang attribute tells browsers and screen readers the page language, while hreflang pairs alternate versions. Google states it uses neither to detect language and relies on visible content instead.
Do I need separate pages for two countries in the same language?
If prices, currency, shipping or legal information differ, separate versions such as en-US and en-GB make sense. If the content is identical, a single “en” version is usually enough.
Is it a problem to launch language versions with machine translation?
Unreviewed machine translation can drift into scaled content that adds no value for users. A native speaker should edit it and adapt terms to local searches.
Should hreflang go in the sitemap or the HTML?
Google treats both as equivalent. With many languages and pages, a sitemap keeps the head section lean; on sites with few languages and CMS support, HTML is easier to audit.
Do hreflang errors lower rankings?
Faulty annotations usually lead to being ignored rather than a penalty. But wrong canonicals or one-way tags can cause the wrong language version to show or some versions not to be indexed.
Should I redirect users by IP address to a language version?
Google does not recommend it; since Googlebot mostly crawls from the US, it may never see the other versions. Showing a suggestion banner and letting the user choose is the safer approach.

8+ years of hands-on SEO and GEO experience across 150+ projects in e-commerce, SaaS, healthcare and local business sectors. Writes based on real client data, not theory.