Free Websites and Hosting
Replace paid WordPress hosting with a free, faster Cloudflare Pages site.
By James Schramko · Updated May 2026
Most founders are paying $200 to $400 a month to host a WordPress site that could run for free on Cloudflare Pages. This playbook shows you how to replace it using Claude Code and GitHub.
Why do this
Plugin updates and security patches go away in one move. Static hosting can fit within the free plan. Backups get simpler, not gone. Git keeps the committed history of the site. You keep a separate backup of the repo and your media somewhere that is not GitHub. The site loads faster. Your team spends less time on upkeep. Every future site update can be a text prompt to Claude Code, even from a mobile phone. That time goes back to higher value work.
What you need before you start
A Cloudflare account (free). A GitHub account (free). Claude Code installed from the Code tab in the Claude desktop app. Screaming Frog installed (free up to 500 URLs). WordPress admin access to your site. A folder on your desktop for site files.
Step 1: Check PageSpeed before you start
Run PageSpeed Insights on your current site at pagespeed.web.dev. Record the desktop and mobile scores. You will run this again after the build to confirm the improvement.
Step 2: Crawl the site externally with Screaming Frog
Run Screaming Frog on your WordPress site URL. This maps every page the public can see. Export the full URL list as a CSV when complete.
Step 3: Crawl from the inside using Chrome MCP
Log into WordPress as admin in your browser. Then open Claude chat and use Chrome MCP to move through the WordPress admin area. This picks up pages with no public link, draft pages, password-protected pages, and anything the outside crawl missed. Add any new URLs found to the CSV from Step 2.
Step 4: Build the page inventory CSV
Using the combined Screaming Frog and Chrome MCP export, create a CSV with these columns:
Old URL, New URL, Action, Notes
Actions are: Keep, Redirect, Remove.
Keep: pages worth rebuilding on the new site. Redirect: pages moving to a new URL or being replaced by another page. Remove: pages that no longer need to exist.
For blog posts and content pages, check your analytics before deciding. Only keep posts with high traffic or proven conversion. Low traffic posts that never converted do not need rebuilding.
Mark every page that holds private information as PRIVATE in the Notes column. That means member content, anything behind a login, and a thank you page that reveals what someone bought. Those need access protection, not a sitemap exclusion. On a static site every file is public to anyone with the address. Leaving a page out of sitemap.xml does not make it private or stop search engines finding it. Keep PRIVATE pages out of the build until protection is set up and tested on every route the site answers on. That means the custom domain, the pages.dev address and the preview URLs, which Cloudflare protects separately. Cloudflare Access covers this and is free for a handful of users. Admin pages have no equivalent on a static site. Drop them.
Step 5: Create a private GitHub repository
Go to github.com and create a new repository. Set it to Private. Name it after your site, for example yoursite-pages.
Step 6: Open Claude Code and build the site
Open the Code tab in the Claude desktop app. Create a folder on your desktop for the site files and point Claude Code at it. Give it your page inventory CSV and this instruction, customized for your site:
I want to migrate my WordPress site at yoursite.com to a static HTML site. Use the attached CSV as the page inventory. Rebuild all Keep pages as clean mobile-responsive HTML. Set up 301 redirects for all Redirect rows. Leave every PRIVATE page out of the build and list them separately; they go live only after Cloudflare Access is configured and tested on the custom domain, the pages.dev address and the preview URLs. Exclude them from sitemap.xml as well. Include sitemap.xml, robots.txt, and JSON-LD schema. Commit to my GitHub repo at [your repo URL].
If you get stuck at any point, open a Claude chat conversation and describe the problem. Claude can work out what is wrong and give you the next step to paste back into Claude Code.
Step 7: Connect GitHub to Cloudflare Pages
Go to dash.cloudflare.com. Workers and Pages, then Create, then Connect to Git. Select your GitHub repo. Leave build settings blank. Deploy. Cloudflare gives you a staging URL ending in pages.dev.
Step 8: Check Screaming Frog on the staging site
Before touching your live domain, run Screaming Frog again on the staging URL. Look for broken links, missing redirects, and pages that should not be indexed. Fix anything before going live.
Step 9: Review the staging site
Check every page on desktop and mobile. Check all links. Fix anything that looks wrong by telling Claude Code what to change. Do not point your domain until this step is done.
Step 10: Point your domain
In Cloudflare Pages go to Custom Domains and add your domain. If your domain is already on Cloudflare, DNS sets itself up. If it is on another registrar, Cloudflare gives you the records to add by hand. SSL activates on its own within a few minutes. Add both the root domain and www.
Step 11: Confirm email routing
Before canceling your old hosting, confirm your email is routing correctly. Most business email runs through Google Workspace and does not depend on your hosting. Check it is still working after the DNS change. If you do not have Google Workspace, Cloudflare Email Routing handles forwarding for free. Do not cancel old hosting until this is confirmed.
Step 12: Check PageSpeed after launch
Run PageSpeed Insights again on the live site. Compare desktop and mobile scores against Step 1. You should see a clear improvement.
Step 13: Confirm everything is working
Check the live site on desktop and mobile. Confirm all forms are submitting. Confirm tracking is firing in GA4. Check redirects from old URLs using the CSV as your reference.
Step 14: Cancel your old hosting
Only cancel after everything above is confirmed live and working. This is the one mistake that causes pain.
What you save
Hosting that can fit within the free plan from day one. No more security plugins, backup plugins or update chores. Git keeps the committed history, and you keep a separate backup of the repo and media. From here on, every site change is a text prompt to Claude Code, even from your phone. Your team member goes back to higher value work.
Note on forms and checkout pages
If you use Ontraport, Stripe, or another platform for checkout, those pages stay where they are. They are not part of this move. Only your static content pages move to Cloudflare.