Skip to content

Convert WordPress to Static HTML (Even Without Login)

Convert WordPress to static HTML for a backup, archive or move: export vs plugin vs crawler, options with no login or an offline site, and what breaks.

Website Downloader 9 min read

To convert WordPress to static HTML, you need a copy of the pages WordPress renders, not its database. You can get one in two ways. A static-site plugin can generate it from inside wp-admin. A crawler can visit the live site and save every page with its images, CSS and scripts. WordPress's built-in Tools → Export won't do this, because it produces an XML file rather than a website. If you've lost the login, the site was hacked or the hosting has expired, a crawler or a Wayback Machine restore is your route. Below you'll find which method fits which goal, step by step, and what stops working once the site is static.

Why does Tools → Export only give me an XML file and not a website?

The Export screen in wp-admin creates a WXR file (WordPress eXtended RSS). It holds your posts, pages, comments, categories, tags, custom fields and menu items as structured data. Its job is to move content into another WordPress installation through Tools → Import. It leaves out the theme, the layout, the stylesheets and usually the media files themselves. Attachments appear as records pointing to URLs, not as image files. If you open the file in a browser, you see markup, not your site.

Keep that XML file anyway, because it's a useful content backup. Just don't confuse it with a static copy. The same applies to full backup plugins that archive the database and the wp-content folder. Restoring those still needs PHP and MySQL. Static HTML is something else: WordPress's output, frozen as plain files that any web server or browser can open.

Three ways to convert WordPress to static HTML: export, plugin or crawler

MethodWhat you needWhat you getWeak spots
Tools → Exportwp-admin accessAn XML content fileNot browsable; needs WordPress to use
Static-site plugin (e.g. Simply Static)wp-admin access, permission to install plugins, a working PHP siteHTML files generated on your serverUseless without a login; runs on a possibly outdated or compromised install
Crawler (online tool, wget, HTTrack)Only the public URLEvery linked page with its assets, as a ZIP or folderOnly finds what is publicly linked; login-only pages are skipped
Wayback Machine restoreCaptures on archive.orgThe site as it was archivedOnly as complete as the captures

Match the method to your goal:

  • WordPress static backup of a live site you still run: a crawler gives you a browsable snapshot without touching the install. Keep the XML export alongside it.
  • Archive an old WordPress site you no longer want to maintain: a crawler or plugin. Then you can shut down WordPress and still keep the site online as plain files.
  • Move to static hosting for good: either works. A plugin gives you finer control if you still have admin access.
  • No login, hacked or expired site: a crawler while the site still loads, a Wayback restore once it doesn't.

Converting with a static-site plugin when you still have wp-admin access

If you can log in and install plugins, a static-site generator plugin is a reasonable choice. The typical workflow:

  1. Update WordPress and take a normal backup first, since installing anything on an old site can break it.
  2. Install the plugin and set the destination URL, which is the address the static site will live at. Choose relative or absolute URLs.
  3. Add any pages that aren't linked from the menu or posts so the plugin includes them.
  4. Run the export and download the generated ZIP, or let the plugin deploy to a host if it supports that.

The advantage is that the plugin knows WordPress's URL structure and can include pages a crawler would never find. The downsides are just as real. The plugin needs a healthy PHP install. On shared hosting, large sites can hit timeouts. And you're adding code to a site you may be about to retire. Many of these plugins split features between a free and a paid version. Before you commit, check whether the free version limits how much it converts per run, or holds back what you need, such as form handling, search or deployment.

If you're looking for a Simply Static alternative because you can't or don't want to install anything on the WordPress side, use a crawler.

How to download a WordPress site as HTML without a plugin or login

A crawler doesn't care that the site runs WordPress. It loads the home page, follows every internal link and saves each page together with the files it uses. Because it works from the outside, you need no wp-admin access, no FTP and no plugin. That makes it the practical way to export a WordPress site to HTML when you've lost the password or the original developer has disappeared.

With Website Downloader it takes three steps:

  1. Enter the site's address in the form on the home page.
  2. Watch the live progress as pages are counted. You can close the tab, because the crawl runs on the server and your computer doesn't need to stay on.
  3. Download the ZIP, unpack it and open index.html in any browser.
The whole job from the outside: paste the WordPress address, let the crawl count the pages, then download one ZIP you can open offline.

The free plan needs no account and covers up to 100 subpages. WordPress sites generate more pages than people expect, though. Every category, tag, author, date archive and /page/2/ pagination step counts. A blog with 60 posts can easily pass 100 URLs. For a full copy, the Single Site plan is a one-time 7.99 EUR for up to 5,000 subpages and 2 GB. Details are on the pricing page.

If you prefer the command line, wget does the same job:

wget --mirror --convert-links --adjust-extension --page-requisites --no-parent https://example.com/

It's free, but you have to run it on your own machine and tune it for redirects, rate limits and srcset images. Our comparison of wget, HTTrack and an online downloader covers the trade-offs.

