A static site — plain HTML, CSS, and JavaScript, or the output of a static-site generator like Astro, Hugo, Eleventy, Jekyll, or a Next.js export — is the easiest thing on the internet to host. There is no server-side runtime to run; the files just need a CDN. Every option below serves them well, so "best" is the wrong question. The real decision is which axis you optimize: developer experience, bandwidth cost at scale, or dead-simple and free for a small project.
The fork: which axis are you optimizing?
- Cost at scale — high or global traffic, and you want the smallest bandwidth bill.
- Developer experience — built-in forms, redirects, previews, and a smooth deploy flow matter more than saving a few dollars.
- Dead-simple and free — a small, personal, or open-source site where the goal is zero cost and zero setup.
Your answer maps straight to the table below.
The options, sorted by fit
| Host | Optimizes for | Best for | Free tier | Watch-out |
|---|---|---|---|---|
| Cloudflare Pages | Edge delivery + cheapest bandwidth at scale | High-traffic or globally distributed static sites | Generous free tier | Dynamic bits run as Functions on the Workers runtime — verify compatibility |
| Netlify | Developer experience + built-ins (Forms, redirects, headers) | Marketing and docs sites that want batteries included | Yes | Usage-based costs can climb as bandwidth and build minutes grow |
| Vercel | Developer experience, especially if a framework may come later | Static now, but you might add Next.js or similar | Yes (hobby) | Usage-based pricing; the sweet spot is framework-driven apps |
| GitHub Pages | Free and dead simple | OSS projects, docs, and personal sites | Yes | No server-side logic; custom domains and builds lean on Actions |
| Render (static) | Part of a broader PaaS you may already use | Teams already running services on Render | Yes | Overkill if a static site is all you host — a pure static CDN is simpler |
| AWS S3 + CloudFront | Control and cheap delivery at large scale | Teams that want raw AWS primitives | Free-tier eligible | You wire up buckets, CDN, TLS, and invalidations yourself |
Three recommendations
Optimizing for cost and scale
Reach for Cloudflare Pages. Bandwidth is the variable cost for a static site at high traffic, and Cloudflare's is the most generous of the major options — served from a global edge network. If you later need dynamic pieces, they run as Pages Functions on the Workers runtime, so you don't have to move hosts to grow.
Optimizing for developer experience
Choose Netlify for its built-ins — Forms, redirects, headers, and deploy previews that save you from wiring them up yourself. Prefer Vercel instead when there's a real chance you'll add a framework later, since its sweet spot is framework-driven apps and your static site can grow into one without a migration.
Free and simple for a small or OSS site
For a personal, docs, or open-source site, GitHub Pages is free and about as simple as hosting gets — push to a repo and it's live. The trade-off is no server-side logic at all, so only pick it if you're sure the site stays fully static.
The trap to avoid
The classic mistake is over-engineering static hosting — reaching for a full PaaS or a server when static files only need a CDN. You pay for and operate infrastructure the site never uses. The inverse trap is picking GitHub Pages for the free simplicity, then hitting a wall the moment you need a form handler, an API route, or anything server-side it fundamentally can't do. Match the host to what the site actually is, and neither happens.
How to choose in 60 seconds
- Cost at scale your priority? Cloudflare Pages — cheapest bandwidth on a global edge.
- Developer experience and built-ins? Netlify; or Vercel if a framework may come later.
- Small, personal, or OSS and want free + simple? GitHub Pages — just push to a repo.
- Unsure? Start on Cloudflare Pages or Netlify's free tier — both serve any static site well and leave room to add functions later.
A note on pricing
Static hosting is cheap, and for small sites it's usually free. The variable that matters at scale is bandwidth — the more traffic you serve, the more it drives the bill, and Cloudflare Pages is generally the cheapest there. Free-tier limits and overage rates change often, so verify current numbers on each provider's pricing page before you commit.
FAQ
Is a CDN enough for a static site?
Yes. A static site is plain HTML, CSS, and JavaScript files, so it only needs a static host or CDN to serve those files fast and globally. There is no server-side runtime to run, which is exactly why static hosting is the easiest — and often free — thing to host.
Which is cheapest at scale?
Usually Cloudflare Pages, because bandwidth is the variable cost for a static site at high traffic and Cloudflare's bandwidth pricing is the most generous of the major options. AWS S3 + CloudFront can also be very cheap at scale, but you assemble and operate it yourself. Always verify current pricing on each provider's page.
Can I add dynamic features later?
Yes. Most static hosts let you bolt on edge or serverless functions for dynamic bits — Cloudflare Pages Functions on the Workers runtime, or Netlify and Vercel functions. Check the runtime and its limits before you commit, since GitHub Pages is the notable exception with no server-side option at all.
Building the site these will serve, not just choosing where to put it? The MVP Machine turns a spec into a shipped product.