How to Translate a Ghost Site Into Multiple Languages
Ghost is a fantastic publishing platform. Clean editor, fast performance, built-in memberships and newsletters. But multilingual support? Basically nonexistent.
Ghost lets you set a single language attribute for your site and supports theme-level string translation (buttons, labels, dates). That's it. There's no way to create translated versions of your posts, no language switcher for visitors, and no built-in translation workflow. If you publish in English and someone from Brazil visits your site, they see English or they leave.
I looked into this after trying to add Spanish to a Ghost newsletter site. The official Ghost docs literally say "Ghost itself does not support the management of multi-language content" and suggest running separate Ghost installations per language. That's insane for most people.
Here's what actually works.
Your options for making a Ghost site multilingual
Run separate Ghost instances per language
This is Ghost's official suggestion. Set up a second Ghost installation for your Spanish site, a third for German, and so on. Each one has its own domain or subdomain, its own content, its own member list.
It works in theory. In practice, you're maintaining multiple Ghost installs, paying for multiple hosting plans, duplicating every post by hand, and managing separate subscriber lists. For a large newsroom with dedicated translators? Maybe. For everyone else? No.
Use a proxy service like Weglot
Weglot and similar tools sit between your visitors and your Ghost site, intercepting pages and swapping in translated content. You get separate URLs per language (/fr/, /es/), proper hreflang tags, and Google indexes each version separately. The SEO setup is legitimate.
The downside is cost. Weglot starts at $15/month for one language and 10,000 words. A Ghost blog with a hundred posts will blow past that fast. By the time you need five languages, you're looking at $50–200/month depending on word count. And all your traffic routes through their servers, which adds a dependency you might not want.
Add a client-side translation widget
This is the lightweight option. You paste a script tag into your Ghost site's code injection settings, and visitors get a floating language switcher. They pick their language, the text on the page swaps, no reload. Translations are generated once and served from cache.
OwOsy Translate works this way. One script tag in Ghost's code injection, and your site supports 50+ languages. Free for one language.
The tradeoff is SEO — since translation happens in the browser, search engines only index your original language. For blogs focused on organic search in multiple languages, a proxy tool is the better fit. For everything else (membership sites, newsletters, personal blogs, documentation), a widget handles it.
Step by step: adding translation to your Ghost site
1. Create an account and add your site
Go to app.owosy.com and sign up. In the dashboard, add your Ghost site URL — either your custom domain or your *.ghost.io address.
2. Choose your languages
Select your source language (whatever you write in) and pick your target languages. Free plan gives you one language. Starter ($9/mo) gives you three, Growth ($19/mo) gives you ten.
Think about your audience. Check your Ghost analytics or Google Analytics to see where your readers come from. If you're getting traffic from Germany and Japan, start there.
3. Scan and translate
Click "Scan Site" in the dashboard. OwOsy crawls your published Ghost pages and extracts the text content — posts, pages, navigation, everything visible to readers.
Then hit "Translate." The system processes your content through a context-aware translation engine, and the results get cached on Cloudflare's edge network. This happens once. Every visitor after that gets the cached version — no processing, no delay.
4. Copy your embed script
Go to Settings in the OwOsy dashboard. You'll see a script tag like:
<script src="https://api.owosy.com/widget.js" data-site="your-site-id"></script>
Copy it.
5. Add it to Ghost
This part is straightforward because Ghost has built-in code injection:
- In your Ghost admin panel, go to Settings → Code injection
- Paste the script tag in the Site Header section (or Site Footer — both work)
- Click Save
That's it. No theme editing, no file uploads, no custom integrations. Ghost's code injection works on every theme and every Ghost plan, including the free tier.
6. Check your site
Visit your published Ghost site. You should see a floating language button. Click it, pick a language, and watch the page text update. Headlines, body text, navigation links, buttons — everything translates in place.
If a brand name or technical term got translated when it shouldn't have, add it to your glossary in the OwOsy dashboard. The glossary locks specific terms so they stay the same across all languages.
Ghost-specific things to know
Posts vs pages: OwOsy scans whatever's publicly accessible on your Ghost site. Both posts and pages get picked up. If you publish a new post, you'll want to re-scan and re-translate from the dashboard so the new content gets cached.
Membership content: If you have members-only posts behind Ghost's paywall, the scanner can only read the public preview. Gated content behind a login wall won't get translated unless it's publicly visible at the URL.
Themes: The widget uses Shadow DOM, so it's completely isolated from your Ghost theme's CSS. Whether you're running Casper, Edition, Ruby, or a custom theme, the language switcher won't break your layout and your theme won't break the switcher.
Ghost(Pro) vs self-hosted: Works on both. Ghost(Pro) supports code injection out of the box. Self-hosted Ghost also supports it. No difference in setup.
What about SEO?
Same honest answer as with any client-side translation: Google indexes your original language only. Translated versions don't get their own URLs and aren't crawlable by search engines.
For a Ghost blog where organic multilingual SEO matters (say, a content-heavy publication targeting French and German search results), you want a proxy tool that creates real /fr/ and /de/ paths. That's Weglot's territory, and you'll pay for it.
But for Ghost membership sites, newsletters, personal blogs, documentation sites, or any Ghost site where the goal is "let international readers actually read my content" rather than "rank in foreign Google results"? The widget approach covers it at a fraction of the cost.
What does it cost?
Free for one language and 2,000 words per month. No credit card needed. Paid plans start at $9/month for three languages and 15,000 words. Full pricing details on the Ghost translation page.
FAQ
Does Ghost support multiple languages natively?
No. Ghost supports setting a site-wide language attribute and theme-level string translation (like translating "Read more" buttons), but it has no system for translating actual post or page content into multiple languages. You need a third-party tool.
Do I need a paid Ghost plan to use this?
No. Ghost's code injection feature is available on all plans, including the free self-hosted version and Ghost(Pro) Starter. You just need to be able to access Settings → Code injection in your Ghost admin.
Will this work with my Ghost theme?
Yes. The translation widget loads in a Shadow DOM container, which means it's completely isolated from your theme's CSS. It works with every Ghost theme — official themes like Casper and Edition, marketplace themes, and custom themes.
What happens when I publish a new Ghost post?
New posts won't be automatically translated. You'll need to open the OwOsy dashboard, re-scan your site to pick up the new content, and hit translate. The system only retranslates what's changed, so it's quick.
That's it
Adding translation to a Ghost site is a five-minute job. Sign up, translate, paste one line into code injection, save. Your international readers get content in their language, and you don't have to run five separate Ghost installations to make it happen.
Comparing options? See our Weglot vs OwOsy breakdown for Ghost.
Disclosure: This guide is published by the OwOsy team. We build OwOsy Translate, so we have a financial interest in you choosing our product. We've tried to present all options fairly.