Tips specific to WordPress

  • Crawl the canonical address. Use the one the site actually redirects to (https, with or without www), so links aren't split across two hosts.
  • Compare against the sitemap. Most WordPress sites publish /wp-sitemap.xml or a sitemap from an SEO plugin. Count the URLs there and compare that with your archive. Pages missing from the archive aren't linked anywhere.
  • Accept what can't be captured. Drafts, private posts, password-protected posts and anything behind a login aren't public, so no crawler will get them.

If the site was hacked

A crawler copies what visitors see, and that includes injected spam links, redirect scripts or fake pages. Before you put a copy of a compromised site back online, search the files for unfamiliar <script> tags and outbound links you don't recognise. If the infection runs deep, a clean capture from the Wayback Machine dated before the hack may be the better source.

What if the WordPress site is already offline or the hosting has expired?

First check whether anything still loads. Hosting accounts are sometimes suspended a while before they're deleted, and a site that still answers can be crawled right now. It's also worth asking the host whether they still hold a backup of the account.

If the site is truly gone, the Internet Archive is often the only copy left. Website Downloader's Wayback Machine downloader rebuilds the site from its archive.org captures. It removes the playback toolbar and the links back to archive.org, so the pages behave like the original site. A restore of up to 100 pages is free. The Wayback Restore plan is a one-time 14.99 EUR for up to 5,000 subpages, kept for 30 days. Monthly plans don't include restores.

Pick the capture date that best represents the site, such as the last one before it went offline or before a hack, and that snapshot becomes your ZIP.

Be realistic about what you'll get. The Wayback Machine doesn't capture every page or every image, so some posts or media may be missing. Our guide to restoring a website from the Wayback Machine explains how to choose a good snapshot and fill in the gaps.

Do contact forms, search, comments and WooCommerce still work after converting?

No. These features need PHP and a database answering each request, and a static copy has neither. Expect these to stop working:

  • Contact forms (Contact Form 7, WPForms and similar). They post to WordPress, so a submission goes nowhere.
  • Search. /?s=term is answered by the database, so the search box returns nothing useful.
  • Comments. Existing comments stay visible as text, but nobody can post new ones.
  • WooCommerce. Product pages display fine, but the cart, checkout and customer accounts don't work.
  • Logins and memberships, plus anything that loads through admin-ajax.php or the REST API, such as "load more" buttons, filters or infinite scroll.
HTML, CSS, JavaScript, images, fonts, video and PDFs carry over; anything that needs the server to answer, like forms, search or logins, doesn't.

Each feature has a fix. Point the form at a third-party form service or replace it with an email address. Add a client-side search script, or simply drop search on a small site. Close comments with a short note. Link product pages to wherever you sell now. For an archive, it's usually enough to keep the content readable and remove the broken interactive parts.

Hosting the static HTML without WordPress and checking that links and images work

The result is plain files, so it runs on any web server or static host. There's no PHP, no MySQL and no plugin updates. This is how you shut down WordPress and keep the site: the pages stay at the same addresses, but nothing is left to patch or attack.

  1. Unpack the ZIP and test locally. Opening index.html works for a quick look. For a test closer to real hosting, run a small local server in the folder with python3 -m http.server and browse to localhost:8000.
  2. Click through it. Check the main menu, a few old posts, category pages, images inside posts, PDFs and embedded media. Look for links that still point at /wp-admin/, /wp-login.php or the old domain.
  3. Keep the URL structure. WordPress permalinks such as /about/ become about/index.html, so the same addresses work on the new host and search rankings carry over. Upload the folder contents to the web root, not inside an extra subfolder.
  4. Switch over. Point the domain at the new host, then check it again on the live address.
  5. Retire WordPress last. Keep the XML export, a full database backup and the ZIP somewhere safe before you delete the install.

For more on what's inside a downloaded archive and how to open it, see the guide to downloading a website as a ZIP.

FAQ: converting WordPress to static HTML

Can I upload the exported HTML to a server that has no WordPress installed?

Yes, and that's the point of converting. Static HTML needs only a web server that delivers files, so any basic hosting, static host or CDN will do. You don't need PHP, a database or WordPress itself.

Is there a free way to export a whole WordPress site as HTML?

Yes. wget and HTTrack are free if you're comfortable installing and configuring them. Some static-site plugins have free versions, though you should check their limits. Website Downloader's free plan copies up to 100 subpages with no account, which is enough for many small sites. Larger sites need the one-time Single Site plan.

Can I convert WordPress to static HTML without installing a plugin or logging in to wp-admin?

Yes, with a crawler. It reads the site from the outside like a visitor, so it needs only the public address. The one limit is that it can't reach pages behind a login or pages that nothing links to.

Will internal links and images still work in the static copy?

They should, because a good crawler rewrites internal links to point at the saved files and downloads the images, stylesheets and fonts each page uses. Test a sample of pages anyway. Images or posts that load through JavaScript or the REST API are the usual gaps. Our FAQ covers more edge cases.

  • convert WordPress to static HTML
  • WordPress
  • Static HTML
  • Website Backup
  • Website Archiving