RETURN_TO_BLOG
AI & SEO 12 min

Hreflang and International SEO — Multilingual Visibility in Google and AI Models

Paweł Wiszniewski
Paweł Wiszniewski
SEO & GEO Specialist · AI Engineer

The most damage in international SEO comes from one misconception: that hreflang lifts rankings. It doesn't. Hreflang is a routing directive — it tells Google which language version to show which user, not which page should rank higher. Yet its errors are the most common mistake on multilingual sites: audits regularly find incomplete or non-reciprocal annotations on most large properties, and the result is always the same — Google shows a Polish user the English version, conversion drops, and you go looking for the cause in the content, not the header.

Hreflang is not a ranking factor — it's language routing, and its errors are the most common multilingual SEO mistake, which audits find on most large sites. In the AI era there's a second stake: ChatGPT and Perplexity cite different sources for the same question asked in different languages. The complete workshop: three URL architectures, five rules of error-free hreflang, slug translation and multilingual GEO.

In the AI era there's a second stake the classic guides stay silent about: language models treat the query language as a source signal. The same question asked of ChatGPT in Polish and in English returns different citations — because the model reaches for content in the language of the question. Multilingual architecture is therefore no longer just a Google matter; it also decides whether you're visible at all in the Polish and English AI answer.

This post is the complete workshop: what hreflang really is, how to choose a URL architecture, five rules for error-free implementation, slug translation (on our own PL/EN pattern) and multilingual GEO.

What hreflang is — and what it is not

Let's start by separating two things that blur together in people's heads.

Hreflang is not a ranking factor. It doesn't make a page rank higher, doesn't pass "authority", doesn't replace links or content. Google's documentation describes it as a signal, not a binding directive — it can be ignored if the rest of the signals say otherwise.

Hreflang is a map of language versions. For a page available in several languages or regions it tells the search engine: "these are variants of the same content, show the user the right one." The effect isn't in ranking, but in getting the right version to the right user — which saves CTR and conversion, not position.

The two most common symptoms of missing or broken hreflang:

  • Wrong version in results. A Polish user sees an English URL, clicks less often, and if they do — they bounce. Google notices and gradually lowers the visibility of the whole section.
  • Cross-language cannibalization. Without mapping, Google treats the versions as competing pages on the same topic and picks a "winner" itself — often not the one you want.

Three URL architectures — ccTLD, subdomain, subfolder

Before you touch hreflang, you have to decide where the language versions live at all. It's a decision for years — changing the architecture means a full migration with the risk of losing rankings.

/// THREE MULTILINGUAL URL ARCHITECTURES

A decision for years — changing it means a full migration

SUBFOLDER (DIRECTORY)RECOMMENDED
yourcompany.com/pl/ · /en/
All authority and entity signal in one domain — the default choice and the best for AI visibility
SUBDOMAINSITUATIONAL
pl.yourcompany.com
Separate infrastructure per language under one brand, but weaker domain authority consolidation
ccTLD (COUNTRY DOMAIN)LOCAL ONLY
yourcompany.pl · .de
The strongest geo targeting — but only with a real in-country presence and the budget for several sites
ArchitectureExampleWhen to choose
ccTLD (country domain)yourcompany.pl / .deStrong geo targeting, budget for multiple domains, real in-country presence
Subdomainpl.yourcompany.comSeparate infrastructure per language under one brand, weaker authority consolidation
Subfolder (directory)yourcompany.com/pl/The default choice — all domain authority in one place

For the vast majority of companies — especially those aiming for AI visibility — the subfolder wins. The reason is the same as with crawl budget: one domain accumulates all the authority and all the entity signal, instead of scattering it across separate hosts. A ccTLD makes sense when you genuinely operate locally in a given country (warehouse, support, currency) and can afford to maintain several domains as separate sites. That's exactly our choice on this site: one domain, versions under /pl/ and /en/.

Five rules of error-free hreflang

Hreflang breaks on details. These five rules eliminate most of the problems audits catch on large sites.

/// FIVE RULES OF ERROR-FREE HREFLANG

They eliminate most of the issues audits catch

