DEV Community

Cover image for Multilingual SEO from scratch: lessons from building a 24-URL trilingual site for a local business
Lilian
Lilian

Posted on • Originally published at plusrent.md

Multilingual SEO from scratch: lessons from building a 24-URL trilingual site for a local business


I run a small car rental business in Moldova called PlusRent. Last year I noticed our site was getting almost zero traffic from search despite having decent content — and decided to dig into why. What started as "fix the meta tags" turned into a 6-month deep dive into multilingual SEO, structured data, and the new wave of AI-crawler optimization.
I'm writing this up because nobody seems to talk about doing this for a small business in a tiny country. Most SEO content assumes you're an e-commerce site with 10,000 SKUs or a SaaS company with $5M ARR. The mechanics are different when your total addressable market is one city of 600,000 people.
The constraint that shapes everything: 3 languages, 1 country
Moldova is officially Romanian-speaking, but Russian is the de-facto second language used by maybe 30-40% of the population. Add a steady stream of English-speaking business travelers, and you get a site that needs to work in three languages from day one — or you cut off chunks of your market.
This sounds simple. It's not.
The naive approach is to translate everything and call it done. Google then has to figure out which version to serve to whom, and it often gets it wrong. A Russian-speaking Moldovan from Chișinău searches "аренда авто Кишинев" and lands on the Romanian page. Bounce rate goes through the roof. You lose the conversion.
The correct approach involves hreflang annotations, separate URLs per language, canonical tags, and a sitemap.xml that explicitly tells Google which page belongs to which audience.
Here's what our final structure looks like:
plusrent.md/ro/cars ← hreflang="ro-MD"
plusrent.md/ru/cars ← hreflang="ru-MD"

plusrent.md/en/cars ← hreflang="en"
Each page has all three references in its

:
html



The x-default is the catch-all fallback for languages we don't explicitly target. For us it points to Romanian because that's the official language.
Important gotcha: hreflang requires reciprocity. If page A says "my Russian version is at page B," then page B must say "my Romanian version is at page A." Skip one direction and Google ignores the annotation entirely. I learned this the hard way after spending two weeks wondering why our Russian pages weren't ranking.
Keyword cannibalization is real and it killed us
This was the bug that took the longest to find. Initially we had:

Homepage targeting "car rental Chișinău"
Catalog page also targeting "car rental Chișinău"
Long-tail service pages also targeting variations of "car rental Chișinău"

Google had no idea which one to rank, so it picked one essentially at random and demoted the others. Our catalog page (which has all our inventory and is the highest-converting URL) was outranked by our homepage for almost every commercial query.
The fix was explicit keyword separation across the page hierarchy:
PagePrimary keywordIntent/"car rental Chișinău"Service/transactional/cars"rental car fleet Chișinău"Inventory/browse/sofer-treaz"designated driver Chișinău"Different service entirely/transfer-chisinau"Chișinău airport transfer"Specific use case
After this restructuring, organic clicks to the catalog page doubled in 6 weeks. Same content, just less internal competition.
If you're running a multi-page site, audit yourself: do two pages target the same head term? If yes, pick one to "own" it and rewrite the other.
JSON-LD: the boring superpower
Structured data is one of those things developers reflexively skip because "it's just SEO stuff." It's actually the single highest-leverage thing you can do for visibility in 2026.
We have 9 JSON-LD blocks per page:
javascript// On our homepage:

  1. AutoRental (the main business type)
  2. Organization (corporate identity)
  3. BreadcrumbList (site hierarchy)
  4. WebSite (with search action)
  5. LocalBusiness (with aggregateRating)
  6. FAQPage (with 8 Q&A pairs)
  7. Service (specific service offerings)
  8. SpeakableSpecification (voice search)
  9. WebPage (the page itself) The LocalBusiness schema with aggregateRating is what gives you the star rating in Google search results. The FAQPage schema is what generates those expandable Q&A boxes in SERPs. Both are massive CTR boosters. Real impact: our SpeakableSpecification block tells voice assistants which CSS selectors contain content suitable for being read aloud. When someone asks Siri "what's a designated driver service in Chișinău," our content can get pulled directly into the spoken response. json{ "@context": "https://schema.org", "@type": "WebPage", "speakable": { "@type": "SpeakableSpecification", "cssSelector": ["h1", "h2", ".citability-block"] } } Boring to write. Massive payoff. The AI crawler question (and llms.txt) This is the part of modern SEO almost nobody talks about. In 2024-2025 a whole new category of crawlers emerged — GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot, Google-Extended, Applebot-Extended. They're crawling sites to train and serve AI models. Default behavior of most sites: these crawlers either get blocked outright (by overcautious robots.txt rules) or get the same treatment as random scrapers. Both miss the opportunity. We do two things:
  10. Explicit allow signals in : html
  11. A /llms.txt file at the root. This is a new proposed standard (originally by Jeremy Howard) for telling AI systems how to consume your site. Think of it as a structured README for LLMs. Ours is ~470 lines covering:

