Webflow → Ghost
Move a Webflow CMS blog into Ghost. Ghost has no Webflow importer. Export each collection as CSV, transform it into Ghost's JSON, and keep Webflow URLs with redirects. Design does not come along. Many teams keep Webflow for marketing pages and move only the blog.
Should you make this move?
Both platforms have a case. Compare what you gain with what you give up before scheduling the cutover.
Webflow
- Visual design, CMS, hosting, and interactions give designers strong production control
- Editors get a purpose-built publishing workflow instead of raw files
- Pricing, collection limits, and proprietary structure constrain portability
- Themes, extensions, and content models add maintenance and portability constraints
Ghost
- A focused publishing and membership platform is fast and pleasant for writers
- Editors get a purpose-built publishing workflow instead of raw files
- Its narrower ecosystem is less suitable for complex sites and custom application behavior
- Themes, extensions, and content models add maintenance and portability constraints
Ghost: A focused publishing and membership platform is fast and pleasant for writers. This removes a major source-side concern: Pricing, collection limits, and proprietary structure constrain portability.
What you lose: Visual design, CMS, hosting, and interactions give designers strong production control. What you inherit: Its narrower ecosystem is less suitable for complex sites and custom application behavior.
Jump to a section
Know the shape of the move.
This timeline assumes
- A blog-shaped Webflow CMS, up to 1,000 items and 5 GB of media, not a full marketing-site rebuild
- You can export every in-scope collection as CSV from the Webflow Designer.
- Webflow stays published until Ghost images no longer load from Webflow CDN.
- The Ghost theme is built and reviewed on a preview host before DNS changes.
- Ecommerce, membership, and Webflow Logic are out of this playbook or have their own plan.
What survives the move.
“Partial” and “manual” are not footnotes. They are work that must be scheduled and verified.
| Item | Outcome | Impact | What happens | Mitigation |
|---|---|---|---|---|
| CMS collections | manual | critical | Webflow lets you export a collection as CSV from the Designer. Ghost imports JSON, not Webflow CSV. There is no official Webflow migrator. | Map each collection to posts or pages. Transform a pilot CSV to Ghost JSON before the full load. |
| Rich text stored as mixed HTML and Markdown | partial | critical | Webflow rich text can mix HTML and Markdown in one field. Ghost wants one body format. | Pick HTML or Markdown and convert the field before import. |
| Images | partial | critical | Webflow CSV exports image URLs, not files. Ghost JSON that still points at website-files.com dies when you unpublish Webflow. | Download originals and upload them to Ghost. Rewrite src values. |
| Slugs and public URLs | manual | critical | You can often keep the same slug in Ghost. That only helps if the path prefix also matches, such as /blog/slug. | Match the Webflow path in Ghost routes or add redirects.json. |
| Webflow Designer layout | lost | critical | A Webflow theme is not a Ghost Handlebars theme. Interactions and page-level design stay behind. | Rebuild the blog templates. Keep Webflow for marketing pages if design still matters there. |
| Reference and multi-reference fields | manual | high | Authors, categories, and related posts are Webflow references. Ghost has authors and tags, not arbitrary relations. | Flatten references in the transform. Recreate related-post lists by hand if you still need them. |
| Drafts and staged CMS items | partial | high | Collection export includes the fields you see. Staging and branch state are not Ghost drafts by default. | Filter status in the CSV. Import drafts as drafts. |
| Forms, Logic, and membership | lost | high | Webflow forms, Logic, and Memberstack-style access do not run in Ghost. | Replace forms and paywalls with Ghost members or an external tool. |
| Editor workflow | lost | medium | Webflow Editor roles and Designer comments do not become Ghost staff and comments. | Create Ghost staff. Tell writers the editor changed. |
| SEO fields | manual | critical | Webflow title and description fields must be mapped into Ghost Twitter and meta fields. | Include those columns in the transform and crawl both sites. |
| Pagination and collection templates | manual | medium | Webflow collection templates do not become Ghost index routes. | Build Ghost tag and index templates to match accepted paths. |
| Hosting split | manual | high | Daily.co and others kept Webflow for the marketing site and put only /blog on Ghost. That needs a path-based DNS or reverse-proxy plan. | Decide one host or a split before cutover. |
Where each thing goes.
| Source | Destination | Method | Notes |
|---|---|---|---|
| Webflow collection item name | Ghost post title | automatic | Compare after JSON import. |
| Slug | Ghost slug | transform | Keep it if the public path can match. |
| Rich text or Markdown field | Ghost HTML body | transform | Convert mixed formats first. |
| Image URL | Ghost image you uploaded | transform | Do not leave website-files.com. |
| Author reference | Ghost author | manual | Create staff first. |
| Category or tag reference | Ghost tags | transform | Flatten multi-references. |
| SEO title and description | Ghost meta fields | manual | Crawl after import. |
| Webflow Designer page | No destination | unsupported | Rebuild or keep on Webflow. |
| Form or Logic flow | No destination | unsupported | Replace before DNS. |
Make the move recoverable.
Create the source-of-truth backup
Keep every collection CSV, a URL crawl, and design evidence before you transform.
- Export each in-scope collection as CSV.
- Download used images.
- Crawl public blog URLs and SEO fields.
- Screenshot the Webflow blog templates.
- Store files with checksums.
Proof to capture: CSV hashes, item counts, URL count, and image manifest.
CSV to Ghost JSON
Turn Webflow collections into a Ghost import file.
- Map columns to Ghost post fields.
- Convert mixed HTML and Markdown to one body.
- Rewrite image URLs to Ghost uploads.
- Import a 20-item pilot JSON first.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
Routes and hosting split
Keep /blog URLs if the rest of the site stays on Webflow.
- Decide whether Ghost owns the whole domain or only /blog.
- Match slugs or write redirects.
- Test both hosts before cutover.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
The things most likely to hurt.
These are operating limits. Treat every “Stop if” condition as a blocked migration, not a suggestion.
JSON import looks fine while images still live on Webflow
Posts render because the Webflow CDN is still up.
- Consequence
- The blog dies when you unpublish Webflow.
- Mitigation
- Inspect image hosts, not screenshots alone.
Stop if: A high-traffic post still uses website-files.com.
You move a design-heavy site and hate the result
Ghost cannot recreate Webflow interactions.
- Consequence
- You bounce back to Webflow after cutover.
- Mitigation
- Accept a theme on the preview host first. Consider moving only the blog.
Stop if: The preview theme is not accepted.
Path split is wrong
Ghost owns the apex while marketing pages still need Webflow.
- Consequence
- The home page or /blog 404s.
- Mitigation
- Write the hosting plan before DNS.
Stop if: Apex and /blog cannot both resolve as designed.
Mixed Markdown and HTML mangles posts
Code samples or callouts render as raw markup.
- Consequence
- Technical posts become unreadable.
- Mitigation
- Convert the body field on a code-heavy sample first.
Stop if: A cornerstone technical post is wrong in the pilot.
Do the work in this order.
- Days 1–3 · inventory
Inventory collections and hosting
6–10 hours active2–3 days elapsedOwner review waiting- List collections and fields.
- Decide whole-site versus /blog split.
- Choose a Ghost theme.
Stop / go checkpointExport?
Go when: Scope and hosting plan are signed.
Stop when: Ecommerce or membership is in scope with no replacement.
- Days 3–6 · backup
Export CSV and media
4–8 hours active2–3 days elapsedExports and image download waiting- Export collections.
- Download images.
- Crawl URLs.
Depends on: inventory
Stop / go checkpointTransform?
Go when: CSV hashes and image files exist.
Stop when: A required collection did not export.
- Days 6–14 · pilot
Transform and theme
16–36 hours active5–8 days elapsedTheme review waiting- Build Ghost JSON for a pilot set.
- Upload images.
- Compare templates and code posts.
Depends on: backup
Stop / go checkpointScale?
Go when: Pilot JSON, images, and theme pass.
Stop when: Bodies or URLs are wrong.
- Days 14–18 · cutover
Full import and DNS
8–16 hours active2–3 days elapsedDNS waiting- Import the full JSON.
- Install redirects.
- Switch the blog host.
Depends on: pilot
Stop / go checkpointGhost owns the blog?
Go when: Counts, images, and routes pass.
Stop when: A cornerstone URL 404s.
- Days 18–20 · observe
Observe and close
4–8 hours active3–5 days elapsedPublishing week waiting- Watch 404s and image hosts.
- Keep Webflow published.
Depends on: cutover
Stop / go checkpointClose rollback?
Go when: No trigger fires.
Stop when: Images or routes regress.
Cut over with a way back.
Cutover
Make Ghost the public blog without breaking marketing pages you still host on Webflow.
- Freeze Webflow CMS edits on the blog collection.
- Export the final CSV delta and import Ghost JSON.
- Confirm image hosts.
- Switch only the host you planned.
- Run blocking URL and image checks.
Proof to capture: Ghost serves the blog paths. Images are independent. Marketing paths still resolve.
Rollback
Return the blog to Webflow without losing Ghost-era posts you still want.
- Restore the previous DNS or proxy rules.
- Export Ghost posts written after cutover.
- Apply only reviewed posts back to Webflow if needed.
- Keep the CSVs and JSON.
Proof to capture: Webflow serves the blog again.
- Images still on the Webflow CDN
- Home or /blog resolves to the wrong host
- Cornerstone technical posts render as raw markup
- Accepted theme is rejected after launch
- A blocking check cannot be fixed in two hours
Prove the migration worked.
Every blocking check must pass. Capture the evidence before cleanup begins.
| Pass | ID | Check | Method | Expected result | Evidence |
|---|---|---|---|---|---|
V-01Blocking | Item counts | Compare Webflow CSV rows with Ghost posts. | Counts match or variances are signed. | Count sheet. | |
V-02Blocking | Image hosts | Inspect a stratified sample. | No required image depends on Webflow. | Image-host report. | |
V-03Blocking | Body format | Open code-heavy and embed-heavy posts. | Approved rendering. | Sample screenshots. | |
V-04Blocking | Blog URLs | Request every high-value Webflow blog URL. | One 200 or one-hop 301 to Ghost. | Crawl diff. | |
V-05Blocking | Hosting split | Request apex, marketing, and blog paths. | Each path hits the planned host. | Host map. | |
V-06Blocking | Meta fields | Compare titles and descriptions on key posts. | Approved parity. | SEO sample. | |
V-07 | Theme | Compare home, post, and index at two breakpoints. | Accepted layout. | Screenshots. | |
V-08Blocking | Single blog writer | Inspect Webflow CMS and Ghost publishing. | Ghost alone owns the blog. | Publish screenshots. |
Remove the scaffolding safely.
Safe after: Seven stable days, no required Webflow image hosts, and a signed report.
- Archive CSVs, Ghost JSON, redirects, and evidence.
- Re-upload leftover Webflow images.
- Keep the Webflow blog collection published until images are independent.
- Unpublish only the Webflow surfaces you replaced.
- Revoke migration users.
- Schedule the next Ghost backup and route review.
When the plan met reality.
First-hand accounts are preferred. Vendor case studies are labeled, and every note below is an editorial paraphrase—follow the link for the full context.
Justin Hunter moved nearly 200 Pinata blog posts from Webflow to Ghost in 2024 because Webflow's editor was a poor fit for technical posts. Ghost has no Webflow importer, so he wrote a TypeScript converter from Webflow CSV to Ghost JSON. Webflow's Published On field was the wrong timestamp, so he used a different date field. Images still pointed at Webflow's CDN, so he rehosted them on Pinata IPFS before import. He first confirmed Ghost could keep the same post URL shape.
- Match Ghost slugs to the Webflow URL shape before you import, or you will buy an SEO problem.
- Do not map Ghost published_at to Webflow Published On until you prove that field is the public date.
- A CSV-to-Ghost-JSON script is the path when neither vendor ships an importer.
- Rehost images before you cancel Webflow, or every post still depends on their CDN.
The Daily team left Webflow CMS for Ghost Pro after technical posts and code samples became painful. Content lived as mixed HTML and Markdown, so they converted everything to HTML and shaped it for Ghost's importer. They kept www.daily.co on Webflow and put the blog on Ghost under /blog, using CloudFront path routing and Ghost's subdirectory option. Theme work used Ghost CLI locally and the Deploy Theme GitHub Action.
- Normalize mixed HTML and Markdown to one format before you build the Ghost JSON.
- If marketing stays on Webflow, plan path-based routing and Ghost's subdirectory option before DNS day.
- A /blog split is a common Webflow-to-Ghost shape, not a full site rebuild.
- The hard part was their CMS field mix, not Ghost's import format.
Jasper Meurs moved his personal site from Webflow to Ghost to get a writing-first CMS, Ulysses and GitHub theme deploys, and a combined post-plus-email publish. After a few months he moved the site back to Webflow because the Ghost design was not converting. The post is a product-fit report, not a data-migration log, and the later return is useful context.
- Prototype the Ghost theme and conversion pages before you leave Webflow for a marketing site.
- Treat a personal-site move as reversible. He went back when Ghost could not match the old layout.
- Ghost won on writing and email, then lost on visual control and conversions.
- A successful content move can still fail if the destination cannot ship the same pages.
Verify against the primary material.
Platform behavior changes. Check these sources and the review dates above before executing a production migration.
- Webflow: export CMS contentAccessed 2026-10-30
- Ghost: import contentAccessed 2026-10-30
- Ghost: official migration tools and JSON formatAccessed 2026-10-30
- Ghost: redirectsAccessed 2026-10-30