Why migrate from WordPress to Ghost?
Most WordPress-to-Ghost moves are driven by editorial workflow, not performance. WordPress's block editor (Gutenberg) is powerful but heavy; Ghost's editor is minimal and shaped around long-form prose. Ghost ships with a native newsletter + member-paywall layer that on WordPress typically requires Mailchimp ($30+/mo) plus a paid membership plugin (MemberPress, Paid Memberships Pro). For a publication that's primarily articles + email, Ghost is a single license that replaces three WordPress integrations.
Performance is a secondary win. Ghost's default theme is server- rendered Handlebars with no PHP-plugin sprawl, so default Lighthouse scores tend to be higher out of the box than a typical WooCommerce-or-Yoast WordPress install -- though a well-tuned WordPress site with caching can match or beat it.
The trade is tooling and ecosystem. WordPress has a plugin for everything; Ghost is opinionated and gives you Handlebars + a content API + Zapier. If your site depends on form builders, custom post types, or a marketplace plugin (Easy Digital Downloads, WooCommerce), Ghost is not a replacement.
Before you start
- Current WordPress version. Admin -> Tools -> Site Health -> Info. The exporter requires WP 4.7+ for the REST API.
- Pick a Ghost host. Ghost(Pro) Starter is $9/mo and the fastest path. Self-hosted requires Node 18+, a Postgres or MySQL database, and an SMTP relay (Mailgun, Postmark) for email.
- Backup. Full WordPress DB dump + the entire
wp-content/uploadsdirectory. The exporter does not transfer files; you'll re-upload. - Block out a quiet window. Image re-upload to Ghost takes measurable time on >500-post sites and runs serially.
Step-by-step migration
1. Export WordPress content
Install the official Ghost exporter plugin:
wp plugin install ghost --activate
wp ghost export --output=/tmp/ghost-export.json
If you don't use WP-CLI, install via Plugins -> Add New -> search "Ghost" -> Install -> Activate, then Tools -> Export to Ghost -> Download Ghost File.
The output is a single JSON file containing posts, pages, tags, authors, and metadata. Images are referenced by their original WordPress URLs.
2. Import into Ghost
In Ghost Admin: Settings -> Labs -> Import content -> Choose File -> upload the JSON. Ghost downloads referenced images from your WordPress origin during import. Keep WordPress online until the import completes, otherwise images will be missing.
3. Redirect WordPress permalinks
WordPress's default permalink is /2024/04/my-post/; Ghost's is
/my-post/. Without a redirect, every existing inbound link 404s
and you lose the ranking equity those links carry.
In nginx (front of Ghost):
location ~ ^/(\d{4})/(\d{2})/(.+?)/?$ {
return 301 /$3/;
}
If you used a non-default WordPress permalink structure, mirror the
same pattern. Test with curl -I https://your-domain.com/old-url/
and confirm a 301 to the new path.
4. Migrate subscribers
Ghost's member system imports CSV directly. Export your existing
list (Mailchimp, ConvertKit, etc.) as CSV with at least an email
column. In Ghost Admin: Members -> Import -> CSV. Existing
Mailchimp subscribers do NOT receive a re-confirmation email, so
double-check your privacy policy + unsubscribe history before mass
import.
5. Pick a Ghost theme
Ghost themes use Handlebars, not PHP. Unless you need a pixel-exact re-creation of your WordPress design, pick a pre-built theme from the Ghost marketplace. Casper (the default) is a sensible starting point.
For a custom theme, fork an existing one and edit
default.hbs, index.hbs, post.hbs. The Ghost theme docs are
short enough to read in one sitting.
What doesn't migrate automatically
- WooCommerce products + orders. Ghost has no e-commerce primitive. If you sell physical goods, stay on WordPress or move to Shopify.
- Comments. Ghost intentionally has no native commenting; use Disqus, Cusdis, or Ghost's own Tip & Comment beta.
- Custom post types (CPTs). Collapse to Ghost's
post+tagmodel. A CPT like "case-study" becomes a post taggedcase-study. - ACF / Meta Box custom fields. Lost on import. Move critical metadata into the post body before exporting.
- Form submissions. Forms themselves don't transfer; use Ghost's native signup forms + Zapier or Make to route data.
Common pitfalls
- Underestimating image re-upload time. Ghost downloads every referenced image from your WordPress origin during import. For a 1000-post site with media-heavy posts, this can take 30+ minutes. Don't take WordPress offline until it finishes.
- Custom URL structures break. If you used
/category/post/on WordPress, the simple two-segment redirect above won't catch it. Map the full set of WordPress permalink rules to nginx rewrites before cutover. - Missing tags vs categories. Ghost has only tags. Decide which WordPress categories to merge into tags + which to drop before importing.
- Email deliverability dip. New Ghost installs send from a new IP. Warm the IP via Postmark / Mailgun's onboarding before blasting your full subscriber list.
How BeaverCheck measures the difference
We've audited 713 WordPress sites and 3 Ghost sites. Average Lighthouse performance: WordPress 45 / 100, Ghost 57 / 100, a difference of +12 points.
Want to see your current WordPress audit before migrating? Run a free audit on BeaverCheck -- the report shows your Core Web Vitals + every issue Ghost would inherit.
Further reading
- Ghost's official migration guide
- Ghost theme documentation
- Compare both stacks side-by-side: WordPress vs Ghost