The Cheapest Way to Host a Static Site on Azure (Blob vs Static Web Apps vs App Service, With Real Numbers)
Three services can serve the same folder of HTML. Only one of them is actually free once you want a real domain and a padlock — and the sticker price is not where the difference lives.
New to cloud? CAMPUX is a free, build-first course. Start here →
For nearly every small static site the cheapest correct answer on Azure is Static Web Apps on the Free plan: it costs nothing and still gives you HTTPS on a custom domain, built-in CI/CD, and roughly 100 GB of bandwidth a month, as of 2026. Blob static website is cheap on paper but adds a Front Door bill the moment you need HTTPS on your own domain; App Service is capable but almost never the low-cost pick for purely static content. Treat the specific numbers below with suspicion and the direction as settled — Azure reprices, but the ranking rarely moves.
The three real options
You have a folder of built files — HTML, CSS, JavaScript, maybe some images — and you want it on the public internet under your domain. Azure gives you three honest ways to do that, and a fourth (a VM running nginx) that you should not consider for this.
- Blob Storage static website — a storage account has a hidden switch called
$web. Flip it, upload your files, and the account serves them over HTTP. The feature itself is free; you pay for stored bytes and for bytes served out. - Azure Static Web Apps (Free plan) — a purpose-built static host wired to GitHub or Azure DevOps. It builds your repo, serves it from a global edge, and hands you free HTTPS on a custom domain, at zero cost within its quotas.
- App Service (Free or Basic) — the managed web-app platform. It will serve static files happily, but you are renting an application runtime you do not need, and the Free tier will not put your own domain on it.
The one-sentence answer is at the top of this page. The rest of it is about the traps — because "cheapest" is decided by the line items nobody quotes you.
$web container serves them for pennies plus egress — accepting that custom-domain HTTPS then needs Front Door in front.What "free" actually costs
Nothing that serves bytes is truly free; the question is who eats the small costs and where they hide. Three line items decide it.
Egress. Every byte a visitor downloads is outbound data transfer. Azure gives every subscription the first 100 GB of egress each month for free, account-wide, then charges roughly $0.08–0.09 per GB in the US and Europe zones after that, as of 2026. For a static site this is usually the only variable cost that matters, and for most small sites it lands inside the free 100 GB — so it rounds to zero. It stops rounding to zero the day a page gets shared widely.
Storage. On Blob you also pay to keep the files sitting there. A few hundred megabytes on the Hot tier costs a couple of cents a month — genuinely rounding error. If you are curious why the tier matters at all, that is the subject of Blob access tiers, and which flavor of account you even get the $web feature on is covered in storage account types.
The CDN / Front Door line item. This is the one that ambushes people. The Blob static website endpoint serves your custom domain over HTTP only. To get HTTPS on that domain — which you must have, no exceptions in 2026 — you put Azure Front Door or a CDN profile in front of the storage account. That component terminates TLS, and it carries its own monthly base cost plus per-request and per-GB charges. It is small, but it turns a "free" Blob site into a paid one, and it is the hinge the whole comparison turns on.
| Blob static website | Static Web Apps (Free) | App Service (Free / Basic) | |
|---|---|---|---|
| Base cost | Feature free; pay storage + egress (cents/mo for a small site) | $0 within quotas | F1 free tier $0; Basic B1 ≈ $13/mo |
| Custom domain | Yes | Yes (2 per app) | No on F1 Free; needs Shared/Basic+ |
| Free HTTPS on custom domain | No — needs Front Door/CDN in front | Yes, managed cert included | Not on Free; managed cert on Basic+ |
| CI/CD | Roll your own (CLI, Action, pipeline) | Built in, GitHub/DevOps | Built in, GitHub/DevOps |
| API / auth | None (static only) | Managed Functions API + built-in auth | Full app runtime; any API/auth |
| Bandwidth included | First 100 GB/mo egress free (subscription-wide), then ≈ $0.08–0.09/GB | ≈ 100 GB/mo, hard cap (site stops, no overage bill) | Egress billed as normal data transfer |
| Scaling | Storage scales itself; add CDN for reach | Global edge, automatic; no SLA on Free | Scale up/out the plan (paid tiers) |
Cost walkthrough: a small marketing site
Picture the common case — a five-page marketing site, a logo, a couple of hero images, moving maybe 5 GB of traffic a month. Under any real load, walk the three paths.
On Static Web Apps Free, the total is $0.00. Hosting free, HTTPS free, CI/CD free, and 5 GB sits comfortably under the ~100 GB bandwidth allowance. You push to main, the site rebuilds, done. There is no meter running.
On Blob static website, storage for a few hundred megabytes is a couple of cents, and 5 GB of egress is inside the subscription-wide free 100 GB, so serving is effectively free too. But a marketing site needs HTTPS on its real domain, so you attach Front Door. Now you are paying that component's monthly base plus a trickle of request and data charges — call it a few dollars a month, dominated by the base fee, not the traffic. You spent money to reach the same place Static Web Apps gave you for nothing.
On App Service, the Free tier cannot host your custom domain, so you are on Basic B1 at roughly $13 a month to serve five static pages. It works. It is the most expensive way to do the least demanding job on this list.
Cheapest is not the smallest sticker price; it is the fewest paid components standing between your files and a padlock on your own domain.
Cost walkthrough: a growing SPA with an API
Now the site grows a spine. It is a single-page app that needs to call a back end — a contact form that writes somewhere, a search endpoint, a bit of auth. The static-only calculus breaks, and the ranking shifts.
Static Web Apps still leads, and it is not close. The Free plan bundles a managed Functions API and built-in authentication, so your front end and its API live in one deployment with one pipeline — still at $0 if you stay inside quotas. This is the scenario the product was built for, and it is why it beats a bare Blob container the moment "static" stops being strictly true.
Blob falls out of contention here. It serves files and nothing else, so you would bolt on Front Door for HTTPS and a separate Functions app or App Service for the API — two or three billed components doing what Static Web Apps does in one. The "cheap storage" saving is now noise against the pieces you had to add.
App Service becomes defensible for the first time. If the API is substantial — long-running work, a real server framework, background jobs, VNet access — a Basic or Standard plan hosting both the app and its API is a clean, honest design, and the roughly $13-and-up monthly cost buys you a proper runtime. It is no longer the wasteful choice; it is a legitimate one. Where that line sits is exactly the App Service question — what App Service actually is is worth reading before you commit.
The honest gap: where cheapest bites you later
Every low-cost path has a place where the savings turn into a 6 p.m. problem. Two of them are worth knowing before you sign up for them.
Custom-domain HTTPS on Blob. Teams pick Blob because it looks free, ship on the HTTP endpoint, then discover on launch day that www.theirsite.com throws a certificate warning in every browser. The fix is Front Door — which means new infrastructure, a new bill, and a DNS change under deadline pressure. The cheap option was never actually cheap for a real domain; the cost was just deferred to the least convenient moment. If you go Blob, attach Front Door on day one, not launch day.
Static Web Apps bandwidth caps. The Free plan does not bill you for overage — it stops serving. Cross the roughly 100 GB monthly bandwidth quota and the site returns errors until the calendar rolls over. For a hobby site that is a fine trade. For anything with a launch, a viral moment, or revenue attached, a hard cap with no SLA is a real exposure, and the answer is to move to the Standard plan (paid, higher limits, an SLA) before the traffic arrives, not during it. Free forever is true right up until the day you needed it not to be.
Neither of these is a reason to avoid the cheap path. They are reasons to know which failure you are buying, so it is a decision and not a surprise. When you want to push the bill down across a whole subscription rather than one site, the broader moves live in cutting Azure costs.
Decision framework: which to pick by scenario
Strip it to the choice you are actually making.
- Personal site, portfolio, docs, or a small marketing page — Static Web Apps Free. It is the cheapest and the least work, and it gives you HTTPS on your domain for nothing. Start here and only leave when a quota forces you.
- A SPA that needs an API or sign-in — still Static Web Apps, using its managed API and built-in auth. One deployment, one pipeline, one bill of zero until you outgrow the Free plan.
- You are already deep in a storage account and do not need a custom domain — Blob
$webis a tidy fit; you are adding a website to infrastructure you already run. The instant a real domain with HTTPS enters, price in Front Door and reconsider. - A launch, an SLA requirement, or predictable heavy traffic — Static Web Apps Standard, or App Service if the back end is substantial. You are no longer optimizing for free; you are paying for a guarantee, and that is the right trade.
- The API is a real server app, not a few functions — App Service, hosting the site and API together. This is the one scenario where App Service is genuinely the sensible pick for something that includes static content.
Say this out loud in an interview and you sound like someone who has paid an Azure bill, not someone reciting a feature matrix: default to Static Web Apps Free, reach for App Service when the back end earns it, and treat Blob as the option that is only cheap until you need a padlock on your own domain.
For a static site under a real domain, the deciding cost is not storage and it is not egress — both round to nearly nothing for small sites. It is whether you had to add a component to get HTTPS. Static Web Apps includes it; Blob makes you buy it. That single line decides the whole comparison.
Questions people also ask
Is Azure Static Web Apps really free?
The Free plan costs nothing and includes hosting, a managed SSL certificate, two custom domains, and about 100 GB of bandwidth per month, as of 2026. The catches: about 0.5 GB app size, no SLA, and there is no paid overage — if you exceed the bandwidth quota the site stops serving until the next month rather than billing you. For a hobby site or a marketing page it is genuinely free; for anything with an SLA or heavy traffic you move to the Standard plan.
Is it cheaper to host a static site on Blob Storage or Static Web Apps?
For most small sites Static Web Apps Free is cheaper, because it bundles hosting, CDN, and free HTTPS on a custom domain at zero cost. Blob static website charges you for storage plus egress, and the moment you want HTTPS on a custom domain you must add Front Door or a CDN, which carries its own monthly cost. Blob wins mainly when you are already inside a storage account, do not need a custom domain, or need more control than the Free plan allows.
Does Azure Blob Storage static website support HTTPS on a custom domain?
Not on its own. The Blob static website endpoint serves your own custom domain over HTTP only; to get HTTPS on that domain you must put Azure Front Door or a CDN profile in front of it, which terminates TLS and adds a monthly line item. This is the single biggest reason the Blob route stops being the cheapest option once a real domain and a padlock are involved.
How much does Azure App Service cost for a static site?
The Free (F1) tier runs a static site at no cost but has no custom domain support and shared, throttled compute. To put your own domain on it with HTTPS you move to a paid tier — Basic B1 is roughly 13 US dollars a month as of 2026. App Service is capable hosting, but for a purely static site you are paying for an application runtime you are not using, so it is almost never the cheapest choice.
Can I host a website on Azure for free forever?
Yes, within limits. Azure Static Web Apps Free plan hosts a static site indefinitely at no cost, including HTTPS on a custom domain and roughly 100 GB of bandwidth a month, as of 2026. There is no SLA and hard quotas apply, so it is a real free-forever option for personal and small marketing sites, but not something you lean on for a revenue-critical app without moving to a paid plan.