← Guides

How to host a static website for free

The free static hosting options that are actually free, what each one wants from you in return, and how to get a custom domain with HTTPS onto one of them.

Last checked

Free static hosting is real, it is not a trial, and several of the options are run by companies large enough that they are not going anywhere. This is a survey of what is genuinely free, what each one costs you in something other than money, and how to put your own domain in front of it.

We host static sites for a living, so read the last section knowing that. The first three are not about us.

The options that are actually free

GitHub Pages. Free, unlimited in practice for a personal site, HTTPS on a custom domain included. The price is that your site is a repository: deploying means committing, rolling back means reverting and waiting for a rebuild, and whether the source is public is a repository setting rather than a site setting. If your site is already a repo and you are happy with that, it is very hard to beat.

Cloudflare Pages. A famously generous free tier on one of the best networks in the world, with unmetered bandwidth. The price is that you are adopting a platform account — the deploy path assumes a Git connection or the Wrangler CLI, and hosting your folder is one feature inside a dashboard that also does DNS, security, tunnels and workers.

Netlify and Vercel free tiers. Both are build platforms with real free plans, and both are excellent if you want a git push to produce a built site. The price is that the free tier is the bottom of a usage ladder: build minutes, bandwidth and function invocations are metered, and the free plan is where the meter starts rather than where it does not exist.

Object storage (S3, R2, Azure Blob, GCS). Not free, but close enough to it for a small site that it belongs on the list. The price is assembly: you are wiring storage to a CDN to a certificate manager yourself, and you own the result at 3am. It is the cheapest option and the most work, and the two facts are the same fact.

One9x Pages. Our free plan: three sites, 1 GB, HTTPS on yoursite.one9x.app, no card, no expiry. The price is that the free plan does not include a custom domain — more on that below, because it is the whole question most people are actually asking.

The custom-domain catch

“Free static hosting” and “free static hosting on my own domain” are different searches, and the second one has a shorter list of answers.

The domain itself is never free — that is a registrar fee, typically a few hundred rupees or ten-odd dollars a year, and no host changes it. What varies is whether the host charges to serve your domain, because every custom domain means issuing and renewing a TLS certificate for it, and that is real ongoing work per domain rather than per account.

  • GitHub Pages and Cloudflare Pages include custom domains with HTTPS on their free tiers. If free-with-your-own-domain is the hard requirement, start here.
  • Netlify and Vercel include custom domains on their free tiers too, within the usage limits of those tiers.
  • One9x Pages does not: custom domains start on our paid plans. We would rather say that plainly on the way in than have you find it after you have moved a site.

Putting a custom domain on a free host

The mechanics are the same everywhere, and getting the order right is what avoids the hour of downtime:

  1. Deploy the site first and check it on the host’s own subdomain. Nothing below matters if the site itself is broken, and this step costs nothing.
  2. Lower your DNS TTL on the records you are about to change — to 300 seconds, a day before you switch. This is the step everyone skips and then waits four hours for.
  3. Add the domain in the host’s dashboard before you change DNS. Most hosts will not start issuing a certificate for a domain they have not been told about.
  4. Point the records. An A/ALIAS record for the apex, a CNAME for www — your host’s docs will name the exact targets. If your DNS is on Cloudflare, set the record to DNS-only rather than proxied, or the certificate challenge cannot reach the host.
  5. Wait for the certificate. Usually seconds to a few minutes. Until it is issued, the domain will show a TLS warning — that is expected, not a mistake.
  6. Raise the TTL back once you are happy.

Which one to pick

  • Your site is a repo and stays public → GitHub Pages, and stop reading.
  • You want a free custom domain and do not mind a platform account → Cloudflare Pages.
  • You want git push to build with no config file at all → Netlify or Vercel free tier, where connecting the repo is the whole setup.
  • You have a built folder and no wish to give it a repo, and you are fine on a platform subdomain for now → our free plan takes a drag-and-drop folder and gives you an HTTPS URL, and it does not expire.

Push-to-deploy is not the dividing line it used to be. Every host on this list can build on a push; what differs is where the build runs and who writes the config. On Netlify and Vercel it is their infrastructure and their UI; on GitHub Pages, Cloudflare Pages and One9x Pages it is a workflow file in your repo, and the build runs in your own CI. Ours is a GitHub Action that stages a preview on every pull request and publishes on merge.

If the reason you are reading this is that a free tier stopped being free — metered bandwidth, build minutes, a usage bill — the thing you want next is a flat price rather than a different meter. That comparison is in what static hosting costs.

One9x Pages hosts the finished folder

Drop a build directory on the dashboard or point the CLI at it, and get an HTTPS URL with atomic deploys, a preview per release and instant rollback. The free plan takes three sites and does not expire.