5 min read

How to Migrate Your Blog to Ghost CMS Without Losing Your SEO (or Your Mind)

Ghost Theme
Ghost Theme April 15, 2026
How to Migrate Your Blog to Ghost CMS Without Losing Your SEO (or Your Mind)

So you've decided to move your blog to Ghost. Maybe you're tired of WordPress plugin updates breaking your site at 2am. Maybe you're done watching Substack take a cut of your subscription revenue. Maybe you just want something faster and cleaner. Whatever got you here, the question now is the scary one: how do you actually move years of content, your subscriber list, and your search rankings without breaking everything along the way?

The good news is that migrating to Ghost is a lot more manageable than it sounds, as long as you do it in the right order. Here's the real process, including the parts most guides gloss over.

Before You Migrate: Get Your House in Order

Don't touch the import tool yet. Do this first.

Back up everything. Export your full content, your media library, and your subscriber list from wherever you currently are. If you're on WordPress, that means your XML export plus a separate backup of your uploads folder. If you're on Substack or Medium, export your posts and your subscriber CSV before you do anything else. You want a local copy of everything, independent of any migration tool.

Audit your existing URLs. Pull a full list of your published post URLs. Google Search Console's "Pages" report is the easiest source for this. You'll need this list later to set up redirects, and trying to reconstruct it after the fact is painful.

Note your top-performing pages. Check your analytics for your highest-traffic posts. These are the ones you'll want to double-check manually after migration, since losing rankings on your best content hurts the most.

Option 1: Migrating from WordPress

This is the most common path, and Ghost has actually built a dedicated tool for it.

  1. In your Ghost Admin panel, go to Settings → Advanced → Import/Export, and find the WordPress migrator.
  2. Enter your WordPress site's public URL and continue.
  3. It'll prompt you to open your WordPress export screen. Log into WordPress, go to Tools → Export, choose All content, and download the XML file.
  4. Bring that file back to the Ghost migrator window and upload it.
  5. Ghost will show you how many posts and pages it found. Confirm the numbers look right, then click Import content.

This pulls in your posts, pages, tags, and authors directly. It's by far the smoothest route if you're coming from WordPress, since Ghost built the tool specifically for this case.

A few things worth knowing:

  • Scheduled posts come in as drafts, not scheduled posts, so you'll need to reschedule them manually.
  • Plugin-dependent content, things built with page builders, advanced custom fields, or shortcodes from specific plugins, often doesn't translate cleanly. Expect to clean up formatting on posts that relied heavily on plugins.
  • Multisite networks aren't supported out of the box.
  • Images and media generally come across, but it's worth spot-checking a handful of posts to make sure nothing broke.

Option 2: Migrating from Substack, Medium, Wix, Squarespace, or Anything Else

If you're not coming from WordPress, the process leans more on Ghost's general import format rather than a dedicated one-click tool.

Ghost accepts content as a structured JSON file (its native export/import format) or, for smaller sites, you can recreate posts manually if the volume is low enough. For larger migrations from other platforms, the realistic options are:

  • Look for a community-built converter. Because Ghost's JSON format is well documented, there are open-source scripts and tools built by the Ghost community to convert exports from Substack, Medium, and other platforms into Ghost-compatible JSON. Quality varies, so test on a handful of posts before running a full import.
  • Use a CSV-to-JSON approach for simple content. If your existing posts are mostly plain text and images without complex formatting, manually mapping your export into Ghost's JSON structure (even with a short script) is often more reliable than fighting with a generic tool.
  • Hire it out for large archives. If you've got years of content and don't want to risk it, there are migration specialists who do this professionally. For a blog under a few hundred posts, doing it yourself is usually fine.

Whichever method you use, always import into a staging or test version of your Ghost site first, not your live one.

Don't Forget Your Subscribers

If you're bringing over an email list, from Mailchimp, Substack, ConvertKit, or anywhere else, Ghost makes this part fairly painless.

  1. Export your subscriber list as a CSV from your current platform.
  2. In Ghost Admin, go to Members → Import members.
  3. Upload your CSV. At minimum it needs email addresses; including names and subscription status (free vs. paid) helps Ghost categorize them correctly.
  4. Send a short welcome email letting people know you've moved, so your first newsletter from Ghost doesn't look like spam to people who forgot they signed up somewhere else.

One important note: if you had paying subscribers on another platform, you can't just "transfer" their payment relationship. They'll generally need to re-subscribe through your new Ghost-connected Stripe setup. Plan your messaging around this so you don't lose paying members in the handoff.

Protecting Your SEO During the Move

This is the part that makes or breaks a migration. Search rankings can survive a platform change just fine, but only if you handle redirects properly.

Set up 301 redirects from every old URL to its new Ghost equivalent. This is non-negotiable. Search engines (and anyone with your old links bookmarked or shared) need to land somewhere real, not a 404 page. If your URL structure changes significantly between platforms, you'll need a redirect map, old URL pointing to new URL, rather than a single blanket rule.

Keep your slugs consistent where possible. If /blog/how-to-bake-bread was your WordPress URL, try to keep that same slug in Ghost. It saves you a redirect entirely and preserves any backlinks pointing at that exact URL.

Re-submit your sitemap to Google Search Console. Ghost automatically generates an XML sitemap for you, so once your new site is live, just submit the new sitemap URL in Search Console and let Google know the move happened.

Check your meta titles and descriptions came through. These don't always survive a migration cleanly, especially from platforms that handled SEO differently. Spot-check your top posts and fix anything that imported blank or garbled.

Watch Search Console for a few weeks after launch. Some ranking fluctuation after a platform migration is normal. A steep, sustained drop usually means a redirect issue. Broken or missing redirects are the number one cause of lost rankings after a CMS switch.

Final Pre-Launch Checklist

Before you point your domain at the new Ghost site and call it done:

  • All redirects tested and working (spot-check at least 15 to 20 of your highest-traffic URLs)
  • Images loading correctly across multiple posts
  • Internal links between your own posts still pointing to the right places
  • Newsletter sending properly tested with a real send to yourself
  • Subscriber import confirmed, with free/paid status correct
  • Analytics tracking (Google Analytics, Plausible, etc.) connected to the new site
  • 404 page set up for any URL you missed in your redirect map

It's More Straightforward Than It Feels

Migrating platforms always feels bigger than it actually is once you're mid-way through. The real risk isn't the move itself, it's skipping the boring prep work like redirects and backups because you're excited to get writing on the new platform. Do the unglamorous parts first, and the actual move from your old blog to Ghost usually takes an afternoon, not a week.


Ghost Theme

Written by

Ghost Theme

View all posts →

Build something beautiful

Your dream publication, today.

Join 5,000+ creators who trust our themes. Get every theme — plus all future releases — for one simple price.

30-day money back guarantee · Cancel anytime