How to Migrate from Framer to Custom Code (Astro or Next.js)
The short answer: Framer has no full code export, so a move to custom code means rebuilding the templates in a framework such as Astro or Next.js, exporting the CMS content as CSV and importing it by script, then keeping every URL, title, meta description and schema block. For a B2B marketing site this usually takes 2 to 4 weeks. We did it for our own site, allsite.pro, in November 2026 and kept all 225 URLs.
Why companies move from Framer to code
Framer is a good tool for a small site that a designer edits visually every week. Companies usually leave when the site grows:
- Cost climbs with each add-on. Extra locales, CMS collections, A/B testing and editor seats each add to the plan. Our Framer vs custom code comparison puts a large B2B site at about $2,400 a year on Framer and about $720–925 as custom code run with Claude (as of November 2026).
- Performance has a ceiling. Framer’s runtime, fonts and scripts are hard to push above 90 on mobile PageSpeed. A static Astro site can reach 95–100.
- SEO and AEO control is limited. Custom JSON-LD per page, hreflang rules, llms.txt, headers and redirects all become plain files you own.
- The site needs product logic. Calculators, gated content, data from your own systems or a shared design system with the app.
If the real problem is a messy CMS or a badly structured build, a better Framer build may be enough. Be honest about which one you have.
Step 1: Inventory the Framer site
Crawl the live site and save, for every URL: status code, title, meta description, canonical, H1, Open Graph tags and JSON-LD. This is your baseline. Also list:
- every page and CMS collection, with item counts and fields
- forms and where they send data
- head and body scripts (analytics, consent, chat, tracking)
- redirects set in Framer’s site settings
- 12 months of Search Console data: top pages, queries and external links
Step 2: Choose Astro or Next.js, and where content lives
- Astro for content-heavy marketing sites. It ships HTML by default and adds JavaScript only where a component needs it. We use it with static output on Cloudflare Pages.
- Next.js when the website shares components, authentication or data with a React product app.
For content, choose between Markdown files in the repository (simple, versioned, free) and a headless CMS such as Sanity, Contentful or Storyblok (better for large teams and many editors).
Step 3: Export the CMS
Export each Framer CMS collection as CSV. Write a script that converts each row into a Markdown file or CMS entry, with the slug as the file name so URLs stay identical. Download every image and file referenced in the content and self-host it; links to Framer’s asset CDN can break once the Framer project is gone.
Rich text from Framer comes as HTML. Clean it into Markdown or your CMS’s rich-text format, and check headings, links and embedded media.
Step 4: Rebuild the templates
Rebuild each page type once as components: home, services, case study, insight, job, legal, landing pages. Copy the design tokens (colors, type scale, spacing) from Framer into CSS variables. Rebuild animations deliberately; most Framer interactions can be done with CSS and a small amount of JavaScript.
Self-host fonts, and check each font’s licence before you do.
Step 5: Keep URLs and redirects
Use the same slugs and the same trailing-slash rule as the Framer site. Copy every existing redirect from Framer’s settings into your host’s redirect file (for example _redirects on Cloudflare Pages or Netlify). Add 301s for any URL you change or remove.
Step 6: Parity check
Crawl the new site on a staging domain (set to noindex) and compare it with the baseline from step 1, URL by URL. On allsite.pro this ran as an automated test that had to be green before launch: same status codes, titles, meta descriptions, canonicals and JSON-LD for all 225 URLs.
Test every form, analytics event and consent setting. Make sure staging is blocked from indexing with a meta tag, an X-Robots-Tag header and robots.txt.
Step 7: Switch and monitor
Point the domain at the new host, remove the domain from Framer, submit the sitemap in Search Console and check daily for two weeks: new 404s, indexing errors and traffic per page.
Running the site after Framer
The common fear is that marketing loses control. It doesn’t have to. Content lives in Markdown or a headless CMS that the team edits directly. For new pages and layout changes, the team describes the change in plain language to an AI coding assistant such as Claude, gets a preview link, approves it, and it goes live. No developer queue.
Migration checklist
- Baseline crawl of every URL saved
- Search Console exports saved (pages, queries, links)
- CMS collections exported and imported by script
- Images and files self-hosted
- Same slugs and trailing-slash rule
- Framer redirects copied, new 301s added
- Titles, meta, canonicals and JSON-LD match the baseline
- Forms, analytics and consent tested
- Staging set to noindex
- Sitemap submitted, daily checks for two weeks
How Allsite can help
Allsite is a design and development studio for marketing websites. We migrate Framer sites to custom code (and other platforms to Framer, when that fits better) at a fixed price, typically in 2 to 4 weeks. See the full website migration process, our website migration service, or request a project.