In this chapter
01Translating a page doesn’t mean having it in another language
Many websites call themselves “multilingual” because there is a menu with little flags at the top. You click, and the text changes before your eyes: it is a program translating the page while you look at it, or it is the browser itself offering to do so. For the visitor it seems to work. For Google, that page exists in one language only: the one it is written in on the server.
Try to picture the scene. Elena has opened a cleaning company in Padua and one evening, from her sofa, she types on her phone in Romanian: “firmă de curățenie Padova”. It is her language, it is how searching comes naturally to her. Your website offers exactly that service, and it even has the button with the Romanian flag. Yet you don’t appear among the results. Why?
The reason is simple. The search engine reads the page as the server delivers it, once, and puts it in its index. A translation that happens afterwards, on the visitor’s screen, never makes it into the index. When a business owner in Iași searches in Romanian for software for his restaurant, Google compares his search with the Romanian pages it knows. If yours isn’t there, it can’t show it.
Having a website in two languages, for a search engine, means something precise: two distinct pages, each with its own address, both written on the server, that declare each other as twins. The rest of this chapter explains how to build it, and which mistakes make one of the two languages disappear without anyone noticing.
The browser’s automatic translation remains a useful service, but it is a tool for the reader, not for the seller. It helps the tourist who opens a foreign website. It doesn’t help the company that wants to be found by an audience speaking another language.
02Addresses: folder, subdomain or country domain
Each language needs a place of its own. In its guide to multilingual and multi-regional sites, Google describes four ways of organizing addresses and advises against one of them. Let’s look at them with the same example: a company with the website nomeazienda.it that wants to add Romanian.
| Structure | Example | Pros | Cons |
|---|---|---|---|
| Folder | nomeazienda.it/ro/ | easy to set up, little maintenance, a single domain to grow | one server for everyone, separating the two languages is less immediate |
| Subdomain | ro.nomeazienda.it | easy to set up, can be placed on another server | from the address you can’t tell whether “ro” means the language or the country |
| Country domain | nomeazienda.ro | very clear country signal, server location doesn’t matter | double cost and infrastructure, registration rules, works for one country only |
| Parameter | ?lingua=ro | none that matter | not recommended by Google: hard to segment and to recognize |
For an Italian business that also wants to be found by Romanians, in Italy or in Romania, the folder is almost always the right choice: everything the domain has earned over years of life, the trust of search engines and the links it has received, also applies to the Romanian pages. The subdomain becomes interesting when the Romanian part is really a different product. The .ro domain when there is a company or an office in Romania with an exclusively local audience. How domains and subdomains work, and who decides where they point, I explain in the chapter on domain, DNS and HTTPS.
The words in the address get translated too
Inside the folder, addresses must speak the language of the page. /ro/chi-siamo/ is a hybrid that a Romanian reads as an oddity; /ro/despre/ (“despre” means “about”, as in “about us”) is a Romanian address. The address appears in search results, is read when it is shared and contains words that matter to the searcher: it is text in every respect.
03The twins declare each other: hreflang
Having two pages is not enough: you need to tell Google that they are the same page in two languages, so that it shows each person the right one. This is done with hreflang, a line in the head of the page, invisible to the reader, that says: “this page also exists in this other language, at this address”.
Here is how the lines of the /chi-siamo/ page of this website are written, word for word:
<link rel="alternate" hreflang="it" href="https://www.zenithdevelop.com/chi-siamo/">
<link rel="alternate" hreflang="ro" href="https://www.zenithdevelop.com/ro/despre/">
<link rel="alternate" hreflang="x-default" href="https://www.zenithdevelop.com/chi-siamo/">
And the Romanian page /ro/despre/ contains exactly the same three lines. It is not a coincidence: it is the rule.
The four rules Google puts in writing
- Each version lists itself and all the others. The set of lines is identical on all the twins.
- The links must be reciprocal. If the Italian page points to the Romanian one, the Romanian one must point to the Italian one. Otherwise the declarations may be ignored.
- Addresses are complete, with
https://and the domain, not abbreviated like/ro/despre/. - The codes are the standard ones: the language according to ISO 639-1 (
it,ro), the country, if needed, according to ISO 3166-1 (ro-RO,it-IT). The country on its own doesn’t work:beis Belarusian, not Belgium.
The x-default: the door for everyone else
The third line, hreflang="x-default", tells Google which page to show to people searching in a language the site doesn’t have: a German, a French or an English speaker. On an Italian website with a Romanian version, the natural choice is the Italian page, and that is what this website uses.
Three places to write it, and one rule to avoid mistakes
Google accepts hreflang in three equivalent forms: in the lines in the head of the page, in the HTTP headers (useful for PDFs) or in the sitemap, the file that lists all the pages of the site for the search engine. You can use just one. Using two is fine only if they say exactly the same thing: two sources that contradict each other are worse than one.
Don’t get this wrong
Hreflang breaks silently. No error on screen, no warning, no blank page: simply, weeks later, you notice that people searching in Romanian find the Italian page, or find nothing. That is why reciprocity is checked with a tool, at every change to the site, and never taken for granted.
Quiz
The twins and their addresses
Choose one answer for each question: the explanation appears right after.
The Italian page points to the Romanian one with hreflang, but the Romanian one doesn’t point to the Italian one. What happens?
The links must be reciprocal: if one twin doesn’t answer the other, Google may disregard the pair.
Which code correctly indicates the Romanian language?
Hreflang uses the two-letter ISO 639-1 codes: “ro” for Romanian, “it” for Italian.
Who is the line with hreflang="x-default" for?
The x-default indicates the page to show when none of the site’s languages matches the searcher’s.
Among these structures, which one does Google advise against?
Addresses with a parameter are hard to segment and to recognize: Google advises against them. Folders, subdomains and country domains are all fine.
04What to translate, including what you can’t see
A page is made of much more than the text you read. There are parts that are seen only in search results, parts read only by people who can’t see, parts read only by the search engine. If even one of them stays in Italian, the Romanian reader notices, and often notices it in the most visible place of all: the Google result.
The invisible parts, one by one
1
Title and description
They are the two lines of the Google result. If they stay in Italian, the Romanian reader sees a “foreign” page at the very moment of deciding whether to click.
2
Alt text
The description of images is used by people with screen readers and by Google Images. It is translated like the rest of the text.
3
Structured data
JSON-LD describes the page to search engines: name, description, breadcrumbs. Google uses it to enrich results.
4
Social preview
The title and description that appear when the link is shared, and the og:locale that says ro_RO.
5
The declared language
lang="ro" at the top of the page. Google doesn’t use it to understand the language, but screen readers do, to pronounce correctly.
The detail that reveals who knows Romanian: ș and ț
Romanian has two letters with a comma below, ș and ț. For years many programs replaced them with similar but different letters, with a cedilla (ş, ţ), which come from Turkish. To the eye the difference is minimal; for a Romanian it is like reading a word with the wrong accent, and for a computer they are different characters. A well-made Romanian website uses the right letters, and the chosen fonts must contain them: not all of them do, and a missing letter gets replaced by one from another font, visibly different.
Words of the chapter
The vocabulary of the bilingual website
Tap a card to flip it.
And what doesn’t get translated
- proper names and trademarks: the name of the company, of registered products, of cities (Venezia stays Venezia in the text, even though in Romanian it is written “Veneția” when the sentence requires it);
- technical data: email addresses, phone numbers, codes;
- pages that by choice stay in one language only, saying so: it is more honest than an approximate translation.
05The mistakes that make a language disappear
Most bilingual websites that don’t work don’t have a serious mistake: they have a small, invisible one that nobody checks. Google lists them in its guide, and they are always the same.
How it goes wrong
- Forcing visitors into a language based on their IP address or browser language: Google explicitly advises against automatic redirects, and its crawler, which mostly crawls from the United States, may never see the Romanian version.
- Switching language with a cookie or a script, at the same address: for the search engine there is only one page.
- Translating only the frame, that is, menus, buttons and footer, leaving the content in Italian.
- Half sentences: one bold word translated and the rest of the sentence left in Italian.
- Wrong canonical: the Romanian page declaring the Italian one as the “original”, and so removing itself from the results.
- The language button leading to the home page instead of the same page in the other language.
How it’s done
- Each language has its own address, and visitors choose with a clearly visible button.
- The page comes from the server already in its language.
- All the content is translated, not just the edges.
- You translate the whole sentence, because in Romanian the word order changes.
- Each page has a canonical pointing to itself and hreflang towards its twin.
- The button leads to the exact twin: from “Chi siamo” to “Despre”, not to the Romanian home page.
Machine translation without review
Machine translation tools are good today, and they are an excellent starting point. But publishing hundreds of pages translated by a program, sight unseen, is a real risk: Google’s spam policies explicitly mention mass-producing content through “automated transformations” such as translation, when the purpose is to manipulate results rather than to serve the reader. Beyond the search engine, there is the reader: a badly translated text tells the Romanian customer that, for you, Romanian is a minor detail. A translation reviewed by someone who knows the language and the trade says the opposite.
Foreign customers don’t notice how carefully a translation was made. They notice right away when it wasn’t.
True or false?
Five things people say about bilingual websites
Decide whether each statement is true or false.
Google understands the language of a page from the lang attribute.
Google states that it uses the visible content, not the lang attribute. The lang attribute is still useful for screen readers.
Automatically sending Romanian visitors to the Romanian version, based on their IP, improves visibility.
Google advises against automatic redirects: its crawler may never see some versions of the site.
The versions in different languages can also live on different domains.
Hreflang alternates don’t have to be on the same domain: nomeazienda.it and nomeazienda.ro can declare each other as twins.
Translating menus and buttons is enough for the page to count as Romanian.
Translating only the frame and leaving the content in Italian is a mistake Google mentions: it creates a poor experience for the reader.
ș with a comma and ş with a cedilla are, for a computer, different characters.
They have different codes. Correct Romanian uses the comma below (ș, ț); the cedilla comes from other languages.
06How this website is built, in two languages
Everything I have written so far is applied on the website you are reading. I describe it in detail because it can be checked: just click the language button at the top, or look at the page’s source code.
The details you can check
- The language button doesn’t translate anything: it leads to the twin, which is a real page with its own address. From “Chi è Zenith” it leads to “Despre”, not to the Romanian home page. It appears only where the twin really exists: a button that promises Romanian and opens Italian is worse than no button at all.
- Hreflang is reciprocal and complete:
it,roandx-default, with the full address, identical on both twins. A tool checks it on all the pairs at every change. - The sitemap declares the same pairs, with the alternates in both blocks: the same information in the page and in the map, never contradicting each other, because they come from the same list.
- Every Romanian page declares itself:
lang="ro",og:localero_RO, the canonical on its own Romanian address. - Even what only Google reads is translated: descriptions and structured data. And the labels inside the software screenshots: on the Romanian page of a management program, the software shown “speaks” Romanian.
- The whole sentence is translated: a paragraph with a bold word remains a single sentence to translate, because in Romanian the word order changes.
- After every build, the system searches the Romanian pages for words that cannot exist in Romanian (“perché”, “questo”, “della”...): if it finds one, it says so, with the exact line. Counting translated sentences is not enough to prove that a page is in Romanian.
- Privacy and cookie pages stay in Italian, by declared choice, and have no twin: better a precise legal text in one language than an approximate translation.
07Two audiences, two ways of searching
The ties between Italy and Romania are close: a large Romanian community lives and works in Italy, and many Italian companies work in Romania. A website in two languages can speak to different audiences, and it is worth knowing whom each page is addressing.
Romanians living in Italy
They often search in Romanian, even when they are looking for a service in Italy: a professional, a venue for a party, software for the business they have opened here. What matters to them is finding a page in their own language that talks about a service nearby: the address, the area, the Italian phone number. This is where the bilingual website meets local search, which I cover in the chapter on local SEO and the Google Business Profile.
Customers in Romania
They search in Romanian, with the habits and the words of their market. A literal translation of Italian keywords often doesn’t work: the way a restaurant owner in Iași describes management software is not the word-for-word translation of how one in Padua describes it. The keywords of the Romanian version are chosen in Romanian, by looking at how Romanians really search, not by translating the Italian list.
What applies to both
- Speed: someone opening the website from Bucharest on a server in Italy waits a few extra milliseconds. With a light website they don’t notice; with a heavy one they do. I talk about it in the chapter on speed and Core Web Vitals.
- Contact: a way of writing that works in both countries, like WhatsApp, and a reply in the language they wrote to you in.
- Ownership: the Romanian pages are an asset that grows over time, just like the Italian ones. They live on your domain, not on someone else’s platform, for the reasons I explain in the chapter on the website as an asset you own.
Test yourself
Does your website truly speak two languages?
Frequently asked questions
Is the browser’s automatic translator enough to have a website in Romanian?
No. Browser translation happens on the reader’s screen: Google indexes the page as it is on the server, so in one language only. To be found by people searching in Romanian you need real Romanian pages, with their own address.
Is a /ro/ folder or a .ro domain better?
For an Italian business that also wants to be found by Romanians, the folder is almost always the simplest and strongest choice: a single domain to grow. The .ro domain makes sense when there is a real business in Romania with an exclusively Romanian audience.
What is hreflang?
It is a declaration in the head of the page (or in the sitemap) that tells Google which versions of the same page exist in other languages. It must be reciprocal: each twin lists itself and all the others.
Does Google use the lang attribute to understand the page’s language?
No: according to its documentation, Google understands the language from the visible content. The lang attribute should be set anyway, because screen readers use it to pronounce the text correctly.
Can I automatically send Romanian visitors to the Romanian version?
Google advises against it: automatic redirects by language or IP address can prevent people and search engines from seeing all the versions. Better a clearly visible language button that leads to the exact twin.
Must the Romanian pages be identical to the Italian ones?
In structure and design it is a good idea, so the two languages don’t drift apart over time. Keywords, however, are chosen in Romanian, by looking at how Romanians really search, not by translating the Italian list.
Sources
- Google Search Central, “Managing multi-regional and multilingual sites”: address structures, lang attribute, automatic redirects, cookies and scripts.
- Google Search Central, “Tell Google about localized versions of your page”: hreflang rules, reciprocity, x-default, ISO codes.
- Google Search Central, “Spam policies for Google web search”: scaled content abuse, machine translation included.
- MDN Web Docs, “lang”: what the declared language is for, in terms of accessibility.
- Library of Congress, list of ISO 639 codes and Wikipedia, “ISO 3166-1” (in Italian): language and country codes.
Chapter updated October 2026. The rules cited come from the official documentation of Google and MDN; the examples of addresses and hreflang lines are the real ones from zenithdevelop.com.