Use case

Translating your whole blog without breaking it on the way back

By Axel Antas-Bergkvist Published May 26, 2026 Updated May 27, 2026

Machine translation got good. That part is solved. What stays hard is everything wrapped around the words — the tags, the slug, the feature image, the internal links, the metadata — surviving the trip from your source language into another one and back into Ghost without quietly losing a piece. Most people who try to do this on Ghost end up with a Make scenario that fires on publish, ships the body to DeepL, and tries to reassemble a second post on the far side. It works until it doesn’t, and when it doesn’t you find out from a reader who hit a slug collision or a callout that came back as flat prose.

There’s a calmer way to do this, and it starts by bringing your whole blog into one place an AI can read and you can review.

Connect the blog first

Specter connects to your Ghost blog in the browser — paste your Admin API key and every post lands in one workspace as clean, editable content with its title, tags, status, feature image, and excerpt intact. There’s nothing to install.

That single step changes the problem. Instead of translation being a thing that happens inside an automation you half-remember configuring, it becomes a recipe you run across content you can see. Your source-language posts are right there, whatever you translate them into sits alongside, and for the first time you can look at the original and its translation together and confirm they actually match. Subscribe now and your workspace opens with 500 free credits.

Run the translation recipe

Run a translation recipe across the connected archive. Specter isn’t an AI itself; it’s the workflow layer that runs the model over your whole site and shows you every change before it ships. The instruction you give it is the important part. You don’t want it translating blindly — you want it translating the prose while leaving the scaffolding alone:

Translate the body and the human-readable fields like title and excerpt. Preserve the tags, keep the slug stable so it doesn’t collide with the original, leave image URLs untouched, and rewrite internal links thoughtfully rather than dropping them.

Because the whole archive is in one workspace, this is a single sweep instead of one webhook firing per post, and there’s no stitching step where a tag or a feature image gets lost in transit. If you’re translating a section rather than the whole blog, the same recipe applies at smaller scale. Browsing and reviewing are free; only the AI run spends credits.

Review the diff before anything ships

This is the part the brittle automation never had. Before a single byte reaches Ghost, Specter shows you the result as a diff: exactly which posts would be created, which would be updated, and which it would flag as a conflict. You read the scope of the whole translation pass as a list of concrete changes, not as a leap of faith — and reviewing costs nothing. After translating two hundred posts, that diff is the difference between a clean publish and a quiet mess you discover weeks later.

It matters here more than almost anywhere else, because translation is exactly where fidelity gets tested. Ghost posts aren’t really markdown — they’re Lexical documents, and what Specter shows you is a faithful projection of that, not the underlying truth. For ordinary prose the round-trip is clean. For posts built heavily out of Koenig cards — galleries, embeds, toggles, bookmarks — a projection can lose detail on the way back, and the diff is where you catch that before it lands on a published page. Read how Specter handles Ghost cards before you translate a card-heavy archive, because it spells out where the edges are. The point of the diff is to let you confirm a callout is still a callout before you ship the German version, rather than finding out afterward.

When the diff looks right, you publish back. The translated posts go up to Ghost, the metadata you preserved stays preserved, and the internal links you rewrote point where you meant them to. Every publish keeps a snapshot behind it.

Same blog, or a connection per language

Where the translations land is your call, and it depends on how your site is built. If you publish all your languages within one Ghost instance, the translated posts publish back into that same blog alongside the originals. If your setup runs one Ghost instance per language — a common and clean pattern — then each instance is simply its own connection, each with its own Admin API key, that you translate, review, and publish independently.

It’s worth being precise about the boundary, though. Specter works on the content layer: the posts, their text, their metadata. It doesn’t configure multilingual routing for you. The theme work, the URL structure between languages, the hreflang tags and canonical setup that tell search engines which version is which — all of that lives in your Ghost theme and infrastructure, and it’s a separate job from anything Specter touches. What you get from Specter is the part the pipelines kept getting wrong: the actual content of each language, correct and in sync, with a diff standing between your translation pass and your live site.

If you want the broader picture of running a multilingual publication this way, the companion piece is Specter for multilingual sites. And once your archive is connected, the same workflow covers more than translation — it’s also how you’d bulk-edit Ghost SEO across every post at once. Subscribe now →


Prefer to run translation on your own machine, over .md files with your own AI or a DeepL script, nothing routed through our servers? The desktop and open-source edition keeps the whole pass local.