Mirror

Cloudflare Pages vs Netlify for a Small Marketing Site, Including the Bill at Month Six

Both deploy a static site in ten minutes. The differences show up in build minutes, redirect handling, and one caching behaviour that cost me two hours to understand.

For a static marketing site, both of these will have you deployed from a Git repository in about ten minutes, and any comparison that stops there is useless because that part is solved. I ran a client site on Netlify for a year, moved it to Cloudflare Pages, and kept notes on every occasion the difference mattered, as I did for the Figma versus Penpot trial.

a build-minutes meter running out of fuel next to an unmetered one

Build minutes are the first real divergence and they favour Cloudflare decisively. Netlify’s free tier includes 300 build minutes a month. Our site builds in about 90 seconds, and with a content team pushing edits, we crossed 300 minutes in month four and started paying. Cloudflare Pages allows 500 builds a month on the free tier and does not meter minutes, which for a fast-building site is effectively unlimited. That difference alone was $19 a month.

Redirects went the other way. Netlify’s _redirects file supports a syntax that includes splats, placeholders, and conditional rules by country or language, and it has been stable for years. Cloudflare Pages supports a subset — the syntax looks the same, and then a rule that worked on Netlify silently does not fire. We had a set of legacy URLs from a 2019 site structure, and three of the fourteen redirect rules needed rewriting as Workers logic. If you are migrating a site with real URL history, budget an afternoon for this and test every single rule after deploying, because the failure mode is a 404 rather than an error message.

The caching behaviour is the two hours I mentioned. Cloudflare Pages sits on Cloudflare’s CDN, which means your zone’s cache rules apply to it — including any rules that predate the site. On this project there was a rule left over from a WordPress installation that cached HTML aggressively. The result was that deploys appeared to succeed and the live site did not change, intermittently, in a pattern that looked like a build problem and was not. Netlify’s cache invalidation on deploy is automatic and complete, and I never once thought about it in a year. That is a genuine advantage of the simpler product.

Functions are close enough not to decide it for a marketing site. Both let you drop a file in a directory and get an endpoint. Cloudflare’s Workers runtime is not Node — some npm packages will not work — and Netlify’s Functions are Lambda-shaped with a cold start you will occasionally feel. For a contact form neither matters. For anything with a database behind it, this is the thing to test first rather than last.

Analytics is a quiet win for Cloudflare. Web Analytics is included, requires no cookie banner because it sets no cookies, and gives you page-level numbers that are good enough for a marketing site. Netlify Analytics is a $9 a month add-on, the kind pricing audits catch. Over a year that is another $108, and I would rather have neither than pay for one, but free changes the calculation.

Support is the argument for Netlify and it is not a small one. On the free tier you will not get help from either, realistically, but Netlify’s documentation and its community forum are substantially better organised, and when I searched an error message I found an answer more often. Cloudflare’s documentation is comprehensive and assumes you already know which product you are in, which is a real barrier when the answer lives under a service you did not know you were using.

We stayed on Cloudflare. The deciding factor was the build minutes and the free analytics, which together came to about $27 a month against a hosting bill that should be zero for a site like this. The redirect afternoon and the caching two hours were one-time costs — migration work nobody schedules — and I have written both down so they are one-time for the next project too.