← All playbooks
Publishing migration

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.

Typical timeline10–20 business days40–80 hours active work
Statusneeds review
Source profileWebflow documentation reviewed 2026-10-30
Destination profileGhost documentation reviewed 2026-10-30
Documentation date
Review window
Evidence4 sources
This route needs review.Use it as a planning baseline, then verify the dated sources and test with representative data before production.
Before you migrate

Should you make this move?

Both platforms have a case. Compare what you gain with what you give up before scheduling the cutover.

Current platform

Webflow

Reasons to stay
  • Visual design, CMS, hosting, and interactions give designers strong production control
  • Editors get a purpose-built publishing workflow instead of raw files
Reasons to leave
  • Pricing, collection limits, and proprietary structure constrain portability
  • Themes, extensions, and content models add maintenance and portability constraints
New platform

Ghost

What gets better
  • A focused publishing and membership platform is fast and pleasant for writers
  • Editors get a purpose-built publishing workflow instead of raw files
What gets worse
  • Its narrower ecosystem is less suitable for complex sites and custom application behavior
  • Themes, extensions, and content models add maintenance and portability constraints
Best of the move

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.

Worst of the move

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
01At a glance

Know the shape of the move.

Transfer outcome12 features audited
Transfer outcome distributionClean transfer: 0, Partial transfer: 3, Manual rebuild: 6, Not transferred: 3.
Clean0
Partial3
Manual6
Lost3
Mapping route7 of 9 fields have a destination path

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.
02What transfers

What survives the move.

“Partial” and “manual” are not footnotes. They are work that must be scheduled and verified.

ItemOutcomeImpactWhat happensMitigation
CMS collectionsmanualcriticalWebflow 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 MarkdownpartialcriticalWebflow 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.
ImagespartialcriticalWebflow 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 URLsmanualcriticalYou 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 layoutlostcriticalA 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 fieldsmanualhighAuthors, 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 itemspartialhighCollection 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 membershiplosthighWebflow forms, Logic, and Memberstack-style access do not run in Ghost.Replace forms and paywalls with Ghost members or an external tool.
Editor workflowlostmediumWebflow Editor roles and Designer comments do not become Ghost staff and comments.Create Ghost staff. Tell writers the editor changed.
SEO fieldsmanualcriticalWebflow 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 templatesmanualmediumWebflow collection templates do not become Ghost index routes.Build Ghost tag and index templates to match accepted paths.
Hosting splitmanualhighDaily.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.
03Field and feature mapping

Where each thing goes.

SourceDestinationMethodNotes
Webflow collection item nameGhost post titleautomaticCompare after JSON import.
SlugGhost slugtransformKeep it if the public path can match.
Rich text or Markdown fieldGhost HTML bodytransformConvert mixed formats first.
Image URLGhost image you uploadedtransformDo not leave website-files.com.
Author referenceGhost authormanualCreate staff first.
Category or tag referenceGhost tagstransformFlatten multi-references.
SEO title and descriptionGhost meta fieldsmanualCrawl after import.
Webflow Designer pageNo destinationunsupportedRebuild or keep on Webflow.
Form or Logic flowNo destinationunsupportedReplace before DNS.
04Before you begin

Make the move recoverable.

Backup procedure

Create the source-of-truth backup

Keep every collection CSV, a URL crawl, and design evidence before you transform.

  1. Export each in-scope collection as CSV.
  2. Download used images.
  3. Crawl public blog URLs and SEO fields.
  4. Screenshot the Webflow blog templates.
  5. Store files with checksums.

Proof to capture: CSV hashes, item counts, URL count, and image manifest.

Transformation · A checked transform script plus Ghost JSON import

CSV to Ghost JSON

Turn Webflow collections into a Ghost import file.

  1. Map columns to Ghost post fields.
  2. Convert mixed HTML and Markdown to one body.
  3. Rewrite image URLs to Ghost uploads.
  4. Import a 20-item pilot JSON first.

Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.

Transformation · Ghost routes, redirects.json, and DNS or a proxy

Routes and hosting split

Keep /blog URLs if the rest of the site stays on Webflow.

  1. Decide whether Ghost owns the whole domain or only /blog.
  2. Match slugs or write redirects.
  3. Test both hosts before cutover.

Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.

05Handle with care

The things most likely to hurt.

These are operating limits. Treat every “Stop if” condition as a blocked migration, not a suggestion.

Content

JSON import looks fine while images still live on Webflow

criticalpossible likelihood

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.

Presentation

You move a design-heavy site and hate the result

highpossible likelihood

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.

Routing

Path split is wrong

criticalpossible likelihood

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.

Import

Mixed Markdown and HTML mangles posts

highpossible likelihood

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.

06Precise timeline

Do the work in this order.

