FNJ

Elementor to HTML: how to make an Elementor site static

Elementor only exports JSON templates and WordPress zips. Three ways to get static HTML, and what breaks: forms, search, comments, WooCommerce, logins.

PublishedOctober 22, 2026
Read time12 min
Written byThe Framer → Next.js team
All posts ↗

Elementor has no HTML export: it exports a .json template or a website-template .zip, and both only open in another WordPress site running Elementor. To get static HTML, save what WordPress renders with a static-site plugin such as Simply Static, a crawler such as wget, or a converter that captures the public pages. On every route, forms, search, comments and WooCommerce stop working until you replace them.

What Elementor's export actually gives you

Elementor's export features produce JSON and ZIP files, never HTML. Two of them matter here.

  • Saved templates. In the Template Library, the menu next to any saved template has an Export option (Elementor help). Elementor's developer docs say downloading a template "creates a *.json file containing the page data" (data structure).
  • Website templates. Under Elementor > Editor > Home > Tools > Website Templates, Export bundles pages, posts, Theme Builder parts and global fonts and colors into a .zip, with a list of the plugins you pick for the importing site to install (import and export). Elementor pitches it for backups, host moves and starting new sites, and importing it needs WordPress with Elementor on the other end. Some options depend on your plan.

There is no HTML button because Elementor stores each page "in a JSON format as WordPress post metadata", and "the frontend is responsible for parsing the page data to create the page layout" (Elementor developer docs). The markup only exists when WordPress answers a request. Even Elementor Host's backup download is "your full WordPress files and database" (Elementor help), which still needs a WordPress server.

So every route to static HTML works the same way: WordPress renders each URL, something saves the result, and you replace whatever needed the server.

Three ways to produce the HTML

1. A static-site plugin inside WordPress

The plugin crawls your site from inside WordPress and writes each page to a file. WordPress stays on as a private editor: you keep designing in Elementor and export again after each change.

Simply Static (version 3.8.18, 30,000+ active installs, updated October 2026, per WordPress.org) generates a ZIP or a local folder in its free version. For Elementor, the docs say the "Elementor Assets crawler works in both the free and Pro versions" and picks up Elementor's assets and jQuery files. The rest of the Elementor integration, including its Static Search widget, needs Pro (Elementor setup).

As of October 2026, Simply Static Pro costs $99 a year per site. It pushes to SFTP, GitHub, AWS S3 and Bunny CDN, and adds forms and search (pricing) and comments (comments). Its forms integration lists Elementor Forms, with one catch: by default, submissions go to a webhook on your WordPress site (/wp-json/simplystatic/v1/entries), so WordPress must stay online, with CORS headers if the two sit on different origins (forms). You can point the webhook at Formspree or Zapier instead.

Two settings to get right before the first export:

  • Replacing URLs. Use Absolute URLs for a site on its own domain. Relative Path is only for a subdirectory, and Offline Usage is "for local previewing or archiving, not for publishing" (replace URLs).
  • Caching. Turn off caching plugins and host-level caches first, or Simply Static may convert stale cached pages (disable caching).

Staatic (version 1.14.0, 2,000+ active installs, per WordPress.org) does the same job. Its Community edition deploys to a local folder, S3, GitHub, Netlify, SFTP or a zip archive, and handles redirects and custom 404 pages. Forms and search are in the paid Premium edition.

WP2Static appears in many older tutorials, but it's a poor choice for a new project. Its WordPress.org listing has been closed since August 10, 2020. The repository moved to Elementor's GitHub account after WP2Static joined Strattic, which Elementor bought in June 2022, and its last release, 7.2, dates from January 31, 2023. A maintained fork, Static Deploy, says WP2Static development "stalled for several years."

2. A crawler: wget or HTTrack

A crawler needs only the public URL, not a WordPress login, and saves what a logged-out visitor sees.

wget --mirror --page-requisites --adjust-extension --no-parent \
     --wait=1 https://www.example.com/

# Rename style.min.css?ver=6.8.3.css (or @ver= on Windows) to style.min.css
find www.example.com -type f \( -name '*.css[?@]*' -o -name '*.js[?@]*' \
     -o -name '*.woff*[?@]*' \) -exec sh -c 'for f do mv "$f" "${f%[?@]*}"; done' sh {} +

