VulCode

Multilingual websites with hreflang and separate URLs

We build websites in several languages so Google shows the right version to the right people: each version has its own address, hreflang, translated metadata and formats. We also help you plan how many languages you can really maintain, because each one is work for years.

Service catalog
The same joinery page in Polish and in English in two browser windows, each at its own address

A language version is a page of its own

Google recommends a separate URL for each language version rather than switching language by cookie or browser settings. An address is content too.

  1. PL, this page/pl/oferty/strony-wielojezycznehreflangEN/en/offer/multilingual-websitesThe service name in the reader's language: multilingual-websites.
  2. PL/pl/oferty/integracje/kurierzyhreflangEN/en/offer/integrations/couriersEvery segment of the address translated.
  3. PL/pl/oferty/wspolpracahreflangEN/en/offer/working-with-usThe meaning translated, not word for word.
  4. PL/pl/oferty/migracjahreflangEN/en/offer/migrationShort in both languages.
  5. PL/pl/oferty/integracje/gus-regonno hreflangENno English versionA Polish-only page, so hreflang points to no version that does not exist.

Canonical for itself

Each version is canonical for itself and does not point to the Polish one.

Links both ways

If two pages do not both point to each other, Google ignores those tags. A check script reports every tag whose target address does not exist in the built site.

x-default

x-default points to the page for people whose language is not listed. On pages in both languages it points to the English one, and on a Polish-only page to the page itself.

Every language in a subdirectory of one domain

We put language versions in subdirectories, such as twojafirma.pl/de/: one domain works for every language, and upkeep is the cheapest. Beside it, three other layouts and why we do not use them.

  1. Country domain

    Two separate domains, no shared root
    • PLexample.pl
    • DEexample.de
    • Clear country targetingYes
    • Easy to set upNo
    • Low maintenanceNo
    • Advised against by GoogleNo

    We do not use it: every domain is a separate cost and separate work on visibility in Google.

  2. Subdomain

    example.com
    • PLpl.example.com
    • DEde.example.com
    • Clear country targetingPartly
    • Easy to set upYes
    • Low maintenancePartly
    • Advised against by GoogleNo

    We do not use it: a subdomain builds visibility from scratch, and the address hardly shows the country.

  3. Subdirectory

    example.com
    • PLexample.com/pl/
    • DEexample.com/de/
    • Clear country targetingPartly
    • Easy to set upYes
    • Low maintenanceYes
    • Advised against by GoogleNo

    One domain, the lowest upkeep and the whole domain working for every language. This site works this way: /pl/ and /en/.

  4. Parameter

    example.com/stoly
    • PL?loc=pl
    • DE?loc=de
    • Clear country targetingNo
    • Easy to set upPartly
    • Low maintenancePartly
    • Advised against by GoogleYes

    We do not use it: Google advises against a language in a parameter of one address.

The language switch

The switch leads to the same page in the other language, and the address decides the version, not the browser settings.

  • The same page in the other language

    You are reading/en/tables/made-to-measure-oak-table
    • PL in the menu leads to/pl/stoly/stol-debowy-na-wymiar
    • not to the home page/pl/

    Google suggests adding links to the page's versions in other languages, so users choose the language themselves. The switch in the menu is plain links to the same page in the other language, with the section anchor translated.

  • The address decides the version

    A browser set to Polish opens/en/tables/made-to-measure-oak-table
    • and gets the English version of that address/en/tables/made-to-measure-oak-table
    • not a redirect to/pl/stoly/stol-debowy-na-wymiar

    Google advises against redirecting by the user's assumed language, because people and search engines may not see every version. An address under /pl/ or /en/ always shows its own version, whatever the browser language.

What gets translated beyond the text

The layers people forget most are the ones you do not see at first glance. This is how they depend on each other when a language version is added.

Language version

  • Address

    Every version has its own address with translated segments, such as /en/offer/migration.

  • Content

    Page copy, image descriptions and downloads. Someone who knows the language and the field translates them.

The page in that language

  • hreflang and canonical

    The versions point to each other, and each one is canonical for itself.

    Depends on: Address

  • Title and description

    The title and description in search results, in the language of the version.

    Depends on: Address, Content

  • Formats

    Currencies, dates with times, numbers and units, written the way the reader writes them.

    Depends on: Content

  • Messages

    Form errors, system emails and notifications: what only shows up while the site is in use.

    Depends on: Content

For search engines

  • Sitemap

    It lists the same pairs of addresses as the page head, from one registry of addresses.

    Depends on: hreflang and canonical

  • Structured data

    They describe the page in its language, so they take the title, description and formats from the same version.

    Depends on: Title and description, Formats

Copy is translated by someone who knows the language and the field: your team or a translator, while we prepare the translation files and a process where no version falls behind.

How many languages to start with

Every further language is work for years, so we add one when there is an audience for it and someone to maintain it.

Number of language versions
  1. 2 languages
    Polish and English with full metadata and translated addresses.
    At this number
    • whenYou sell in Poland and abroad.
    • addressesPolish and English words in the address, such as /pl/oferty/migracja and /en/offer/migration.
    • upkeepYou have someone to keep the second version current.
    hreflang of the tables page
    pl example.com/pl/stolyen example.com/en/tablesx-default example.com/en/tables
    The default version points to English.
  2. 3-5 languages
    We add more versions when there is an audience and someone to maintain them. The architecture allows it from day one.
    At this number
    • whenYou have real traffic or sales in that country.
    • addressesOne more subdirectory on the same domain, such as example.com/de/, with no change to the existing addresses.
    • translationsTranslation files, currencies, dates and system messages in each language.
    hreflang of the tables page
    pl example.com/pl/stolyen example.com/en/tablesde example.com/de/tischex-default example.com/en/tables
    A new version is added on every page in every language.
  3. 6 or more
    Each language means translating every new page, post and email, so fewer and current beats more and behind.
    At this number
    • hreflangEvery version lists itself and all the others, so a new language is a new line on every page in every version.
    • upkeepEach language has a person responsible for the content.
    • checksA script checks hreflang, canonicals and missing translations on every page.
    hreflang of the tables page
    pl example.com/pl/stolyen example.com/en/tablesde example.com/de/tischefr example.com/fr/tableses example.com/es/mesasit example.com/it/tavolix-default example.com/en/tables
    The same set of lines stands on every version.

Common questions about multilingual websites

Answers about language versions, addresses and the quote.

Entering a new market?

Tell us which languages and countries you want to be visible in. We will reply within an hour with questions and a quote.