26th September 2026
I recently moved my website to Cloudflare Pages. It was surprisingly easy.
For the past 10 years or so I've been hosting my website on a DigitalOcean droplet, a tiny Ubuntu VPS that cost me roughly $7.50 per month. Not expensive, but still, that's money I'd rather have in my own pocket.
Hosting a static website with Cloudflare Pages is free. All you need to do is set up an account, click the button to create a new "Pages" application, and point it to a Github repository containing your website's files.
The repository can be private and you can select a particular output directory within the repository containing the files you want to serve. Every time you push to the repository, Cloudflare Pages runs a build command that you specify, then updates your website with the files from the output directory.
There's built-in support for a bunch of popular static website generators (Hugo, Jekyll, etc.), but you can generate the files any way you like. I build my website locally using Ark, so for me the Cloudflare Pages build command is just exit 0, a no-op.
It's fast, simple, and free — what's not to like?
The only downside is that I've lost my contact page — that was the only "dynamic" feature on my site that needed server-side scripting to work. In fairness, 99.9% of the messages I got from that contact form were spam, so it's not much of a loss 🤷♂️
If you do really need to get in touch, you can open an issue in my contact repository on Github — that's my current experimental solution. We'll see how it works.
It turns out there really is an unexpected downside to migrating to Cloudflare Pages — for some reason, Cloudflare silently and permanently redirects all requests ending in a .html file-extension to an extensionless version of the URL.
For example, if you try to go to the URL https://www.dmulholl.com/blog/moving-homepage.html, Cloudflare will respond with a 308 Permanent Redirect to the URL https://www.dmulholl.com/blog/moving-homepage instead.
There's no advance warning when you're setting-up the site and there's no option for turning this behaviour off.
Not cool, Cloudflare, not cool.
So what's the problem here? The problem is that this link-rewriting makes it difficult to migrate away from Cloudflare Pages if they do start charging in future — it's a sticky product strategy that makes it easy for customers to enter but difficult to leave.
If somebody wants to link to a page on my site — say this page — they'll copy the URL they see in their browser: https://www.dmulholl.com/blog/moving-homepage.
That works fine right now but if I ever decide to leave Cloudflare and go back to serving my site as a simple collection of static files on a cheap VPS somewhere, that link is now broken. If I want it to keep working, I'm going to have to set up my own collection of redirects from the extensionless URLs back to the original URLs.
That's certainly doable, but it's hassle I don't need. I have a simple static website for a reason.
It gets worse.
Because Cloudflare are using permanent redirects, all the "SEO juice" that my pages have built up over the years has now been transferred to the new extensionless URLs.
If I migrate my site and don't redirect back to the original .html URLs, all that juice is lost.
Actually, I don't care about this because this is just a personal site, I'm not selling anything here, and a broken link or two isn't going to break my heart. But if I was selling a product here, this would be annoying.
Ah well, I guess there's no such thing as a free lunch after all. Or maybe there is, but Cloudflare do sneak up and staple your jeans to the picnic bench while you're eating.
I'm happy enough to stay with Cloudflare Pages for now — free is an attractive price point, plus it will probably take me another 10 years to work up the motivation to change my hosting again.
But it's been a disappointing experience, and may even have shaken my previously unquestioned faith in the intrinsic benevolence of multinational corporations 💁♂️