01
RECIPROCITY
PL points to EN → EN must point back to PL. A one-way annotation is ignored.
02
SELF-REFERENCING
Every version also lists itself among its hreflang annotations.
03
X-DEFAULT
An x-default entry for users outside the defined languages — the default version or a selection page.
04
ABSOLUTE URLS, POST-301
Full URLs with https://, leading to the final address, not to a redirect.
05
CANONICAL ALIGNMENT
Each version canonicals to itself — a conflict with hreflang invalidates the whole group.
  1. 1.Reciprocity. If the PL page points to EN, EN must point back to PL. A one-way annotation is ignored by Google — the most common error in audits.
  2. 2.Self-referencing. Every version must also point to itself. The PL page lists PL among its own hreflang annotations.
  3. 3.x-default. Add an hreflang="x-default" entry pointing to the default version (usually English or a language-selection page) for users outside the defined languages.
  4. 4.Absolute URLs, post-301. URLs in hreflang must be full (with https://) and lead to the final address, not to a redirect. Pointing at a URL that 301s breaks the mapping.
  5. 5.Canonical alignment. hreflang and canonical must not contradict each other: the PL page's canonical points to itself, not to EN. A conflict is the classic reason Google ignores the whole group.

A correct set for two languages looks like this — the same three links in the head of each version:

hreflang-in-the-head.html
<link rel="alternate" hreflang="pl" href="https://yourdomain.com/pl/oferta" /><link rel="alternate" hreflang="en" href="https://yourdomain.com/en/offer" /><link rel="alternate" hreflang="x-default" href="https://yourdomain.com/en/offer" />

Keep the language codes compliant with BCP 47 (ISO 639-1 for the language, optionally ISO 3166-1 for the region): "pl", "en", and if you distinguish regions — "en-GB", "en-US", "pt-BR". Don't invent your own codes; "en-UK" is invalid (correct: "en-GB").

Slug translation — our PL/EN pattern

A frequent question: translate the slug (the part of the URL after the domain), or keep one for all languages? Translate. A slug in the user's language is a relevance signal for the search engine and a higher CTR — an English speaker is more likely to click /en/hreflang-international-seo-geo than /en/miedzynarodowe-seo.

The catch is that translated slugs have to be linked together so hreflang and the language switcher know what maps to what. Our pattern on this site: every post has one numeric identifier, and slugs are translated per language and paired by it. The English counterpart of this post is hreflang-international-seo-geo — a different slug, the same identifier. The language switcher resolves the pair by identifier, not by matching the URL text, so translating slugs breaks nothing.

The same applies to the brand entity: a consistent language architecture strengthens the knowledge graph and entity, because Google and AI models see one brand in many languages, not several unconnected entities.

Multilingual GEO — why AI cites different sources per language

Here begins the part missing from classic hreflang guides. Language models treat the query language as a source filter. Ask ChatGPT for "the best tools for something" in Polish, then in English — you'll get two different citation lists, because the model prefers content in the language of the question.

/// QUERY LANGUAGE = SOURCE FILTER IN AI

Same question, two languages — two different citation lists

QUESTION IN POLISH
The model prefers Polish sources
  • Cites Polish expert content
  • Polish forums, blogs, trade media
  • Your /pl/ version — if it exists and is strong
SAME QUESTION IN ENGLISH
The model prefers English sources
  • Cites English-language content
  • Reddit, global media and blogs
  • Your /en/ version — a separate citation pool

Consequences for strategy:

  • An EN-only version won't give you visibility in Polish AI answers. If all the expert content is in English, you're invisible in Polish ChatGPT — the model cites competitors' Polish sources.
  • Translation is not a machine carbon copy. Models and Google reward content that reads natively and is grounded in local context — examples, currency, market reality. Automatic translation without editing is a low-quality signal.
  • The citation-friendly structure works in every language. The rules from the post on optimizing for AI Overviews — answer first, question headings, attributed data — apply to each language version separately.

In other words: hreflang handles the technical side (the right version to the right user), but AI citations are decided by whether you have strong, native content in that language at all.

How to verify the implementation

Before you call it done, check four things:

  • Search Console → international targeting and hreflang errors report — shows missing return annotations and invalid language codes.
  • Manual test in the page source — open the HTML preview without JS rendering and check whether the hreflang links are in the head. If you inject them with JavaScript, some crawlers won't see them — the same problem as in JavaScript SEO.
  • Crawler (Screaming Frog / Sitebulb) — the hreflang report catches non-reciprocal and non-canonical references at the scale of the whole site.
  • Per-language AI test — ask the models the same question in Polish and in English and check whether they cite your correct versions. This measures a layer invisible in GA4 — how to set it up I describe in AI traffic analytics.

Step-by-step rollout plan

  1. 1.Choose an architecture (subfolder for most) and stick to it across the whole site.
  2. 2.Fix the list of languages and regions and the correct BCP 47 codes — no home-made inventions.
  3. 3.Generate hreflang programmatically from a single source of truth (an identifier → slug per language map), not by hand per page.
  4. 4.Add x-default and self-referencing to every group.
  5. 5.Align canonicals — every version canonical to itself.
  6. 6.Translate the slugs and pair them by a stable identifier (our pattern).
  7. 7.Edit the content natively per language — not a machine copy; optimize each version separately for AI citations.
  8. 8.Verify in GSC, in the source without JS, with a crawler and with a per-language AI test.
  9. 9.On every migration update hreflang in the same deployment — stale references to old URLs break the mapping.

---

I design multilingual architecture from domain choice to hreflang generated from a single source of truth — as part of technical SEO and AI optimization (GEO). I teach this in the SEO & GEO course. Get in touch — I'll start with an hreflang audit and a language map for AI visibility.

Worth reading next:

Paweł Wiszniewski – SEO & GEO Specialist & AI Engineer
About the authorPaweł Wiszniewski

SEO & GEO specialist and AI engineer from Białystok. 10 years building search visibility for recognized brands and 3 years delivering AI — agents, automation and LLM integrations (Next.js, React, Node.js).

/// AUTHOR
Paweł Wiszniewski – AI & Web Engineer

Paweł Wiszniewski

SEO & GEO Specialist & AI Engineer

SEO/GEO specialist (10 years) and AI engineer (3 years). I build search visibility, AI systems and automations that reduce costs and improve operational efficiency.

Signal received?

Terminate
Silence

Initiate protocol. Establish connection. Let's build something loud.

> WAITING_FOR_INPUT...