---
title: "Multilingual SEO: hreflang, x-default and URL structure"
description: "Multilingual SEO from Google's docs: URL options, hreflang and x-default, codes that fail (es-419, en-UK), safe language redirects and a launch checklist."
url: "https://dardo.studio/en/blog/multilingual-seo/"
language: "en"
translations: {"es":"https://dardo.studio/es/blog/seo-multilingue/","pt":"https://dardo.studio/pt/blog/seo-multilingue/"}
updated: "2026-10-17T23:24:46.634Z"
---

[Blog](https://dardo.studio/en/blog/)

# Multilingual SEO: URL structure, hreflang without errors, and when a language isn't worth publishing

One URL per language, reciprocal hreflang with x-default, no redirects between versions, only languages you can review. Codes that fail, a checker, a checklist.

By [Nicolás Cerón](https://dardo.studio/en/nicolas-ceron/) ·October 17, 2026

![A hillside town at dusk where one crimson thread links three lamplit windows on different terraces in a continuous loop.](https://dardo.studio/_astro/01M562WF0BWZYS6RA85KJM2JDS_Z1DSAOO.webp)

## Key takeaways

- Google recommends a separate URL for each language version, with subdirectories such as /es/ the simplest option, and advises against changing a page's language with cookies or browser settings.
- hreflang annotations must list every version including the page itself, use fully qualified URLs and be reciprocal; Google ignores pairs that don't point to each other.
- Google supports only ISO 639-1 language and ISO 3166-1 alpha-2 region codes, so es-419 is unsupported and en-UK has no effect; use es or es-MX and en-GB.
- Googlebot usually crawls from US IP addresses without an Accept-Language header, so redirect by language only at language-neutral addresses and never between language URLs.
- On 14 October 2026 dardo.studio retired 15 machine-translated languages, 795 of its 954 URLs bringing about four clicks a week, with a 301 from each page to its English version.

## The short answer

Multilingual SEO comes down to four things. Give every language its own URL, usually a subdirectory such as `/es/`. Connect each page's language versions with reciprocal hreflang annotations that include the page itself and an `x-default`. Keep every language URL crawlable, with no automatic redirects between them. And publish only the languages you can write and keep up well.

Google recommends separate URLs per language, detects a page's language from its visible text rather than its `lang` attribute, and may ignore hreflang annotations that lack return links. The bigger risk is quality: machine translation published at scale without review. On 14 October 2026 we retired 15 machine-translated languages from dardo.studio, 795 of its 954 URLs, which brought about four search clicks a week.

## Multilingual or multi-regional?

Google's guide to [managing multi-regional and multilingual sites](https://developers.google.com/search/docs/specialty/international/managing-multi-regional-sites) separates the two:

- A **multilingual** site offers content in more than one language, such as a Canadian business with English and French versions. Google tries to match the searcher's language.
- A **multi-regional** site targets users in different countries, such as a manufacturer shipping to Canada and the United States. Google tries to match the searcher's locale.

Many sites are both. The difference decides your hreflang codes: language only (`es`) when one Spanish version serves everyone, language plus region (`es-MX`, `es-CO`) only when the pages really differ by country, in prices, shipping, legal text or offer.

## URL structure: the four options

Google lists four ways to build locale-specific URLs and recommends against one:

| Structure           | Example            | For                                          | Against                                                  |
| ------------------- | ------------------ | -------------------------------------------- | -------------------------------------------------------- |
| Country-code domain | example.de         | Clear country targeting; easy to separate    | Expensive, more infrastructure, one country per domain   |
| Subdomain           | de.example.com     | Easy to set up; servers can differ by locale | Users can't tell whether "de" is a language or a country |
| Subdirectory        | example.com/de/    | Easy to set up, low maintenance, one host    | One server location; harder to separate later            |
| URL parameter       | example.com?loc=de | —                                            | Not recommended by Google                                |

For most businesses, subdirectories are right: one domain, one analytics setup, one place to build authority. dardo.studio uses `/en/`, `/es/` and `/pt/`.

Three details from the same guide:

- **Some country domains count as generic.** Google treats `.co`, `.io`, `.ai`, `.me` and `.tv`, among others, as generic top-level domains, so a `.co` domain doesn't signal Colombia.
- **Translated slugs are fine.** Localized words in URLs are allowed; use UTF-8 and escape the URLs properly in links.
- **Don't switch language on one URL.** Google recommends separate URLs rather than cookies or browser settings that change the language of the same address.

## hreflang: syntax and rules

hreflang tells Google that a set of pages are language or regional versions of each other, so it can show the right one. Google's [localized versions documentation](https://developers.google.com/search/docs/specialty/international/localized-versions), last updated 21 September 2026, accepts three equivalent methods: `<link>` elements in the HTML head, an HTTP `Link` header (useful for PDFs) and an XML sitemap. Using more than one brings no benefit in Search and is harder to keep consistent.

This is the set on our Spanish contact page, copied from the live HTML. The English and Portuguese versions carry the same four lines:

```html
<link rel="alternate" hreflang="en" href="https://dardo.studio/en/contact/">
<link rel="alternate" hreflang="es" href="https://dardo.studio/es/contacto/">
<link rel="alternate" hreflang="pt" href="https://dardo.studio/pt/contato/">
<link rel="alternate" hreflang="x-default" href="https://dardo.studio/en/contact/">
```

The rules Google sets for every method:

- **Each version lists itself and all the others,** so the set is identical on every page in it.
- **URLs are fully qualified,** with `https://`. Relative paths don't count.
- **Return links are required.** If two pages don't both point to each other, Google ignores the tags.
- `**x-default**` **names the fallback** for searchers whose language matches none of your versions. Google designed it for language selector pages, but it works on any page; ours points to the English version.
- **Codes are ISO 639-1 for the language, optionally followed by ISO 3166-1 alpha-2 for the region.** Scripts can use ISO 15924 (`zh-Hant`).

We publish hreflang both in the HTML and in our sitemap. That only stays safe because both are generated from the same CMS data; with hand-maintained tags, pick one method.

### hreflang codes that fail

| Code      | Works?          | Why                                                                           |
| --------- | --------------- | ----------------------------------------------------------------------------- |
| es        | Yes             | Spanish, any region                                                           |
| es-MX     | Yes             | Spanish for users in Mexico                                                   |
| es-419    | No              | Google supports only ISO 3166-1 region codes, and names es-419 as unsupported |
| en-UK     | No              | UK is a reserved code; Google ignores that part. Use en-GB                    |
| be        | Not for Belgium | be is Belarusian. Belgium needs a language first: nl-BE, fr-BE                |
| pt-BR     | Yes             | Portuguese for users in Brazil                                                |
| zh-Hant   | Yes             | Chinese in Traditional script                                                 |
| x-default | Yes             | Fallback for unmatched languages                                              |

`es-419` deserves the warning: many sites use it to mean "Latin American Spanish", and Google's documentation says it isn't supported. Use `es` for one Spanish version, or country codes if you really have country versions.

### The common hreflang errors

- **Missing return links.** Page A lists B, but B doesn't list A, so both annotations may be ignored. It usually happens when one language has a page the other lacks, or when slugs change in one language only.
- **A canonical pointing to another language.** Google's [canonicalization guide](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls) says that with hreflang, each page's canonical should be in the same language. A Spanish page canonicalized to its English version tells Google the Spanish page is a duplicate. Give every language version a self-referencing canonical.
- **hreflang pointing at redirects, 404s or noindexed pages.** Point every annotation at the final URL that answers 200, is indexable and is its own canonical. A crawler gets nothing useful from an alternate that redirects elsewhere.
- **Template-only translation.** Google treats localized pages as duplicates only when the main content stays untranslated. A page with a Spanish menu and an English body isn't a Spanish page.
- **A** `**lang**` **attribute that contradicts the text.** Google ignores `lang` when it detects language, but screen readers rely on it: WCAG 2.2 [success criterion 3.1.1](https://www.w3.org/TR/WCAG22/#language-of-page) (Level A) requires each page's language to be programmatically determinable. Set it correctly anyway.

### A quick hreflang checker

Search Console's International Targeting report is [deprecated](https://support.google.com/webmasters/answer/12474899), although Google says it still uses hreflang. Google's documentation points to third-party tools such as Merkle's [hreflang tag tester](https://technicalseo.com/seo-tools/hreflang/), which checks one live page. For a quick check of your own, this script fetches a page, then fetches each alternate and confirms it answers 200 and links back:

```bash
page="https://dardo.studio/es/contacto/"
for alt in $(curl -s "$page" | grep -o '<link rel="alternate" hreflang="[^"]*" href="[^"]*"' \
             | sed 's/.*href="//; s/"$//' | sort -u); do
  code=$(curl -s -o /dev/null -w '%{http_code}' "$alt")
  back=$(curl -s "$alt" | grep -c "hreflang=\"[^\"]*\" href=\"$page\"")
  echo "$alt  status=$code  links_back=$back"
done
```

Run on 17 October 2026, it printed `status=200 links_back=1` for all three versions. It assumes the attribute order shown above; adjust the pattern to match your HTML.

## Redirects by language: what Google warns against, and a safe pattern

Google's guidance is direct: avoid automatically redirecting users from one language version to another based on what you think their language is, because it can stop users and search engines from seeing every version. Its page on [locale-adaptive pages](https://developers.google.com/search/docs/specialty/international/locale-adaptive-pages) explains why: Googlebot's default IP addresses appear to be in the US, and it sends requests without an `Accept-Language` header. A site that picks content by IP or browser language may show Google only one version. Google also calls IP location analysis generally unreliable.

Redirecting by language is still useful at addresses that don't belong to one language. This is how dardo.studio does it:

- **Language URLs never redirect.** `/en/contact/`, `/es/contacto/` and `/pt/contato/` always answer 200, sit in the sitemap and carry the hreflang set.
- **Language-neutral addresses pick a version.** `/contact/` or `/contacto/`, the forms we use in shared links, answer with a temporary redirect chosen from the visitor's `Accept-Language`, marked `Vary: Accept-Language` and never cached.
- **A client with no language preference gets the address's own language.** Googlebot sends none, so `/contacto/` takes it to the Spanish page, not the English one.

```txt
$ curl -sI https://dardo.studio/contact/ -H "Accept-Language: pt-BR"
HTTP/2 302
location: https://dardo.studio/pt/contato/

$ curl -sI https://dardo.studio/contacto/
HTTP/2 302
location: https://dardo.studio/es/contacto/
vary: Accept-Language, Cookie
```

The neutral addresses stay out of the sitemap and hreflang. Google's [redirect documentation](https://developers.google.com/search/docs/crawling-indexing/301-redirects) says a temporary redirect isn't a signal that its target should be canonical, so the language URLs carry that weight themselves, through self-referencing canonicals, sitemap entries and internal links. A banner offering another language is gentler than any redirect when a visitor lands on the "wrong" version.

## Translation quality: when machine translation becomes a risk

Google's [spam policies](https://developers.google.com/search/docs/essentials/spam-policies), last updated 28 August 2026, define scaled content abuse as many pages generated mainly to manipulate rankings rather than help users, however they're made. Their examples include scraped content run through automated transformations such as translating. Translating your own pages isn't named, but the test is the same: does each page add value for its readers?

Google's staff have answered the question directly. In the [June 2024 SEO office hours](https://developers.google.com/search/help/office-hours/2024/june), Gary Illyes said a low-quality automatic translation may hurt rankings, and recommended that a native speaker review and fix it. John Mueller said there is no markup to label automatic translations: if you're happy with the pages, index them; if not, add `noindex`. Bing's [Webmaster Guidelines](https://www.bing.com/webmasters/help/webmaster-guidelines-30fba23a) say large-scale generated content without oversight or editorial review may be excluded from indexing.

| Content                                | Machine translation alone?   | What it needs                                                |
| -------------------------------------- | ---------------------------- | ------------------------------------------------------------ |
| Legal terms, privacy policy, contracts | No                           | A qualified translator or counsel, per jurisdiction          |
| Pricing, plans, product limits         | No                           | A reviewer who checks every number and promise               |
| Service and landing pages              | No                           | Localization: the words buyers in that market search and use |
| Help articles, documentation           | As a first draft             | Review by someone who knows the product                      |
| Long-tail blog archive                 | Usually not worth publishing | Pick the articles that market needs, then localize them      |

There's also a fallback you don't have to build. Google may [translate search results](https://developers.google.com/search/docs/appearance/translated-results) itself, showing a translated title and snippet, for searches in 21 languages including Arabic, French, German, Hindi, Korean, Portuguese, Spanish and Thai. For a language you can't do well, a good page in your main language may reach those searchers through that feature. That's our reading of the feature, not a promise Google makes.

## Our decision: retiring 15 machine-translated languages

On 14 October 2026, dardo.studio stopped publishing 15 machine-translated languages: French, German, Italian, Dutch, Swedish, Polish, Ukrainian, Russian, Arabic, Hindi, Thai, Japanese, Korean and Simplified and Traditional Chinese. They made up 795 of the site's 954 URLs and brought about four search clicks a week. Every one of those pages now answers with a single 301 to its English version, and anything else under a retired language goes to the English home:

```txt
$ curl -sI https://dardo.studio/fr/blog/apparaitre-reponses-ia/
HTTP/2 301
location: https://dardo.studio/en/blog/appear-in-ai-answers/
```

Our reasons:

1. **We couldn't stand behind them.** We work in English and Spanish, so we couldn't review the other 15, and Google's own staff say low-quality automatic translations can hurt.
2. **Most of the site, almost none of the value.** Five in six of our URLs brought about four clicks a week between them.
3. **A 301 rather than a 404 or 410.** Google says to use a permanent redirect when you're sure it won't be reverted. A visitor following an old French link lands on the same content in a language we write, instead of an error.
4. **Fewer languages, written properly.** We kept English and Spanish, the languages we work in, plus Portuguese for Brazil.

It's a decision, not a result: three days in, there is no outcome data. What to watch: whether the retired URLs leave Google's index, and whether the English pages gain impressions from those countries. The redirects follow a per-page map, the same approach as a site migration; our [redirect map generator](https://dardo.studio/en/tools/redirect-map-generator/) builds one from two sitemaps, and the [website migration SEO checklist](https://dardo.studio/en/blog/website-migration-seo-checklist/) covers the rest of a URL change.

## Checklist: launching a new language

| Step            | Done when                                                                                                                                             |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| Market          | You know whether you're targeting a language or a country, and you've researched searches in that language, not translations of your English keywords |
| Owner           | One fluent reviewer per page who can change the copy, named before writing starts                                                                     |
| URLs            | A subdirectory such as /fr/, localized slugs in UTF-8, every page in the sitemap                                                                      |
| Content         | The main content is translated and localized, not only the menu: examples, currency, units, contact options, legal text                               |
| Metadata        | Titles, descriptions, image alt text and structured data written in the language                                                                      |
| hreflang        | Reciprocal, self-referencing, valid codes, an x-default, every URL a final 200                                                                        |
| Canonical       | Each language version is its own canonical                                                                                                            |
| lang and dir    | The lang attribute matches the text; right-to-left languages get dir="rtl"                                                                            |
| Switcher        | Links to the equivalent page, not the home page; no automatic redirects between language URLs                                                         |
| Crawl rules     | robots.txt and robots meta tags are the same in every locale, as Google asks                                                                          |
| Forms and email | Form labels, errors, confirmation messages and replies work in the language                                                                           |
| Review date     | A date to look at Search Console by country and decide whether the language stays                                                                     |
| Exit plan       | If it goes, one 301 per page to its closest equivalent, removed from hreflang and the sitemap                                                         |

For a two-language site between English and Spanish, our guide to a [bilingual English–Spanish website](https://dardo.studio/en/blog/bilingual-website-english-spanish/) covers costs, translation rates and ranking in Spanish in the US.

## What to do next

Run the hreflang check above on your three most important pages, then go through the checklist for each language you publish. If you'd like Dardo to plan or rebuild a multilingual site, with copy written for each market and hreflang generated from one source, see [multilingual websites](https://dardo.studio/en/services/multilingual-websites/).

## Common questions

**What is hreflang x-default?**

x-default is a reserved hreflang value that names the page to show searchers whose language or region matches none of your versions. Google designed it for language selector pages, but it can point to any page, such as your main-language version.

**Is es-419 a valid hreflang code?**

Not for Google. Its documentation says only ISO 639-1 language codes and ISO 3166-1 alpha-2 region codes are supported and names es-419 as unsupported. Use es for a single Spanish version, or country codes such as es-MX and es-CO for real country versions.

**Should I use subdirectories, subdomains or country domains for languages?**

Subdirectories such as /es/ suit most businesses: they are easy to set up, need one host and keep authority on one domain. Country domains signal a country clearly but cost more and target one country each; Google recommends against URL parameters.

**Can I redirect visitors to their language automatically?**

Not between language versions. Google advises against automatic redirects based on a visitor's presumed language, because Googlebot usually crawls from the US without an Accept-Language header and may never see the other versions. A redirect from a language-neutral address, with every language URL left crawlable, avoids that problem.

**Does Google penalize machine-translated content?**

Google's spam policies target pages generated at scale mainly to rank, however they are made. Google's Gary Illyes said low-quality automatic translation may hurt rankings and recommended review by a native speaker; John Mueller said to noindex translations you aren't happy with.

**How do I check hreflang?**

Search Console's International Targeting report is deprecated, so use a third-party tester such as Merkle's hreflang tool, or a script that fetches each alternate URL and confirms it answers 200 and links back. Check that every version's canonical points to itself.

## Sources & further reading

Sources behind this page, with further detail from the original publishers.

- [Google Search Central: Managing multi-regional and multilingual sites](https://developers.google.com/search/docs/specialty/international/managing-multi-regional-sites) · developers.google.com
- [Google Search Central: Tell Google about localized versions of your page](https://developers.google.com/search/docs/specialty/international/localized-versions) · developers.google.com
- [Google Search Central: How Google crawls locale-adaptive pages](https://developers.google.com/search/docs/specialty/international/locale-adaptive-pages) · developers.google.com
- [Google Search Central: How to specify a canonical URL](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls) · developers.google.com
- [Google Search Central: Redirects and Google Search](https://developers.google.com/search/docs/crawling-indexing/301-redirects) · developers.google.com
- [Google Search Central: Spam policies for Google web search](https://developers.google.com/search/docs/essentials/spam-policies) · developers.google.com
- [Google Search Central: June 2024 SEO office hours transcript](https://developers.google.com/search/help/office-hours/2024/june) · developers.google.com
- [Google Search Central: Translated results in Google Search](https://developers.google.com/search/docs/appearance/translated-results) · developers.google.com
- [Search Console Help: The International Targeting report is deprecated](https://support.google.com/webmasters/answer/12474899) · support.google.com
- [Bing Webmaster Tools: Bing Webmaster Guidelines](https://www.bing.com/webmasters/help/webmaster-guidelines-30fba23a) · bing.com
- [W3C: WCAG 2.2, Success Criterion 3.1.1 Language of Page](https://www.w3.org/TR/WCAG22/#language-of-page) · w3.org
- [Merkle: hreflang tags testing tool](https://technicalseo.com/seo-tools/hreflang/) · technicalseo.com

[Nicolás Cerón](https://dardo.studio/en/nicolas-ceron/)

Nicolás Cerón is the founder of Dardo, a brand, web design and development studio in Bogotá, Colombia.

## Related articles

- [**Website migration SEO checklist: change platforms or domains without losing rankings**Rankings rarely drop because of the new platform; they drop because URLs that earned traffic stopped answering. A checklist from URL inventory to day 90.](https://dardo.studio/en/blog/website-migration-seo-checklist/)
- [**Spanish-language websites for Toronto businesses: what to plan**A Spanish and English site for a Toronto business: URLs per language, hreflang, Google Business Profile, and the Ontario and federal rules that apply.](https://dardo.studio/en/blog/spanish-website-toronto/)
- [**Bilingual English–Spanish website: how to plan it, what it costs and how to rank in Spanish**When a Spanish version pays off for a US business, how to set up URLs and hreflang, what it costs in 2026 and how to rank in Spanish, with Census data.](https://dardo.studio/en/blog/bilingual-website-english-spanish/)
- [**Framer vs WordPress in 2026: which to choose for a marketing site, with real costs**Framer vs WordPress in 2026: who should pick which, a three-year cost for a bilingual 18-page site with a blog, and what each one makes you give up.](https://dardo.studio/en/blog/framer-vs-wordpress/)

## Keep exploring.

- [Service · **Multilingual and bilingual English–Spanish websites**](https://dardo.studio/en/services/multilingual-websites/)

- [Your project · **Start a conversation**](https://dardo.studio/en/contact/)
