This is the most important article in these docs. Nearly every single-file page that looks broken after upload is broken for the reason explained here, and the fix takes a few minutes. If your page comes with its own folders of images and styles, you can skip the fixing and upload it as a ZIP.
Why this matters:
When you upload a single .html file, Free HTML Pages serves that one file. Separate image, CSS or JavaScript files are not uploaded with it. Your page lives at an address like yoursite.com/h/your-page/. If your HTML says img src="images/photo.jpg", the browser asks for yoursite.com/h/your-page/images/photo.jpg. For a single-file page the plugin only answers the exact page address, so that image is not found and shows as broken. When you upload the page as a ZIP, its images, styles and scripts are served under the page address and that same path works.
The rules for a single-file page that works first time:
- CSS goes inside style tags in the head of the file, or is linked from a full address that starts with https://
- JavaScript goes inside script tags in the file, or is linked from a full https:// address.
- Images, videos and downloads use full addresses that start with https://
- Web fonts and code libraries from public content delivery networks load normally.
- Your file should have a proper head and body, with both closing tags, </head> and </body>. Code Injection needs them.
- Save the file as UTF-8 and include meta charset="utf-8" in the head. The plugin sends every page as UTF-8, so this keeps accents and symbols looking right.
- Use https:// addresses on an https site. Browsers may block http:// images and scripts on a secure page.
Host your images in WordPress:
- In your admin, go to Media, then Add New and upload your images.
- Click an image and click Copy URL to clipboard.
- In your HTML, replace the relative path, for example images/photo.jpg, with the address you copied.
- Repeat for each image, save the file and upload it.
Time saver: if all your images sit in one folder and you upload them to the Media Library at the same time, they share the same address start, for example https://yoursite.com/wp-content/uploads/2026/09/. Use your text editor's find and replace to change images/ to that address in one go.
Bring linked CSS into the file:
- Open the .css file in a text editor and copy everything.
- In your HTML head, paste it between style and /style tags.
- Delete the old link tag that pointed at the .css file.
Bring linked JavaScript into the file:
Do the same with each .js file: paste its contents between script and /script tags where the old script tag was, and remove the src attribute.
What about ZIP files?
The upload box accepts a .zip as well as .html and .htm files. If you have a PLR pack or an export from a page or funnel tool, zip the page with its folders of images, CSS, JavaScript and fonts and upload the .zip. The plugin unpacks it and serves every file under your page's address, so paths such as images/photo.jpg keep working with no changes to your HTML. If the ZIP holds several HTML pages, they all go live from that one upload. Uploading A ZIP Of A Full Page Or Funnel Export has the full steps. Prefer one file? Then follow the steps above so the page no longer needs the other files.
Check your work:
After you publish, click Preview Page → and look for broken images or missing styling. Anything broken is almost always still pointing at a relative path.
A note on PHP:
The plugin sends your file exactly as it is. Any PHP code inside it will not run, so use plain HTML, CSS and JavaScript.