Per the GNU Wget manual, --mirror follows links with no depth limit (unlinked pages are skipped, so compare with your sitemap), --page-requisites fetches the images and stylesheets each page needs, --adjust-extension adds .html to saved pages and .css to stylesheets, and --wait "lightens the server load." The command leaves out --convert-links on purpose: it rewrites links "to make them suitable for local viewing", pointing them at saved files instead of the clean URLs your real domain should serve.

Two problems specific to WordPress:

  • ?ver= on CSS and JS. By default, WordPress adds a version number to each stylesheet and script URL "as a query string for cache busting purposes" (wp_enqueue_style). Wget keeps it in the file name (on Windows, with @ for ?), and --adjust-extension appends .css, so style.min.css?ver=6.8.3 becomes style.min.css?ver=6.8.3.css. A static host ignores the query and looks for style.min.css, so the copy loads without styles or scripts. The find command above fixes the names. Then check that every stylesheet and script loads.
  • Files that only JavaScript asks for. Simply Static's docs say Elementor pages "rely on widget-specific CSS and JavaScript, and some widgets pull in data behind the scenes." A crawler that reads HTML and CSS can miss those requests.

HTTrack does the same job with a desktop interface. Version 3.50 came out in 2026, its first packaged release in nine years. Its FAQ warns that some pages "may include javascript or java files that are not recognized."

3. A converter that captures the public pages

A converter does the crawler's job without the command line. FNJ's Elementor to HTML converter takes your public URL and captures the published pages as static HTML, which you can download, push to GitHub, or deploy to your own Cloudflare Pages or Vercel account. Like a crawler, it doesn't export the WordPress side: forms, WooCommerce, logins and member areas need replacement services. If a host blocks automated capture, FNJ reports that rather than exporting a broken site. The Elementor export guide lists the checks.

The approaches side by side

Route Needs WordPress admin Forms and search on the static copy Cost (as of October 2026) Fits
Elementor template or website-template export Yes Not applicable: output is for another WordPress site Included; some options depend on your Elementor plan Backups and host moves, not static HTML
Simply Static (free plugin) Yes No Free Small sites you re-upload by hand
Simply Static Pro Yes Yes, with WordPress kept online for the default form endpoint $99/year per site Keeping Elementor as your editor
Staatic Yes Premium edition only Community edition on WordPress.org; paid plans for Premium Same, with redirects and 404 pages built in
wget or HTTrack No, public URL only No Free, open source One-off snapshots and archives
Online converter (FNJ) No, public URL only No; connect your own services Paid plan (pricing) Leaving WordPress for good

What stops working on any static copy

