Why this conversion is different
Hand-written HTML is the cleanest possible input for a conversion. There is no proprietary runtime, no builder shell and no obfuscated class names: what you see in the browser is what ends up in the theme.
The classic manual route is slow. You split index.html into header.php, footer.php, index.php and page.php, register the stylesheet with wp_enqueue_style, rewrite every asset path to get_template_directory_uri(), then debug the parts that broke. That is a half-day for a simple page and days for a full site.
Themify does the mechanical part for you. It reads the live DOM after scripts have run, resolves the computed styles, downloads the assets it finds, and writes a standards-compliant theme folder with style.css, the template files and an assets directory.
How it works, step by step
1. Open the finished HTML page in your browser
Use a real URL or a local server (not file://, which blocks some asset requests). If you have a build step, run it first: the theme should be built from the production output, not from the dev server with hot-reload scripts injected.
2. Scroll once, then click Generate theme
Scrolling triggers lazy-loaded images and scroll-reveal animations so they are captured in their final state. Then open the Themify popup and press Generate theme; everything runs locally in your browser.
3. Upload the .zip to WordPress
In wp-admin go to Appearance → Themes → Add New → Upload Theme, pick the .zip, install and activate. From there you edit copy in WordPress and extend the templates like any other theme.
What gets converted — and what doesn't
Converted
- Full page structure and semantic markup as rendered
- All CSS actually applied to the page, including media queries and custom properties
- Web fonts, whether self-hosted or loaded from Google Fonts
- Images, SVG icons, background images and favicons
- CSS transitions, keyframe animations and hover states
- Multi-page sites: capture each page and links between them keep working
Not converted
- Server-side logic (PHP includes, form handlers, databases)
- Content that only exists after a runtime API call
- Form submissions — rewire them to a WordPress form plugin after install
- Editor-managed blocks: the theme reproduces the design, not WordPress block schemas
A real example
Before
A five-page HTML template (home, services, about, blog, contact) built with vanilla CSS and a small JS carousel, hosted on a static server.
After
One WordPress theme .zip containing the shared header and footer, a template for each page, the carousel styling as rendered, and every image and font copied into /assets.
Each page is captured in turn, the shared header and footer are recognised as common, and the internal links are rewritten so navigation works inside WordPress.
Benefits
- Minutes instead of a day of template splitting
- Pixel-identical output, because the source is the rendered page itself
- No PHP knowledge required to get the first working theme
- Nothing is uploaded: conversion happens entirely in your browser
Limits to know before you start
- Dynamic behaviour that depends on a backend must be rebuilt with WordPress plugins
- Very large single pages take longer to capture while assets download
- You should only convert sites you own or are authorised to migrate
Frequently asked questions
How do I convert an HTML website to WordPress?
Open the page in Chrome, install Themify, scroll through the page once, then click Generate theme. You get a .zip you upload in Appearance → Themes → Add New → Upload Theme. No manual template splitting.
Can I convert an HTML template I bought?
Yes, provided the licence allows you to use it on your own site. Open the template's demo build locally or on your server and capture it like any other page.
Do I need to know PHP?
Not to get a working theme. PHP only becomes useful later, when you want to wire parts of the design to WordPress loops, menus or custom fields.
Is my HTML uploaded anywhere?
No. The capture and the packaging run locally in the browser; the page never leaves your machine.

Add to Chrome — first conversion free