Hotorize
Todas las entradas

Nine languages without moving a single URL

Escrito en English

Adding languages to a site that is already indexed is mostly a routing problem wearing a translation costume. The translation is work, but it is predictable work. What breaks a site is moving its URLs.

The default is to move them

The tidy way to build a multilingual site is to put every language behind a prefix: /en/services, /ja/services, /de/services. The routing is symmetrical, there are no special cases, and every page is reached the same way.

It also means hotorize.com/services — an address that exists, is indexed, and sits in whatever emails and decks have gone out — becomes a redirect. Redirects are not free. Every link pointing at the old address now costs an extra round trip, and the crawler has to be told, page by page, that the thing it knew about has moved.

So we did not do that. English keeps its bare URLs. hotorize.com/services is still hotorize.com/services, serving the same page it served last week.

What that costs

One special case, in one file. Requests without a language prefix are rewritten internally to the English route — the address bar never changes — and requests that do carry the default prefix are redirected back out, so /en/services answers with a permanent redirect to /services.

That second rule matters more than it looks. Without it, every English page exists at two addresses, and the canonical tag spends the rest of its life arguing with the crawler about which one counts.

Translation is the easy half

Every string a visitor reads moved out of the components and into one dictionary per language. English is the schema: the other eight are type-checked against it, so a missing key fails the build rather than rendering undefined on a live page in a language nobody on the team reads.

That last part is the whole reason to do it this way. A missing translation on a site you can read is embarrassing. A missing translation on a site you cannot read is invisible until a customer finds it.

What we did not automate

There is no automatic redirect based on browser language. A visitor whose browser is set to Japanese gets a bar offering the Japanese version, and nothing happens until they click it.

Automatic redirection sounds helpful and behaves badly. Googlebot always sends Accept-Language: en, so it would see a different page than a Japanese reader gets from the same URL — and a link shared between two people would resolve to two different pages depending on who opened it.

The part that has no technical answer

Eight of the nine languages have a proofreader lined up or do not need one. Te Reo Māori has neither, and machine translation into it is noticeably weaker than into the others — weak enough that in New Zealand, using it badly is worse than not using it.

That is not a problem the build solves. It is a problem you solve by finding a speaker, or by not shipping the language. Knowing which of those you are doing is the part that matters.

Busquemos la fuga.

Una auditoría gratuita de por dónde pierden dinero tu sitio, tu visibilidad en buscadores y tu flujo de leads. Sin discurso de venta: primero leemos los datos.

Reservar una auditoría gratuita→