I was trying to hand off a Webflow marketing site without making its next edit a hostage negotiation. The design was done, the routes looked good, and the content team had finally filled the CMS. But the site still needed a deployment path our developers could own: files in a repository, a predictable preview, and hosting that was not tied to one dashboard.
The obvious move was a Webflow code export. Then I hit the part that matters: the native export includes HTML, CSS, JavaScript, and uploaded assets, but not CMS content or CMS functionality. A Collection list can become an empty state after export. That is exactly the kind of surprise that slips through when a team only checks the homepage.
So I treated this as a small deployment pipeline instead of a download button. Here is the workflow I use when I need a Webflow CMS site to become a static site without rebuilding the front end.
1. Separate the visual shell from the live behavior
I start by writing down what must survive the move. Static sites are fantastic for landing pages, documentation, portfolios, campaign pages, and other content that can be emitted as files. They are a poor drop-in replacement for everything that depended on runtime services.
That distinction is not theoretical. A standard code export includes the site shell and assets but not CMS data/functionality, user accounts, ecommerce databases and checkout, site search, password protection, or form processing. If the site needs any of those, I decide up front whether to replace that capability, preserve a hosted route, or change the scope.
For a content-heavy site, the question becomes: can I get every rendered CMS route and its media into the exported result? That is where ExFlow is useful. It is a Webflow exporter that can download a site from its URL and export all pages, CSS, JavaScript, images, and media; it is specifically useful when the standard code export is not enough for the CMS pages I need to preserve.
2. Export deliberately, not with every switch on autopilot
In ExFlow, I configure the export around the deploy target: all pages enabled, CSS/JS/media included, and .html extensions enabled when the destination expects them. If I am handing the result to a developer, I also add the small style.css or script.js overrides there rather than burying a last-minute tweak in a hosting control panel.
I keep sync credentials scoped and out of notes or repositories. ExFlow can sync to Git, S3, or FTP, but those credentials are sensitive deployment credentials—not something I paste into an issue or a shell history.
3. Audit routes like a user, not like a file browser
The export completing is not the definition of success. I look for the routes that prove CMS content survived:
- a Collection list with real cards, not its empty state
- two or three individual Collection pages
- a filtered or linked page, if the site has one
- an image-rich article or case study
- a contact or gated page, so I can record any replacement work
For quick local smoke testing, I use a real web server rather than opening index.html directly. That catches relative-path mistakes and lets browser-dependent assets load in an environment closer to production. I load a homepage, one CMS-derived route, and a deep asset URL before I spend time on hosting details.
This is also where I check that internal links do not accidentally point back to a staging domain. If GitHub Pages is the eventual target, my earlier guide on hosting a Webflow site on GitHub Pages without rebuilding it is a useful next step once the static artifact passes locally.
4. Choose the deployment path that matches the team
I do not have a universal favorite; I use the path that makes rollback and ownership obvious.
- Git sync works well when developers already review changes and deploy from a repository.
- S3 sync is a good fit for a static asset pipeline and infrastructure-managed hosting.
- FTP sync can be the least disruptive bridge for a traditional server.
- Managed hosting is the simplest option when the team wants the export and host handled in one place.
ExFlow supports each of those sync options, so I choose one before exporting instead of doing a manual download and an unrelated upload later. Fewer handoffs means fewer chances to omit media or publish an older archive.
5. Run a boring production checklist
Before changing DNS or treating the new host as final, I check the boring things. They are boring right up until they are expensive:
- Home, top navigation, footer, and a deep CMS URL return 200.
- CSS, JavaScript, fonts, and key images load from production.
- Canonical URLs, robots directives, and analytics are intentional.
- Forms, search, authentication, and checkout have an explicit replacement plan.
- A rollback path exists.
That form line deserves extra emphasis. A static copy can look perfect while its contact form silently does nothing. The right answer may be a third-party form endpoint, an embedded service, or keeping that route hosted differently—but it should be a conscious choice.
What finally made this feel safe
The win was not “I found a Webflow downloader.” The win was turning a one-off export into a repeatable pipeline: capture the rendered content, check the routes that matter, sync to the host the team owns, and test the live result. For a deeper final-pass sequence, this Webflow static-site cutover runbook complements the workflow nicely.
If you need to take a Webflow site—including CMS-driven pages—into a static hosting workflow, start with ExFlow, choose the export settings for your destination, and make the route audit part of the definition of done.
TL;DR: Exporting Webflow is easy; proving that the content, media, and runtime expectations survived is the real engineering work. What is the one Webflow feature that has made your team hesitate to self-host?




Top comments (0)