Framer to HTML or Framer to Next.js, which do you need?

Framer to HTML gives you a static snapshot; Framer to Next.js gives you a project to keep building. Compare editing, CMS, forms, SEO and hosting.

Published
Updated
Reading time
5 min
Deframer cover: “A snapshot, or a project?” Beside it, two cards, HTML or Next.js, with Next.js selected
On this page8 sections

Choose Framer to HTML if you want a frozen copy of your site to archive or host cheaply and you'll rarely change it. Choose Framer to Next.js if you want to keep working on the site as code: reusable components, CMS records you can edit, forms that post to your own backend, and a project developers can review in Git. Both start from your published Framer site. The difference is what you get back: a snapshot of the output, or a project that produces it.

Framer itself offers neither. Its help center says it "does not offer HTML export for self-hosting" (Framer Help), so both routes rely on third-party tools. Deframer, the tool behind this blog, does the Next.js route. We'll be fair to both.

What a static HTML export is

A static exporter visits each page of your published site and saves what the browser receives: HTML documents, stylesheets, scripts and assets, laid out as folders that a basic web server can serve. Upload them to any static host and the pages load.

It's a good fit when:

  • the site is a landing page, an event page or a portfolio that's essentially finished;
  • you want an offline archive of a site before you take it down;
  • you need the cheapest possible hosting and will never edit the design again.

The limits come from what a snapshot is. The markup is generated, so the same header is repeated in every file rather than written once as a component. Changing it means find-and-replace across pages. Content from CMS collections is baked into pages as they were rendered, so a new blog post means a new HTML file built by hand. And anything that relied on Framer's servers, native form submissions above all, needs a new destination.

What a Next.js project is

A converter that targets Next.js writes the source code that renders your pages, not the pages themselves. With Deframer, a converted project looks like this:

Code
src/
  app/          one page.tsx per URL, with its metadata
  views/        page components, each with a CSS module
  components/   design components in the designer's folders
  styles/       color styles as CSS variables, text styles, fonts
  cms/          each collection as <name>.ts (schema) + <name>.json (records)
  site/forms.ts native forms, served by app/api/forms/<form>/route.ts
  lib/deframer/ the helper kit that replaces Framer's runtime
public/         robots.txt and sitemap.xml as the site publishes them

Change the header component once and every page that uses it changes. Add a record to src/cms/blog.json and the detail page is prerendered on the next build, through generateStaticParams. Forms post to the project's own route handlers and deliver to a webhook URL you set. What you get in a converted Next.js project goes folder by folder.

Side by side

Static HTML snapshot

Next.js project (Deframer)

What you get

The pages as rendered

The source that renders them, in TypeScript

Shared parts

Repeated in each file

React components, written once

Editing text or layout

Edit generated markup

Edit a component or a JSON record

CMS

Pages frozen as they were

Collections as JSON with a schema, detail pages prerendered

Native forms

Need a new endpoint

One route handler per form, webhook delivery

Redirects

Depend on your host's config

Listed in next.config.ts

Page metadata

In each HTML file

metadata per route, metadataBase in the root layout

Hosting

Any static host

Anywhere Next.js runs: Vercel, Netlify, a container, your own server

Who maintains it

Anyone who can edit HTML

Someone comfortable with React and Next.js

Where the snapshot wins

Simplicity. A folder of HTML has no build step, no dependencies to update and no Node.js version to think about. For a site that's finished, that's a real advantage, and a Next.js project would be more machinery than you need.

Where the project wins

Change. Most sites keep changing: a new case study, a pricing update, a form that should go to a CRM. In a project, each of those is a small edit in a file that says what it is. You can put it under Git, review changes on branches, and deploy previews before anything goes live. Maintaining a converted Framer site with Git shows that workflow.

It also leaves room to grow. A Next.js project can add an API route, authentication or a headless CMS without leaving the codebase. Adding a headless CMS to a converted Framer site is one example.

Questions to decide with

  1. Will anyone change this site after the move? If not, a snapshot is enough.
  2. Does it have CMS collections that grow? Then a project, where records are data, will save repeated manual work.
  3. Does it have forms? Either route needs a destination for submissions. In a converted project that's an environment variable; see how Framer forms work after moving to Next.js.
  4. Who will maintain it? A Next.js project needs someone comfortable with React. If nobody is, consider staying on Framer, where editing stays visual.
  5. Does search traffic matter? Both can preserve URLs. A project also keeps your redirects, per-page metadata and canonical URLs in code you can check; keeping your SEO when moving off Framer has the list.

What converting to Next.js costs

Deframer is priced per site, not per month: converting is free, and downloading a converted project uses one credit, $10 for a single credit, $25 for five or $100 for thirty, on the pricing page. Credits never expire, a failed conversion costs nothing, and re-downloading is free for the 7 days the download is kept. To download, you need to own the site, or have its owner's permission, and verify it by publishing a one-line meta tag on it.

Deframer is independent of Framer and reads only the public files your published site serves; nothing in your Framer account is touched.

FAQ

Can I export my Framer site to HTML?

Not from Framer itself; its help center says it doesn't offer HTML export for self-hosting. Third-party tools can save a static HTML copy of a published site, and converters such as Deframer can write it out as a Next.js project instead.

Is a static HTML export good enough for SEO?

It can be, if every URL stays the same and each page keeps its title, description and canonical tag. You'll need to set up redirects on your new host yourself. A converted Next.js project keeps redirects in next.config.ts and metadata in each route file.

Can I edit a Framer HTML export later?

Yes, but you edit generated markup, and shared parts such as the header are repeated in every file. A Next.js project has those parts as components you change once.

Do Framer forms work in an HTML export?

Native Framer forms submit to Framer's form service, so in any exported copy they need a new destination. In a Deframer project each form posts to its own route, /api/forms/<name>, which delivers submissions to the webhook URLs you configure.

Which is cheaper to host, HTML or Next.js?

A folder of static HTML can be hosted almost anywhere for very little. A Next.js project needs a host that runs Next.js, or a container or server of your own. Compare hosts' current plans, and see Framer hosting vs. self-hosting for how the costs are structured.

Keep reading

All posts
  • Deframer cover: “No export? Four ways out.” Beside it, four tiles, Rebuild, Snapshot, Converter and Reverse proxy, with Converter selected

    Export6 min read

    Can you export code from Framer?

    Framer has no code export. Here are the four real routes to your site's code (rebuild, HTML snapshot, converter, reverse proxy) and how to pick one.

  • Deframer cover: “To Next.js, step by step.” Beside it, a list of Framer, Next.js, TypeScript and Deploy anywhere with Next.js selected

    Migration6 min read

    How to export a Framer site to Next.js

    Export a Framer site to Next.js step by step: convert, compare, verify ownership and download an App Router TypeScript project, then check it.