The development of a multilingual site is an address scheme, separate content for each language and a technical declaration of languages that is read by search. We make the second and third versions so that each page has its own address, its own meta tags, its own hreflang and gets into the site map along with all the others. Term — 12–30 working days; the time of the translation itself is not included here, it goes parallel on the side of your translator. There is no price on the page on purpose: the volume of the text and the state of the existing site are first measured by an audit.
the three working branches are root ru, /ua/, and /pl/, all returning HTTP 200s
after a free audit
Price
30
Guarantee
days after project sign-off
the three working branches are root ru, /ua/, and /pl/, all returning HTTP 200s
Language versions in the measured underwear store
hreflang is set twice by two different mechanisms, the sets contradict each other
What is broken there
lang="ua" instead of uk, and in Polish - lang="code": the variable did not fit into the template
The language codes are there
three bg/en/ru versions, first response 512.6 ms at 220.4 KB HTML
Brand website for the EU market
hreflang uk-ua / ru-ua / x-default are correct, 1,992 addresses in the site map without duplicates
Bilingual B2B catalog of spare parts
12–30
Term of works
working days, without time for the translation itself
free audit of language versions, 2-4 working days
Before the estimate
Process steps
Transparent stages with approval at every step
Total duration:12–30 days
1
Analysis of language versions and decisions by language
2-4 working days
We capture what the site actually provides: language codes, hreflang, canonical, site map composition. We record the list of languages and markets under them, as well as which version the visitor who entered without a choice sees.
2
Address scheme and redirect plan
2-3 working days
Choose a prefix, subdomain or domain and justify your choice in writing. The "old address → new" table is compiled here, which then becomes a 301-redirect plan.
3
Language routing in the engine
3-6 working days
We are deploying language branches, a switch with a transition to the same page, service pages and forms in each language. On Next.js, this is i18n-routing, on WordPress - WPML, on OpenCart - regular multilingualism.
4
Files for translation and filling of the finished product
2-8 working days
We give the text in structured files with separate fields under title and description, accept the translation back and upload it. The spread in days is large precisely because of the volume of the text, and not because of the number of languages.
5
hreflang, canonical, meta tags, sitemap
2-5 working days
We set mutual hreflang with x-default, self-referencing canonical, check that each branch is present in the sitemap, and add the Sitemap directive to robots.txt.
6
Verification in every language, analytics, transmission
1-4 working days
We go through the forms and service scripts in each language, look at the layout for long words, divide traffic by language in GA4, give instructions for setting up pages.
Technologies & integrations
What we build on and what it connects to
Stack
Next.js i18n-routing — language prefix and dictionaries out of the box; limitation: the new language is added by the release, the editor will not introduce it himself
React and TypeScript - typed translation keys catch a forgotten string on the build, not on the live site
WordPress + WPML — the editor handles languages itself; limitations: the plugin is paid, and on a large site it noticeably loads the admin
Native OpenCart multilingualism — when a language version is added to an existing store without changing the engine
nginx and HTTP/2 — language redirect rules and certificates if markets diverge on subdomains
Cloudflare — language prefix-aware cache; limitation: wrong cache key gives one language instead of another
Integrations
Google Search Console — separate properties for language versions
GA4 with language separation
Google Tag Manager
WPML
Crowdin - translation file sharing
eSputnik — newsletters in languages
What's included
Complete list of work and what you get as a result
Language address scheme—prefix in path, subdomain, or separate domain—with written justification for choice
Language routing: the switch leads to the same page in a different language, instead of dumping to the main page
hreflang with x-default and self-referencing canonical in each version - search reads them as variants of the same page
Interface translation: menus, buttons, field captions, form errors, 404 and thank you pages
Separate title and description for each language — its own snippet instead of a copy of the original
All language branches in the sitemap plus the Sitemap directive in robots.txt
Number, date and currency formats for language and case in templates — without "3 products" instead of "3 products"
Migration of existing content with analysis of old addresses and 301-redirects one to one
GA4 with separation by language versions - you can see which language brings hits and which is empty
Transfer: instructions on how to start a page at once in all languages, a guarantee of 30 calendar days
When this service isn't right
What's not included — so there are no surprises at delivery
The translation of the texts itself — we prepare the files and accept the finished translation from your translator
Legal adaptation of conditions under the legislation of another country
We do not use machine translation as a substitute for human translation
Multicurrency and local payment methods are a separate scope of work
Promote language versions in search after launch
Who it's for
Situations where this service delivers results
Scenario 1 of 4
The second language has already been added, but there are no requests from it
The switch in the hat works, the pages open, and in GA4 the second language gives units of visits. The reason is usually technical: the version did not get into the sitemap, or canonical leads from it to the main language, or hreflang declares a pair that does not exist. It should be checked by measurements, not by eye - at a live store, we saw how 590 addresses of the site map led to one branch out of the two announced.
We'll review your situation in a free audit
Scenario 2 of 4
You go to a nearby market and you need not an "English version", but an English site
The EU text and the US text are different texts, even if the language is the same. Here we ask not "how many languages", but "for which market": the answer depends on whether separate contacts are needed, whether the composition of services changes, and whether it makes sense to keep both versions on the same domain.
Scenario 3 of 4
A service site or product catalog where every page must sell in two languages
Here, the language version is not a translation of the menu, but a second set of landing pages with their own titles and descriptions. The most expensive thing in such a project is not the code, but the text: the volume is calculated in characters by page types even during the audit, because it determines the deadline.
Scenario 4 of 4
Language versions were made by different contractors at different times
A classic picture: one language was set by the site developer, the second was added by the seoshnik module, and the third was added by a plugin. Then the two engines start writing hreflang at the same time and conflict with each other. We untangle it: first we remove what is actually given, then we leave one mechanism and remove the rest.
A language prefix is on its way against a single domain to market
How this option differs from the alternative
A separate domain for each marketOur approach
Domain weighteach domain gains weight separately and from scratchaccumulates on one host, a new language does not start from scratch
How many places of administrationseparate sites, separate updates, separate backupsone codebase, one panel, one publication
hreflangstitched between hosts manually - this is where the sets most often divergeis placed inside the project and checked with a single check
Local signal for the marketstronger: local area, local contacts, local legal entityweaker: one domain and one zone
When to takemarkets serve different teams with different assortments and different conditionsthe same business speaks several languages
Free audit of language versions
Multilingualism breaks quietly: the pages exist, the switch works, and search only sees one branch. This is visible only by measurements, and we do them for free.
What we measure
What language versions are actually in the sitemapThe most frequent defect in our sample. On one site, all 590 unique map addresses led to only one language branch, although two were announced; on the other, not a single address of the second language got into the map.
Doesn't hreflang contradict itselfOn the measured store, hreflang was set up twice by two different mechanisms, and the sets contradicted each other: the link for the Ukrainian version provided content in another language.
Language codes and x-defaultWe check the validity of the codes. We encountered lang="ua" instead of uk and even lang="code" - the variable was not inserted into the template, and the page declared the language as a non-existent code.
Are the title and description really translated?Classic: the interface is translated, the language attribute is changed, and the title and description remain in the original language - two pages with the same meta tags, which the search engine reads as a duplicate.
Self-referencing canonical on each versionIf the canonical of all language versions leads to one, the remaining languages are dropped from the index along with all their content.
The volume of the text to be translatedWe calculate the real volume in characters by type of pages - the deadline and the budget for the translation, which you do not pay us, depend on this.
What you get
Document with measurements: which languages are declared, which are actually in the sitemap, where hreflang contradicts itself.
A list of pages where meta tags are not translated, with an explanation of the consequences.
The scheme of language addresses: according to what principle paths are built and what to do with old links.
Evaluation of the amount of text to be translated in characters by type of pages.
Timeline: 2-4 working days after receiving the site address
Why is it free
Because we don't know in advance whether it's a three-day setup or a three-week restructuring. Measurements give an answer in two to four days and remain with you.
What's next
After the audit, we give an estimate by stages. If it turns out that you only need to fix the hreflang and the sitemap, let's just say it's a few days of work.
Short form: your contact and site URL
Did not find your case?
Describe how it works on your side — we will tell you whether “Development of a multilingual site” fits and what it means in your situation. No brief and no call: one question, one answer.
Contract, act and 30-day warranty
Every project gets a written contract: scope, deadlines, amount, acceptance procedure. After delivery — act and invoice, then 30 calendar days of warranty.
Sole proprietor & bank transfer
The contractor is a registered sole proprietor. Payment by invoice with closing documents.
Rights & access — yours
Code, design and materials transfer to you after full payment. Domain, hosting, repository and analytics are registered to you.
Client portal instead of email chains
During the project you get access to a portal: contracts, invoices, acts and project status in one place.
European clients
Among our work — projects for Norway, Bulgaria, Moldova and Spain.
Verifiable numbers
Every case in the portfolio comes with a link to a live site and a technical measurement.
Audit first, then pricing
There is no price list on the site intentionally: the scope of the same work differs multiples between clients.
We say "no" when unsure
If the task isn't ours or the deadline is unrealistic — we tell you upfront.
What affects the price
Why two seemingly identical tasks are priced differently
The volume of the text, not the number of languagesTwo languages on a website with twenty pages and two languages on a product catalog with two hundred — different projects with the same number of languages. At the audit, we count marks by type of pages, and it is this number that moves the deadline more than anything else.
Status of the existing siteAdding language to a clean structure is one job. Untangling a site where language versions already contradict each other with two hreflang mechanisms is another: first we remove what is actually rendered, and only then change something.
Type of language addressesThe prefix in the path remains within the same project. A subdomain or separate domain adds handling of DNS, certificates, separate properties in Search Console, and hreflang linking between hosts.
Who translates and how quicklyFilling in the finished translation is a predictable stage. Waiting for the translation is not: if the files are with the translator for three weeks, the calendar term of the project is shifted by these three weeks, no matter how many days are in the plan.
Moving from old addressesIf the pages already have traffic, the analysis of old addresses and 301-redirects one-to-one is added to the work. Without it, the language version starts cleanly, and the old position is extinguished along with the references to it.
Languages with long wordsGerman, Hungarian and Finnish give lines twice as long as Ukrainian. Buttons, tabs and menu items are checked in each language separately - this is a separate pass through the layout, which is immediately visible at the evaluation stage.
Cases
Tasks and results in numbers — all metrics measured by us
online retail underwear store with a catalog of over 110,000 items
Task
Keep the three language versions in a directory where each size and color is entered in a separate entry, and keep the pages indexable.
Solution
OpenCart 3 over HTTP/2 with gzip. Three language branches: root ru, /ua/ and /pl/. The site map is made with an index of 42 submaps. Self-referential canonical on each language version.
Result
Measurement 08/01/2026: Three branches return HTTP 200, canonical in place and self-referencing in each. The catalog of 115,456 items was confirmed by two methods — a standard search and a site map, with a discrepancy of 2.4%. Defects were found specifically in the language part: hreflang was set up twice by two different mechanisms, and the link for uk-ua gives Russian content; the Ukrainian version has lang="ua" instead of the valid uk, and the Polish version has lang="code" and dir="direction", that is, no variables have been inserted into the template.
a brand of natural cosmetics, a corporate website for the EU market
Task
Bring the brand to the European market in three languages so that each version has its own content and is correctly announced to search engines.
Solution
Site on OpenCart 3 with three language versions bg/en/ru and hreflang. Local store layout: Store with opening hours, contact point and search function. Courier delivery across the country with a free threshold.
Result
Measure 07/31/2026: Three working language versions with hreflang, six JSON-LD types on the main — Store, WebSite, SearchAction, ContactPoint, EntryPoint, OpeningHoursSpecification. First server response 512.6 ms at 220.4 KB of HTML. Defects found: there is no analytics counter on the main page, and the sitemap and robots.txt return an empty body or HTML instead of XML - three language versions exist, but no one lists them for search.
B2B catalog of spare parts for industrial sewing machines
Task
Keep two language versions of the directory so that the search receives a complete list of addresses without duplicates.
Solution
Bilingual version with hreflang uk-ua / ru-ua and x-default. The site map is compiled into one complete map for the entire catalog.
Result
Measurement 07/31/2026: hreflang uk-ua / ru-ua / x-default are correct, the site map contains 1,992 addresses without any duplicates — 1,848 cards and 138 categories. First response 388.1 ms, full download 419.5 ms. Defect found: robots.txt does not contain a Sitemap directive, although the map itself is working and complete - the search has to find it randomly.
What we need from you
We can't start without this — best to prepare in advance
1List of languages and markets for which they are made - English for the EU and English for the US are different texts.
2Who translates: your translator, an agency or a native speaker on your side.
3Available site with access if we add the language to the finished project.
4The decision of which language is the main one and what the visitor who entered without a choice sees.
5Local contacts, if the market needs its own phone number and address.
6One person who accepts translation for each language.
If something is missing — let us know, we'll help you gather it or do it as a separate task.
FAQ
Most frequently asked questions — with concrete answers
How to understand what is wrong with the language versions?
Look at the sitemap, not the switch. In the spice shop we measured, all 590 unique map addresses led exclusively to one language branch, although the markup declared two. At the store of garden equipment, only the Ukrainian-speaking branch was included in the map, and the Russian one, declared in hreflang, was not. The switch worked in both cases, and the owners were sure that everything was fine.
Prefix in path, subdomain or separate domain?
By default, the prefix in the path: one code base, one administrative panel, the weight of the domain is accumulated on one host. A subdomain makes sense when markets serve different teams with different content. A separate domain — when a local domain zone and a separate legal presence are critical for the market. Mixing approaches is not worth it: then hreflang has to be stitched manually between hosts.
Is it possible to do the translation automatically?
We don't do that. UI machine translation is still alive, commercial text machine translation is not: it produces grammatically correct sentences that don't sell anything, and in sensitive niches produces outright errors. We prepare text files, you give them to the translator, we upload the finished result and check the layout - long words in German and Hungarian break the buttons, and this should be seen before launch.
What is x-default and why is it?
This is an indication of which version to show a visitor whose language does not match any available. Without it, the search decides itself, and the decision is not always in your favor. In the measured B2B catalog of sewing spare parts, the pair uk-ua / ru-ua is supplemented with the correct x-default — there language versions were made deliberately. Where a second language has been added hastily, x-default is usually simply absent.
Do I need separate meta tags for each language?
Necessarily. The most common error we saw: the interface was translated, the language attribute of the page was changed, and the title and description remained in the original language. For search purposes, these are two pages with the same meta tags — that is, a duplicate, and one of them will fall out of the search results. Localization of meta tags is included in the work, and not in a separate line of the estimate.
How long does it take to add a language to an existing site?
12-30 working days depending on the volume and condition of the site. Parsing and address scheme 2-4 days, setting up language routing 3-6, preparing files for translation 2-3, filling the finished translation 3-8, checking hreflang, sitemaps and redirects 2-4, testing 2-3. Translation time is not included here: it is on the side of your translator and usually goes in parallel.
Will traffic drop after going multilingual?
Swelling for a few weeks is possible - this is a normal reaction to a change of addresses, and we will not promise that it will not happen. What reduces the risk: one-to-one 301-redirects from old addresses, preservation of title pages that already give traffic, and a full sitemap with all language branches immediately after launch. The error after which the traffic does not return is "all to main" redirects.
Can I launch one language now and add another later?
It is possible, and often cheaper. There is only one condition: we set the address scheme for several languages at once, even if only one is working. Then the second language is added as a branch, not as an entire site move with redirects. If the first version lived at addresses without a language prefix, the appearance of a second language almost always means a change of addresses - and this is where the weeks of subsidence asked about above come from.
Who makes sure language versions don't diverge after launch?
The person is on your side, and it's fairer to say it right away. The language version multiplies the amount of content that needs to be maintained: every new page, every price change, and every edit in the description must be repeated in all languages. We put it in the interface - the page without translation is clearly marked in the admin, and the instructions describe how to start it in all languages at once. But if no one accepts the translation, the versions will diverge in six months, and no technical adjustment can withstand this.
Send the website address and the list of languages you want.
In response, there is a document with measurements of language versions, a scheme of addresses and an assessment of works by stages. If it turns out that it is enough to fix the hreflang and the sitemap, we will say so in the first email.
From measured casesMeasurement 08/01/2026: Three branches return HTTP 200, canonical in place and self-referencing in each
There is no price list on the site on purpose: the same work differs several times over between two clients, and a “from” figure explains nothing in that case. First a free audit — we count your pages, duplicates and speed — then we name the sum and the deadline and fix both in the contract.