Estimate forUp to 1,000 CMS items, one blog collection, optional marketing site left on Webflow
Total elapsed10–20 business days
Active work40–80 hours
BufferAdd time if you also rebuild a full marketing site in Ghost, or if bodies are mixed HTML and Markdown.
01
Days 1–3Inventory collections and hosting2–3 days
02
Days 3–6Export CSV and media2–3 days
03
Days 6–14Transform and theme5–8 days
04
Days 14–18Full import and DNS2–3 days
05
Days 18–20Observe and close3–5 days
  1. 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 checkpoint

    Export?

    Go when: Scope and hosting plan are signed.

    Stop when: Ecommerce or membership is in scope with no replacement.

  2. 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 checkpoint

    Transform?

    Go when: CSV hashes and image files exist.

    Stop when: A required collection did not export.

  3. 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 checkpoint

    Scale?

    Go when: Pilot JSON, images, and theme pass.

    Stop when: Bodies or URLs are wrong.

  4. 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 checkpoint

    Ghost owns the blog?

    Go when: Counts, images, and routes pass.

    Stop when: A cornerstone URL 404s.

  5. 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 checkpoint

    Close rollback?

    Go when: No trigger fires.

    Stop when: Images or routes regress.

07The point of change

Cut over with a way back.

Go live

Cutover

Make Ghost the public blog without breaking marketing pages you still host on Webflow.

Recommended window: A weekday with DNS and both platform owners available.

  1. Freeze Webflow CMS edits on the blog collection.
  2. Export the final CSV delta and import Ghost JSON.
  3. Confirm image hosts.
  4. Switch only the host you planned.
  5. Run blocking URL and image checks.

Proof to capture: Ghost serves the blog paths. Images are independent. Marketing paths still resolve.

Return to safety

Rollback

Return the blog to Webflow without losing Ghost-era posts you still want.

Deadline: Before you unpublish Webflow or delete the CSVs.

  1. Restore the previous DNS or proxy rules.
  2. Export Ghost posts written after cutover.
  3. Apply only reviewed posts back to Webflow if needed.
  4. Keep the CSVs and JSON.

Proof to capture: Webflow serves the blog again.

Rollback immediately when
  • 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
08Verification report

Prove the migration worked.

Every blocking check must pass. Capture the evidence before cleanup begins.

0%
Interactive report preview0 / 8 checks passed
PassIDCheckMethodExpected resultEvidence
V-01BlockingItem countsCompare Webflow CSV rows with Ghost posts.Counts match or variances are signed.Count sheet.
V-02BlockingImage hostsInspect a stratified sample.No required image depends on Webflow.Image-host report.
V-03BlockingBody formatOpen code-heavy and embed-heavy posts.Approved rendering.Sample screenshots.
V-04BlockingBlog URLsRequest every high-value Webflow blog URL.One 200 or one-hop 301 to Ghost.Crawl diff.
V-05BlockingHosting splitRequest apex, marketing, and blog paths.Each path hits the planned host.Host map.
V-06BlockingMeta fieldsCompare titles and descriptions on key posts.Approved parity.SEO sample.
V-07ThemeCompare home, post, and index at two breakpoints.Accepted layout.Screenshots.
V-08BlockingSingle blog writerInspect Webflow CMS and Ghost publishing.Ghost alone owns the blog.Publish screenshots.
09Post-migration cleanup

Remove the scaffolding safely.

Safe after: Seven stable days, no required Webflow image hosts, and a signed report.

  1. Archive CSVs, Ghost JSON, redirects, and evidence.
  2. Re-upload leftover Webflow images.
  3. Keep the Webflow blog collection published until images are independent.
  4. Unpublish only the Webflow surfaces you replaced.
  5. Revoke migration users.
  6. Schedule the next Ghost backup and route review.
10Experiences from the field

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.

First-person accountJustin Hunter · Pinata

How to Migrate Blog Posts From Webflow to Ghost2024

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.

What they recommend
  • 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.
Worth noticing
  • 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.
First-person accountPhil Miller · Daily

Finding a blog platform with spirit: migrating to Ghost in 20202020

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.

What they recommend
  • 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.
Worth noticing
  • 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.
First-person accountJasper Meurs · Jasper Meurs

Why I moved my website from Webflow to GhostUndated

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.

What they recommend
  • 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.
Worth noticing
  • 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.
Sources and evidence

Verify against the primary material.

Platform behavior changes. Check these sources and the review dates above before executing a production migration.

  1. Webflow: export CMS contentAccessed 2026-10-30
  2. Ghost: import contentAccessed 2026-10-30
  3. Ghost: official migration tools and JSON formatAccessed 2026-10-30
  4. Ghost: redirectsAccessed 2026-10-30