Our Blog Now Speaks Seven Languages: What We Learned About Multilingual Publishing
German, English, Spanish, Portuguese, French, Italian, Dutch: over the past weeks, the hafenstudios blog went multilingual, and new posts now go live in all seven languages on the same day. It turned out to be less of a translation project and more of a lesson in what multilingual publishing actually means. Here's that lesson, passed on.
We've been preaching for weeks that a language is a market. Eventually the uncomfortable question comes up: why does our own blog only speak German? "No time" is honest, but it's not an argument we'd accept from anyone else. So we did it: the hafenstudios blog now publishes in seven languages, and the five posts from July 30, 2026 were the first to launch on the same day in four languages: German, English, Spanish, Portuguese.
This post is the workshop log for that: what we built, what we underestimated, and what you can take away for your own website.
Lesson one: translating is the smallest part
Translating a blog post itself is quick work these days. AI translation has gotten good, and with editorial review, it's a defensible approach too. What comes after is the real work, and it goes by three names:
Translated addresses
A Spanish reader who finds a Spanish article through Google shouldn't see a German address in the URL bar. That's why every language version gets its own, translated slug: wordpress-langsam-beschleunigen becomes acelerar-wordpress. It's tedious work, but it's part of what decides whether a page reads as native or as an import in its target market, to search engines just as much as to people.
hreflang clusters that check out
Every language version tells search engines in the page head which siblings it has: the German article points to every version that actually exists, and each version points back. Miss one direction and Google tends to ignore the whole cluster. That is why the number of entries differs from post to post. For this text there are four, for the posts from late summer there are seven. That is not a blemish, it is the rule: a cluster names only what exists. This is the part you get wrong by hand exactly once, and after that you either automate it or maintain it very, very carefully.
Links that stay in the language
The most uncomfortable detail question: what does a link in the Spanish article do when the linked article only exists in German? Our rule is strict: translated posts only link to targets in the same language. If the target doesn't exist, the link goes. A reader forced to switch languages mid-text without warning forgives that exactly once.
Lesson two: language versions have to be normal pages
Technically, we could have taken the easy route: a script that swaps text at runtime, an address with ?lang=es tacked on, done. We actually went down that path at the start, and turned back. A language version that only exists via script doesn't reliably exist for search engines, doesn't share cleanly, and arguably doesn't even really belong to you.
Today, every language version we publish is a full, standalone page with its own address, its own title, its own metadata. That's exactly the principle Wimpel is built on: a translation is a completely normal post, not an attachment in a special table and not text behind a proxy.
Lesson three: not every language gets equal treatment
Seven languages sounds like parity, but it isn't. German is our source language and stays the most extensive, because every text starts there. English, Spanish, and Portuguese were the markets where our topics are demonstrably searched for, so they were the first to get same-day publication. French, Italian, and Dutch joined later and are working through the backlog in stages, most important articles first.
So the difference today is no longer about the new posts, but about the old ones. Every new post goes live in all seven languages on the same day, while the archive from before stays unevenly distributed. 37 posts already exist in all seven languages, and the rest is catching up (as of September 7, 2026).
That's probably the most useful thing to carry over to your own project: multilingual publishing isn't an all-or-nothing decision. Two languages done consistently beat seven done half-heartedly. And the order isn't decided by gut feeling: it's decided by where your content is actually being searched for.
Stocktaking: the blog on September 7, 2026
Numbers instead of impressions, counted on the published pages rather than estimated: the blog consists of 74 German posts and 285 translations, 359 pages in total. The distribution shows how unevenly a multilingual archive grows once you write it down honestly.
| Language | Posts online | Address of the same post |
|---|---|---|
| German (source language) | 74 | /blog/wpml-alternative.html |
| English | 63 | /en/blog/wpml-alternative.html |
| Spanish | 60 | /es/blog/alternativa-wpml.html |
| Portuguese | 51 | /pt/blog/alternativa-wpml.html |
| French | 37 | /fr/blog/alternative-wpml.html |
| Italian | 37 | /it/blog/alternativa-wpml.html |
| Dutch | 37 | /nl/blog/wpml-alternatief.html |
The right-hand column shows a single post, our rundown of the WPML alternatives, in all seven addresses. Two things stand out. First, the English address is identical to the German one, because "WPML" is a product name and "Alternative" is spelled the same way in both languages. A translated slug is not an end in itself: it has to be right in the target language, not merely look different. Second, Spanish, Portuguese, and Italian share the same slug here and differ only in the language directory. That stays as it is, because every language keeps its own page even when the translated title happens to come out identical.
What running seven languages demands every day
The most expensive misconception about multilingual publishing is that the work ends with the translation. Here, every post runs through the same five steps, and the fifth is the one most easily skipped and most bitterly missed:
- The German text is final. Nothing gets translated until the source stops moving. Otherwise every later correction to the German turns into seven corrections, one per language.
- Raw translation, then editing. The machine delivers, the editors decide. Examples, legal references, and market names get checked, not passed through.
- One slug per language. Its own address, coherent in the target language, and never changed again afterwards.
- hreflang clusters in every direction. Every version names every other one. A new translation always means touching all the siblings, not just the new file.
- Machine sign-off across all seven directories. A check script hunts for dead relative links, duplicate hreflang entries, answers in the FAQ block that drift from the structured data, prices in the schema that are not on the pricing page, broken character encoding, and unbalanced tags. If it reports anything, nothing goes live.
Step five exists because we learned it the expensive way. A generator once appended hreflang blocks instead of replacing them, and afterwards 329 files carried two blocks stacked on top of each other. You do not find something like that by hand. Which is exactly why multilingual publishing belongs in a tool over the long run, not in a habit.
What this has to do with Wimpel
Full transparency: our blog is a hand-built static website, not WordPress, and we maintain the clusters with our own tooling. But every rule in this post lives as a feature inside Wimpel, our multilingual plugin for WordPress: translations as normal posts with their own permalink, hreflang clusters that only get output once they're complete, a language switcher that never leads to a dead end, and a market assistant that prices out the cost of a new language before launch instead of after.
So if you're reading what we built by hand here and thinking "I want that, minus the manual labor": that's pretty much the product description of Wimpel.
Your WordPress, multilingual, without hand-maintaining hreflang & co.
Wimpel turns translations into normal posts, maintains hreflang clusters automatically, and prices out the cost of a new language before it's built. 59 euros a year, 14 days to try with no payment details.
Frequently asked questions
Which languages is the hafenstudios blog available in?
Seven: German as the source language, plus English, Spanish, Portuguese, French, Italian, and Dutch. New posts appear in all seven languages on publication day, while the older archive is translated in stages. As of September 7, 2026 that is 74 German posts and 285 translations, 359 pages in total.
Why isn't every post available in all seven languages?
Because the archive is older than the rule. Since August 27, 2026, every new post goes live in all seven languages on the same day, and the posts before that are being caught up in order of importance. As long as a version is missing, the hreflang cluster does not name it: a smaller, complete cluster beats a pointer to a page that does not exist.
Are the translations created by AI?
The raw translation, yes. The sign-off, no. Every language version is reviewed editorially, gets a translated slug, its own metadata, and links that stay in the target language. That exact division of labor (machine translates, editors decide) is also the principle behind Wimpel.
Why do translated slugs matter?
Because the address is part of the content. A Spanish article under a German address reads as an import to readers and search engines alike. The translated slug also carries the target language's keyword, which matters for discoverability in that market.
Does the hafenstudios blog itself run on Wimpel?
No, and we'd rather say so ourselves: our blog is a static website without WordPress. But the principles (translations as standalone pages, complete hreflang clusters, language-faithful links) are the same ones Wimpel automates for WordPress websites.