Company identity (with Wikidata Q-IDs for entity resolution)
All services with definitions and pricing
Multilingual FAQ
"AI Citation Templates" — pre-written passages we'd like AI models to quote
Sitemap of canonical URLs
Crawler authorization (explicit allow list)

The result: when someone asks ChatGPT "is there a designated driver service in Chișinău," ChatGPT can quote our content directly with our company name. That's free customer acquisition.
IndexNow: instant indexing for Bing and Yandex
This is a protocol I wish I'd discovered earlier. Google has Search Console for sitemap submission, but Bing and Yandex have something better: IndexNow — a simple HTTP API that lets you ping search engines instantly when content changes.
Setup is 10 minutes:

Generate a hex key (32+ chars)
Host it at https://yoursite.com/{key}.txt
POST your URL list to https://api.indexnow.org/IndexNow

Sample payload:
javascript{
"host": "plusrent.md",
"key": "mykey",
"keyLocation": "https://plusrent.md/mykey.txt",
"urlList": [
"https://plusrent.md/en/",
"https://plusrent.md/en/cars",
"https://plusrent.md/en/sofer-treaz",
// ... 24 URLs total
]
}
One POST, and Bing + Yandex + Naver + Seznam all get pinged simultaneously. Our 24 URLs went from "discovered eventually" to "indexed within 72 hours."
You can wire this into your CI/CD or CMS — after every deployment that touches public content, fire off an IndexNow ping. Bing sees your changes in seconds.
The one thing IndexNow doesn't cover is Google, which has its own way (Search Console + sitemap.xml).
What we still haven't figured out
A short list, because pretending you've solved everything is a credibility killer:

Backlinks at scale. Our Domain Rating is still under 20 because we've never run real outreach. Working on it.
Long-form content. We have great service pages but no blog. Long-form drives long-tail traffic. We just started.
Multilingual og:image. Each language version uses the same Open Graph image. Should be language-specific.
Schema validation drift. Adding/editing JSON-LD without strict validation has bitten us twice. Need automated checks in CI.

TLDR for builders
If you're running a small business site and want it to actually rank:

Use hreflang properly if you serve multiple languages — both directions, with x-default
Separate keyword clusters across pages — no two pages should target the same head term
Add structured data — LocalBusiness, FAQPage, AggregateRating are massive CTR boosters
Allow AI crawlers explicitly and consider an /llms.txt file
Use IndexNow for Bing/Yandex instant indexing
Test everything — Google Rich Results Test, Schema.org validator, Yandex Webmaster

None of this requires a CMS or an SEO agency. Our site is hand-built HTML with i18next for translation. The hard part isn't the tech — it's the discipline of doing all the boring things consistently.
If you're curious what this looks like in production, the site is plusrent.md. Happy to answer questions in comments.

I run PlusRent, a car rental + designated driver service in Chișinău, Moldova. We hand-built the site in HTML + i18next, and I write occasionally about the technical side of running a regional business.

Top comments (0)