How to Migrate From Ghost to a Self-Hosted Blog
Ghost is an excellent platform, but if you want a different stack or fewer moving parts, here is how to export your Ghost content and import it into a self-hosted blog without losing your URLs or search rankings.
Ghost is a genuinely good publishing platform, and this guide is not an argument against it. But teams do move off it — usually because they want a different runtime than Node.js, fewer moving parts than a Node app plus a MySQL database to patch, or an escape from a Ghost(Pro) bill that climbs with their list. If that is you, here is how to move your content to a self-hosted blog you fully own, without breaking the SEO you have already earned.
What Ghost lets you take with you
Ghost is open about your data, which makes leaving straightforward. From Settings > Migration (or the Labs area, depending on your version) you can export your entire publication as a single JSON file containing your posts, pages, tags, and authors. Your images live in the content folder, and if you download them alongside the JSON you have everything you need. Nothing here is locked behind a proprietary format.
Be realistic about one thing before you start: your posts, pages, tags, and images move cleanly, but active paid subscriptions do not transfer between platforms. Your subscriber list is exportable, but a member's live Stripe billing relationship stays with the account it was created under. Plan how you will re-invite paying members before you switch.
Export your content from Ghost
In the Ghost admin, open the migration or export tool and download the JSON export. If your images are bundled, Ghost will hand you a .zip that contains both the JSON and the image files. Keep that archive intact — a good importer can read the images straight out of it, so you avoid re-uploading anything by hand.
- Export the publication as JSON (posts, pages, tags, authors).
- Download your images, or keep the bundled
.zipGhost produces. - Note your current permalink structure so you can preserve URLs.
Import it into Inkwell in one step
This is where a self-hosted engine can save you a weekend. Since v1.0.4, Inkwell imports a Ghost export directly from Admin > Import: upload the JSON (or the .zip), preview exactly what was found, choose what to bring in, then run a batched, resumable import with live progress and a downloadable report. Referenced images are downloaded and converted to WebP, images bundled in the .zip are read straight from the archive, imported HTML is sanitised, and where a Ghost body has no rendered HTML the importer falls back to a best-effort conversion. Best of all, the whole import can be undone if the result and the preview do not match, so you can rehearse the move safely.
Migrate the content carefully, but migrate the URLs religiously. A 301 is what tells Google your rankings should follow you.
Keep your URLs and your SEO
The step that protects your search traffic is redirects. If your new post slugs differ from the old Ghost permalinks, every inbound link and ranking points at a dead page unless you redirect it. Inkwell's importer creates those permalink redirects for you as part of the import, and its redirect rules also support 410 Gone for any URL you deliberately retire, which de-indexes it faster than a lingering 404. For the general principle and a manual approach, our WordPress migration guide walks through redirect mapping in more detail.
What to check after you switch
Once the import finishes, spend an hour verifying rather than assuming. Confirm a sample of posts render with their images, click through your old top URLs to confirm each one redirects, check your RSS feed is live, and submit your new sitemap in Search Console. If you are still weighing the decision itself, our Ghost vs self-hosted alternatives comparison lays out who each engine suits, and the full import steps live in the documentation.
Done patiently, leaving Ghost costs an afternoon and buys you a quieter stack you control end to end. Done in a rush, it costs you rankings — and the difference, as always, is almost entirely in the redirects.
Frequently asked questions
How do I export my content from Ghost?
In the Ghost admin, open Settings and use the migration or export tool to download a JSON file containing your posts, pages, tags, and authors. Download your images too, or keep the bundled .zip Ghost produces, and you have everything needed to move.
Will migrating from Ghost hurt my SEO?
Not if you preserve your URLs. Map every old Ghost permalink to its new path and serve 301 redirects so link equity follows you. Inkwell's importer creates these permalink redirects automatically, and supports 410 Gone for URLs you retire on purpose.
Can I move my Ghost members and paid subscriptions?
Your posts, pages, tags, and images import cleanly, and your subscriber list is exportable, but active paid subscriptions do not transfer between platforms because the Stripe billing relationship stays with the original account. Plan to re-invite paying members after you move.
Is the import reversible?
Yes. Inkwell's importer runs in batches with a preview and a per-item report, and the whole import can be undone if the result does not match what you expected, so you can rehearse the migration before committing to it.
Ready to host your own blog?
Inkwell is free, open-source, and self-hosted — your content, your server, your rules. Deploy in minutes on .NET 10.