Why Your Webflow Export Isn't Production-Ready
Webflow's code export ships div-heavy HTML and bloated CSS, and leaves out CMS content, forms, Ecommerce, and search. Here's what you actually get, and how to move a rebuilt site into a secure GitHub repo.
MigrateLab Team
Migration Experts

The Export Button Lie
Webflow's marketing says you can "export clean, semantic code." Let's put that claim under a microscope.
First, what the export actually contains. Webflow's own documentation lists it: HTML, CSS files, JavaScript, the images in your Assets panel, and Collection template pages with no content in them. It leaves out CMS content (Collection items and Collection lists), User Accounts, Ecommerce, password protection, form submission processing, reCAPTCHA, site search, and non-primary locales. Code export also needs a paid Workspace plan; Site plans alone don't include it.
Here's what you get when you open the files.
HTML: Div Soup
Open any exported HTML file. You'll see structures like this:
A <section> wrapping a <div class="container-2"> wrapping a <div class="div-block-47"> wrapping a <div class="w-layout-grid grid-3"> wrapping the actual content. Four levels of nesting for what should be a simple grid layout.
The class names are auto-generated and meaningless. div-block-47 tells you nothing about what the element does. A human developer can't maintain this efficiently, and an AI tool has nothing meaningful to reason about. It's technically valid HTML, but it's the HTML equivalent of spaghetti code.
CSS: Thousands of Lines of Bloat
The exported CSS is large because of how Webflow writes it:
No tree-shaking. CSS for every page is included in a single file, even though most of it isn't used on any given page.
Vendor prefixes everywhere. Webflow still adds
-webkit-and-moz-prefixes for properties that modern browsers haven't needed for years.
Scattered media queries. Instead of organizing responsive styles logically, each class gets its own breakpoint overrides spread through the file.
Hardcoded values. Unless you set up Webflow variables, colors, fonts, and spacing are written out as literal values. Change your brand color and you're doing find-and-replace across the file.
JavaScript: Present, but Not Yours
The export includes Webflow's webflow.js runtime, and Interactions do run from it. That is the problem rather than the fix: every animation is stored as data inside that runtime and tied to data-w-id attributes in the HTML, so you can't edit an interaction without Webflow's Designer, and you can't safely remove the runtime without losing them all. Lottie animations need the files served from a web server, not opened locally.
What doesn't work at all once the site leaves Webflow's hosting:
CMS content, filtering, and pagination (the Collection lists come out empty)
Form submission handling (forms post to Webflow's endpoint)
Site search and password-protected pages
E-commerce (entirely server-dependent)
In other words, the export looks like your site and moves like your site, but anything that needs a server is gone.
Images: Unoptimized and Webflow-Hosted
Webflow exports images at their original upload size. No responsive variants, no WebP conversion, no lazy loading attributes. Images referenced from CMS content point at Webflow's CDN (cdn.prod.website-files.com), which belongs to your Webflow project. Don't build a new site that depends on those URLs staying up after you cancel: download every file and re-host it.
What "Production-Ready" Actually Means
A production-ready codebase has:
Semantic HTML: meaningful tags (
<nav>,<article>,<aside>) instead of generic divs
Scoped, minimal CSS: only the styles each component needs, using modern features
Component architecture: reusable, composable pieces with clear props and behavior
Optimized assets: responsive images, lazy loading, modern formats
Working interactivity: forms, animations, and dynamic content that run on your own stack
SEO infrastructure: meta tags, structured data, sitemap, robots.txt
Version control: Git history, meaningful commits, a review process
A Webflow export has almost none of these. It's a snapshot: a frozen picture of how your site looked, not how it works.
The Real Path to Production Code
The Webflow export is useful as a visual reference. Open it in a browser, screenshot every page, and use those screenshots as your design spec. Then close the exported code and don't build on it.
Your new codebase should be built fresh, using the design as a guide. Modern tools make this much faster than it sounds:
AI tools like Claude Code can generate React components from screenshots and descriptions
Tailwind CSS gives you a consistent design system without writing custom CSS
Next.js provides the routing, rendering, and optimization layer out of the box
Payload CMS gives you content management without vendor lock-in
The CMS content itself comes out through the Webflow Data API as JSON, or as CSV per collection, then gets scripted into the new CMS (see the Webflow CMS content migration guide)
The build takes days, not weeks: most Webflow sites go live in 7 to 14 days. And the result is code that a developer, or an AI, can actually work with. That's the difference between an export and a migration.
Moving to GitHub Without Leaking Anything
There is no "transfer to GitHub" button. Pushing the export to a repository gives you version history for a dead snapshot. What you actually want in GitHub is the rebuilt site, and the repository should be locked down before the first real commit. The order that works:
Audit first. Count static pages, CMS collections and items, forms and where they submit, third-party scripts in project and page custom code, interactions, and any gated pages. This sets scope, and it tells you which secrets (form webhooks, API keys) the new code will need.
Pick the stack. Framework (Next.js or Astro for most marketing sites), host, and a CMS to replace Webflow's Collections.
Create the repository private, from the start. A public repo exposes your full source, commit messages, and any webhook URL or key that slips in.
Add `.gitignore` before the first commit. Exclude
.env*,node_modules, build output, and OS files. Keys live in local.envfiles and in your host's environment variable settings, never in code.
Protect `main`. Require a pull request to merge, and block direct and force pushes. Note GitHub's plan gate: branch protection on a private repository needs GitHub Pro, Team, or Enterprise; on the free plan it is only available for public repositories.
Connect the host. Link the repo to Vercel, Netlify, or Cloudflare Pages with
mainas the production branch. Every push tomaindeploys, every pull request gets its own preview URL, and you review changes there before they go live. For a business site built by a developer or agency, Vercel's Hobby tier is not available: its terms limit it to non-commercial use, so use Vercel Pro or Cloudflare Pages.
Test on staging, then switch DNS. Get the preview or staging URL fully working, forms included, before the domain points at it.
Repository security checklist
Repository is private.
Branch protection is on for
main: no direct pushes, pull requests required.
.gitignoreexcludes.envfiles,node_modules, build artifacts, and OS files.
No secrets in code: API keys, database URLs, and tokens are environment variables.
Dependabot alerts are enabled, so vulnerable dependencies get flagged.
Two-factor authentication is on for every account with repo access.
Access is minimal: collaborators get write, not admin; admin stays with the owner.
Production environment variables are set in the hosting dashboard, not in the repo.
The mistake that costs the most: committing a key. Once it is in Git history it stays there unless you rewrite history, and anyone who cloned the repo already has it. Rewriting is not enough on its own; rotate the key the moment you find it.
| Feature | Webflow Export | Production Code |
|---|---|---|
| HTML structure | Nested divs with auto-names | Semantic components |
| CSS size (20 pages) | 15,000+ lines | ~2,000 lines (Tailwind) |
| Animations | Exported, tied to webflow.js | Framer Motion / CSS |
| Forms | Broken (no endpoint) | Working with API routes |
| Images | Unoptimized, absolute URLs | next/image optimized |
| CMS content | Hardcoded HTML | Dynamic from headless CMS |
| AI-editable | Not meaningfully | Fully |
Skip the export. Get production code.
We rebuild Webflow sites as clean, AI-editable Next.js projects. No div soup. No bloated CSS.
Frequently asked questions
- How do I push Webflow exported code to GitHub?
- 1. Export the site with Export code in the Webflow Designer (it needs a paid Workspace plan) and unzip it into a clean local folder. 2. Add a .gitignore, then run git init, git add . and git commit -m "Initial Webflow export". 3. Create a new private repository on github.com and leave it empty. 4. Connect it with git remote add origin [email protected]:yourname/your-repo.git. 5. Run git branch -M main, then git push -u origin main. The upload works, but the static HTML and CSS you pushed has no CMS content, no form processing, and no search. If you want working code in the repo instead of a snapshot, a free review at /free-review shows what a production-ready version looks like.
- How do I push Webflow exported code to a GitHub repository as a developer?
- The push is the easy part: git init, commit, add a private remote, and git push -u origin main. The real work starts after that, because the export is non-semantic markup with auto-generated class names, empty Collection templates, and forms that post to Webflow's endpoint. Most developers rebuild it in a real framework (Astro or Next.js) and pull CMS content through the Webflow Data API, so the result is maintainable, versioned, and editable by AI tools. If you would rather skip the cleanup, we can scope that rebuild at /free-review.
- Should my Webflow GitHub repository be public or private?
- Private. A public repo exposes your full source, commit history, any webhook URL or API key that slips in, and your site structure to anyone. Create it private from the start and invite only the collaborators who need access. Note that branch protection on a private repo requires GitHub Pro, Team, or Enterprise. Our free review at /free-review includes a check of your repo setup.
- Why does my Webflow export look broken after I push it to GitHub?
- The push did not break it. Webflow's code export only ships static HTML, CSS, JavaScript, and Assets-panel images. CMS content, form submission processing, Ecommerce, password protection, and site search are not included, and Lottie files need to be served from a web server. That is why the code looks incomplete even though every file uploaded. Rebuilding those features is the part most people underestimate; a free scope at /free-review lists exactly what is missing.
- Can I keep editing my site after I push the Webflow code to GitHub?
- You can, but the raw export is generated HTML and CSS, which is slow and error-prone to maintain, and its interactions can only be edited in the Webflow Designer. The bigger win is converting it into a clean framework, so AI tools like Claude Code and Cursor can edit pages, copy, and components straight from the repo, with every change reviewed in a pull request before it deploys. You can see what that would look like for your site at /free-review.
100 website designs, ready to build for your business
Every design below is a complete, clickable website. Pick one and we rebuild it around your name, colours, photos and services, from $1,520 and live in 7 working days.
See all 100 designsRelated Resources

Webflow Migration: What Leaving Webflow Actually Involves
An orientation page for anyone weighing a Webflow migration. Four decisions in order: whether you need to move at all, what the export really leaves behind, where you land, and who does the work. Each answered short, then linked to the page that goes deep.

Webflow vs Code in 2026: The Honest Comparison
Webflow or custom code? We compare performance, cost, flexibility, AI compatibility, and long-term ROI: with real numbers, not marketing spin.

Webflow Migration Cost: What It Actually Costs in 2026
For a 50–100 page Webflow site, expect $5,000–$25,000 and 4–10 weeks. The destination (Astro, Next.js, SvelteKit) barely changes the price, what changes the 5-year cost is whether you end up with AI-editable code or another platform lock-in.