Anything that sends data back to WordPress stops working. View the source of an Elementor Pro page (Elementor's own help pages will do) and you'll find an ElementorProFrontendConfig object with an ajaxurl pointing at /wp-admin/admin-ajax.php, a nonce, and the site's /wp-json/ REST address. WordPress's handbook says "All WordPress AJAX requests must be sent to wp-admin/admin-ajax.php" (AJAX). A static host has no PHP behind those addresses.

  • Forms. Elementor's Form widget sends submissions to the site's database or by email, and Form Lite does both. Email goes out through WordPress's wp_mail (Elementor help). Before you export, open your browser's Network tab, send a test entry and note the request URL. That is the endpoint you need to replace.
  • Search. The default WordPress search form sends a GET request to the homepage with an s parameter (get_search_form). A static host ignores the query and returns the homepage. Since Elementor 3.23, the Pro Search widget fetches live results "with AJAX" (release post). Replace both with a client-side index such as Fuse.js, or a hosted search like Algolia.
  • Comments. The comment form posts to /wp-comments-post.php by default (comment_form). Close comments, use Simply Static Pro's comment integration, or move to a hosted comment service.
  • WooCommerce. WooCommerce's own caching guide says Cart, My Account and Checkout "need to stay dynamic" (WooCommerce docs). Product pages copy over, but add-to-cart buttons, the cart and checkout don't work. Use a hosted checkout or keep the store on WordPress.
  • Logins and members-only pages. A copy holds only what a logged-out visitor sees, with no access control.
  • Loop Grid pagination. Elementor offers Load on click, Infinite Scroll and an AJAX page-load method (paginate a loop). Each one fetches the next page of posts without a full page load, so click through every paginated list on the static copy and confirm the next batch arrives.
  • Popups. Elementor Pro writes popup markup into the page, with triggers and timing settings in a data-elementor-settings attribute, so a popup may still open. A form or login inside it won't work. Simply Static's docs warn that most popup plugins "work with Ajax", so test each one.
  • The frozen nonce. If WordPress stays online to answer requests, the nonce saved in your HTML still expires, after "between 12 and 24 hours" by default (nonces). Requests WordPress checks against it can start failing 12 hours after the export, so test again the next day.

Keep every URL the same

Before you export, pull every URL from your XML sitemap and note its exact form. A permalink structure ending in %postname%/ produces addresses like /services/ with a trailing slash. Google treats each URL "separately (and equally)" with or without the slash, so keep the slash style you already have.

  • Save each page as a folder with an index.html inside, so /services/ is served from /services/index.html. Cloudflare Pages serves it at the slash URL and redirects /about/index.html to /about/ (serving Pages). On Vercel, "trailingSlash": true sends a 308 redirect from /about to /about/ (vercel.json).
  • Ship a 404.html. Without a top-level 404.html, Cloudflare Pages assumes a single-page app and serves the homepage for any unknown path, so every broken link shows your homepage instead of a 404. Simply Static generates a 404 page in Pro. With wget, save WordPress's own 404 page to the top folder with wget --content-on-error -O www.example.com/404.html https://www.example.com/no-such-page/. Wget reports the error but keeps the page.
  • Check what lives outside the pages. Files in the uploads folder (wp-content/uploads by default) that other sites link to, your XML sitemap, RSS feeds and robots.txt all need to come across too.
  • Watch the preview. WordPress writes full URLs into its HTML, so a copy on a temporary address can look perfect while loading CSS and images from the live WordPress server. Search the files for your old hostname and check the Network tab before you move DNS.

If any address has to change, list the old and new URLs and set up 301 redirects before launch. The redirect map guide covers how to build that list.

When static is the wrong choice

Simply Static's own listing calls e-commerce, membership sites, user logins, real-time data and heavy AJAX poor fits. Keep WordPress if:

  • the store takes orders through WooCommerce
  • members log in, or courses track progress
  • several people publish every day and nobody will run an export after each change
  • visitors depend on filters, faceted search or live results

If you mainly want speed, a page cache or CDN in front of WordPress gets part of the benefit and keeps the dynamic features working. And if you switch WordPress off for good, future changes happen in HTML files, not in Elementor.

FNJ's Elementor converter fits that last case: a mostly brochure-style site, public pages you want as files you own, and forms you'll connect to a separate service. It's paid, it produces HTML rather than an Elementor project, and it only sees what a logged-out visitor sees.

Frequently asked questions

Can you export an Elementor page as HTML?

Not from Elementor itself. A saved template exports as a .json file and a full site as a website-template .zip, and both only re-import into WordPress with Elementor. For HTML, save the rendered page with a static-site plugin, a crawler or a converter.

Do Elementor forms work on a static site?

Not on their own. Elementor forms hand each submission to WordPress to email and store, and a static host can't run that code. Send the form to a webhook or form service, or use Simply Static Pro's forms integration, which by default still posts entries to your WordPress site.

Is Simply Static free?

The core plugin is free on WordPress.org and exports a ZIP or a local folder. As of October 2026, Simply Static Pro costs $99 a year per site and adds automatic deployment, forms, search and comments. Simply Static Studio is a $12-per-month managed hosting plan per site.

Can I keep editing in Elementor after going static?

Yes, on the plugin route. WordPress stays installed, you edit in Elementor as before, and a new export publishes each change. A crawler or converter snapshot doesn't sync later edits: you capture the pages again or edit the HTML.

Is WP2Static still maintained?

Not the original. Its WordPress.org listing closed in 2020 and its last release, 7.2, came out in January 2023. A maintained fork, Static Deploy, has a WP-CLI command that imports WP2Static's core and S3 add-on settings.

Will moving an Elementor site to static HTML hurt SEO?

It shouldn't, as long as the URLs, titles, canonicals and content stay the same and missing pages return a real 404. The usual problems are changed trailing slashes, pages missing from the export, and a host that serves the homepage for every unknown path. Crawl the static copy before you switch DNS.

#elementor#wordpress#static html#website migration

Convert your Framer site next

Takes about a minute, and you can preview the result before deploying.

Convert your site →

Starting a new site instead? FNJ's AI website builder designs one from a description and a site you like, then gives you the code to host anywhere.

Up nextCan you export a Weebly website? What the ZIP leaves out

Ready to convert your website? Production-ready in minutes.

Paste your published Framer URL to generate a production-ready project in minutes.

Example: https://your-site.framer.website— your published site’s address. A custom domain works too.