Cloudflare Pages vs Workers in 2026: which to use for a site
Quick answer
Cloudflare's Pages overview, last updated August 25, 2026, says “Start new projects with Workers,” and its April 8, 2025 announcement says “Cloudflare Pages will continue to be supported.” No Cloudflare doc read on November 3, 2026 calls Pages deprecated. On both free plans, static requests are “free and unlimited.”
Free plan: no credit card, 1 published page, 10,000 page views a month.
On this page
- What Cloudflare has said about Pages and Workers, and when
- Cloudflare Pages vs Workers, side by side
- One free request pool, and what runs first
- Moving a Pages project to Workers, in Cloudflare's steps
- Which to pick: a static site, an SSR framework, or one HTML page
- If your site is one HTML page: Convika
- Static sites on other free hosts
- Frequently asked questions
- Sources
For a new site, Cloudflare says Workers: its Pages overview, last updated August 25, 2026, opens with “Are you sure you want to use Pages?” and says “Start new projects with Workers.” No Cloudflare doc calls Pages deprecated. Cloudflare's April 8, 2025 announcement says “Cloudflare Pages will continue to be supported, but, going forward, all of our investment, optimizations, and feature work will be dedicated to improving Workers.” Both have a free plan, and on both, requests to static files are “free and unlimited.”
For a static site, 5 differences decide it:
- Git builds. Cloudflare Pages Free counts builds: 500 a month, 1 at a time. Workers Builds counts minutes: 3,000 build minutes a month on Cloudflare's Free plan, 1 build at a time, 20 minutes each.
- Custom domains. A Pages project takes a subdomain such as
www.example.comfrom any DNS provider, with a CNAME record. A Worker takes only a domain whose nameservers Cloudflare runs: “Unlike Pages, Workers does not support any domain whose nameservers are not managed by Cloudflare.” - Preview URLs. Pages makes one for each pull request, with no limit on preview deployments. Workers has had preview URLs since September 2024, and Worker Previews, from September 22, 2026, give each pull request its own environment: 100 Previews per Worker on Cloudflare's Free plan, with Wrangler 4.135.0 or later.
- Server code. Pages Functions and Workers draw on one pool. Cloudflare's Workers Free plan allows 100,000 requests a day, and “Requests to your Pages Functions count towards your quota for the Workers Free plan.” What runs first differs: once you add Functions, Pages sends every request to them by default, while a Worker serves a matching static file without running its code.
- Uploading without Git. Pages takes a zip file or a folder by drag and drop in the dashboard, up to 1,000 files. Workers takes a folder from Wrangler on your computer, as in
wrangler deploy dist.
Cloudflare's docs, blog posts, and changelog were read on November 3, 2026, from 10:04 to 10:16 JST (01:04 to 01:16 UTC). Each one's own date is in the Sources at the end of this page.
This page compares the two products. Each Pages limit, and what happens past it, is on Cloudflare Pages limits. Whether a business may use the free plan is on Is Cloudflare Pages free for commercial use?. Cloudflare's Developer Platform terms, last updated September 28, 2026, cover Workers and Pages under one heading, so that answer is the same for both.
What Cloudflare has said about Pages and Workers, and when
Cloudflare brought Pages' features to Workers over 2 years, then changed its advice for new projects. Each row is a Cloudflare blog post, changelog entry, or doc, with its own date.
| Date | Where | What Cloudflare said or shipped |
|---|---|---|
| September 26, 2024 | Builder Day 2024 post | Workers gets static assets, Git builds, and preview URLs. “If you're wondering “What about Pages?” — rest assured, Pages will remain fully supported.” And: “Looking ahead, we plan to bridge the remaining gaps between Workers and Pages and provide ways to migrate your Pages projects to Workers.” |
| April 8, 2025 | Full-stack Workers post | “Now that Workers supports both serving static assets and server-side rendering, you should start with Workers. Cloudflare Pages will continue to be supported, but, going forward, all of our investment, optimizations, and feature work will be dedicated to improving Workers.” |
| September 9, 2025 | Changelog | “Deploy static sites to Workers without a configuration file”: wrangler deploy dist asks for the rest |
| January 23, 2026 | Changelog | Pages on paid plans goes to 100,000 files a site; “The Free plan remains at 20,000 files per site.” |
| August 11, 2026 | Changelog | “Pages now automatically skips a queued build when a newer build for the same project, branch, and deployment target is also queued.” |
| August 25, 2026 | Pages overview | “Are you sure you want to use Pages? Workers supports most Pages use cases and offers a broader feature set. It is Cloudflare's primary platform for building applications. Start new projects with Workers.” |
| September 22, 2026 | Changelog | “You can now test every change you make in an isolated, production-like environment with Worker Previews.” |
| October 12, 2026 | Migration guide | “Migrating from Cloudflare Pages to Cloudflare Workers is often a straightforward process.” |
| October 28, 2026 | Changelog | “Workers Static Assets can now serve assets from a URL path prefix,” with assets.base_path and Wrangler 4.148.0 or later |
Is Pages deprecated? No Cloudflare doc calls it deprecated. Cloudflare's blog says Pages “will remain fully supported” (September 26, 2024) and “will continue to be supported” (April 8, 2025). Cloudflare publishes its full docs for AI tools as llms-full.txt. In the Pages and Workers files, searched on November 3, 2026, “deprecated” is said only of other things: “Workers Sites is deprecated,” the wrangler pages publish command, and Pages' v1 and v2 build images, which move to v3. No line names an end date for Pages. Cloudflare still ships Pages changes: its 2026 changelog has Pages entries on January 23, August 11, and October 23.
Cloudflare Pages vs Workers, side by side
Each cell links the Cloudflare doc it comes from. Where the free and paid plans differ, the cell says which.
| Cloudflare Pages | Cloudflare Workers | |
|---|---|---|
| Cloudflare's advice for a new project | “Are you sure you want to use Pages?” (overview) | “Start new projects with Workers” (overview) |
| Requests to static files | “free and unlimited” on free and paid plans (Functions pricing) | “free and unlimited” (static assets billing) |
| Files, free plan | 20,000 a site, 25 MiB each (limits) | 20,000 per Worker version, 25 MiB each (limits) |
| Files, paid plans | 100,000, once you set PAGES_WRANGLER_MAJOR_VERSION=4 (limits) | 100,000, with Wrangler 4.34.0 or higher (limits) |
| Git builds, free plan | 500 builds a month, 1 at a time, 20 minutes each (limits) | 3,000 build minutes a month, 1 at a time, 20 minutes each (Workers Builds) |
| Git providers | GitHub or GitLab (Git integration) | “Artifacts, GitHub, or GitLab” (Workers Builds) |
| Deploying without Git | Drag and drop “A zip file or single folder of assets,” up to 1,000 files, or Wrangler (Direct Upload) | Wrangler with a folder, wrangler deploy dist (changelog) |
| Preview URLs | One for each pull request and branch, unlimited; “By default, these deployment URLs are public” (previews) | 100 Previews per Worker on the free plan, 500 on Paid; “Preview URLs are public by default” (Previews) |
| Free address | A pages.dev subdomain, such as user-example.pages.dev (previews) | <worker>.<subdomain>.workers.dev, “intended for personal or hobby projects that aren't business-critical” (workers.dev) |
| Custom domain | A subdomain at any DNS provider, with a CNAME record; a bare domain needs Cloudflare's nameservers (custom domains) | Needs “An active Cloudflare zone” (custom domains) |
| Server code | Pages Functions, from a functions/ folder or a _worker.js file (migration guide) | The Worker's script, its main file (migration guide) |
| What runs first | “once you add Functions on a Pages project, all requests by default will invoke your Function,” unless _routes.json excludes a path (routing) | A matching file “will be served — without invoking Worker code,” unless you set run_worker_first (static assets) |
| Server requests, free plan | 100,000 a day, shared with Workers (Functions pricing) | 100,000 a day, reset at midnight UTC (limits) |
| Past the day's requests | “Fail open” serves the static files; “Fail closed” returns an error page (routing) | Fail open “Bypasses the Worker”; fail closed “Returns a Cloudflare 1027 error page” (limits) |
| Paid plan | “All Pages Functions are billed as Workers” (pricing) | Workers Paid: a “minimum charge of $5 USD per month for an account,” 10 million requests a month included, then $0.30 per million (pricing) |
Cloudflare's compatibility matrix lists what one side has and the other doesn't. Only Pages connects “Custom domains outside Cloudflare zones.” Only Workers has the Cloudflare Vite plugin, Gradual Deployments, Workers Logs, Logpush, Cron Triggers, Queue consumers, Rate Limiting, serving assets on a path, and non-root routes. For Pages' Early Hints, branch deploy controls, file-based routing, and Pages Plugins, Workers has a workaround, not support.
One free request pool, and what runs first
Server code on both draws on the same daily count. Cloudflare's Pages Functions pricing doc: “Requests to your Pages Functions count towards your quota for the Workers Free plan. For example, you could use 50,000 Functions requests and 50,000 Workers requests to use your full 100,000 daily request usage. The free plan daily request limit resets at midnight UTC.”
Static files stay out of that count on both. What differs is which runs first:
- Pages runs your Functions first. The routing doc: “On a purely static project, Pages offers unlimited free requests. However, once you add Functions on a Pages project, all requests by default will invoke your Function.” A
_routes.jsonfile keeps static paths out. - A Worker serves the file first. The static assets doc: “By default, if a requested URL matches a file in the static assets directory, that file will be served — without invoking Worker code.” Paths you send to the script first with
run_worker_firstcount as requests. On Cloudflare's Free plan, once the day's requests run out, those paths “will receive a 429 (Too Many Requests) response instead of falling back to static asset serving.” - Workers Caching counts cache hits. Cloudflare's Workers pricing doc: “When Workers Caching is enabled, requests served from the Worker's cache are billed at the same per-request rate as requests that invoke the Worker. This includes requests to static assets.”
Moving doesn't change the bill much, in Cloudflare's words: “Like Pages, requests for static assets on Workers are free, and Pages Functions invocations are charged at the same rate as Workers, so you can expect a similar cost structure.” Cloudflare's Workers Paid plan covers Workers and Pages Functions for a “minimum charge of $5 USD per month for an account,” with no daily cap.
Moving a Pages project to Workers, in Cloudflare's steps
Cloudflare's migration guide, last updated October 12, 2026, lists these steps in this order:
- Framework. “Switch out any Pages-specific adapters for the Workers equivalent.”
- Configuration. Create a Wrangler configuration file (
wrangler.jsonc,wrangler.json, orwrangler.toml) withnameandcompatibility_date, and set your build output folder asassets.directory. - 404s and single-page apps. Pages guessed from your
index.htmland404.htmlfiles. A Worker needsnot_found_handlingset tosingle-page-applicationor404-page. - Files to leave out. Pages skipped
node_modules,.DS_Store, and.giton its own. On Workers, list them in an.assetsignorefile. - Pages Functions. Compile a
functions/folder into one Worker script withwrangler pages functions build. Move an advanced-mode_worker.jsfile out of the static folder. If you used_routes.jsonor middleware, setassets.run_worker_first, since a Worker serves static files first. - Bindings and variables. Set up the
ASSETSbinding yourself. “Unlike Pages, Workers does not share the same set of runtime and build-time variables,” so set the build ones in Workers Builds. - Commands.
wrangler pages devbecomeswrangler dev, on port 8787 instead of 8788, andwrangler pages deploybecomeswrangler deploy. - Builds. Connect the repository to Workers Builds, then turn off automatic deployments on the Pages project.
- Previews. Add a
previewsblock, turn onworkers.devPreview URLs, and turn on preview builds in Workers Builds. - Headers and redirects. Your
_headersand_redirectsfiles keep working from the static folder. - Address. The
pages.devsubdomain gives way to aworkers.devsubdomain, which you set up in the dashboard. - Custom domains. A domain whose nameservers Cloudflare manages becomes the Worker's custom domain or route. One on another DNS provider can't move to a Worker.
- Rollout. Once all production traffic is on the Worker, delete the Pages project in the dashboard or with Wrangler.
For a coding assistant such as Claude Code or Cursor, the guide links an “experimental prompt” that makes a project compatible with Workers.
Which to pick: a static site, an SSR framework, or one HTML page
- A new static site: Workers, as Cloudflare advises. Deploy the folder with
wrangler deploy dist, or connect the repository to Workers Builds. If its domain's DNS stays at another provider, pick Pages, the only side that takes “Custom domains outside Cloudflare zones.” - A static site already on Pages: It can stay, since Cloudflare says Pages “will continue to be supported.” Move when you need something only Workers has, such as Cron Triggers or Workers Logs.
- An SSR framework: Workers, with the adapter Cloudflare names. For Next.js, “Cloudflare recommends vinext as the default way to run Next.js applications on Cloudflare Workers,” and “vinext is in beta”; the OpenNext adapter is for an app that can't move to vinext yet (Next.js guide). Astro uses
@astrojs/cloudflare(Astro guide), and SvelteKit@sveltejs/adapter-cloudflare(SvelteKit guide). Cloudflare still lists “Static Next.js on Pages” for when “you specifically want to deploy it to Cloudflare Pages,” and “If you want to use Astro as a static site generator, you do not need the Astro Cloudflare adapter.” - One HTML page with a form: Either Cloudflare product hosts the file, but neither has a form that stores entries without code you add, as forms on Cloudflare Pages explains. The next section covers that case.
If your site is one HTML page: Convika
Convika hosts landing pages, one HTML page each, with a form that keeps entries and stats on who visited. There are no builds, Workers, or request pools to set up: you upload the page's HTML file, up to 2 MB, or paste its code, and Convika counts page views. Claude, Claude Code, or Codex can also save the page through Convika's MCP server. Free allows up to 30 publishes a day.
Section 7 of Convika's terms allows commercial use on every plan, Free included: a page that sells or advertises a product or service, a startup or waitlist page, or a client's page you build, host, and bill the client for. It bars reselling Convika itself without permission.
Free includes 1 published page, 10,000 page views a month, 50 form entries shown a month with CSV export and an email for each, 90 days of visit stats, and 1 custom subdomain such as www.yourbrand.com, with a small Convika bar. At 10,000 page views in a month, editing and analytics pause, and 7 days later the pages stop until the month ends or you upgrade. Pro monthly costs $12 a month and includes 100,000 page views; it doesn't stop for traffic unless you set a monthly overage limit, and each 10,000 views past the included ones cost $1.30. Pricing lists each plan.
Not a fit for: a site built from a folder of files, a build step, or server code. Convika hosts a single HTML document per page. To see your page on Convika first, the free HTML publishing tool gives you a preview link with no account.
Static sites on other free hosts
| Host and free plan | Requests to static files | Server code | Custom domain |
|---|---|---|---|
| Cloudflare Pages Free | “free and unlimited” (pricing) | Pages Functions, 100,000 requests a day shared with Workers (Functions pricing) | A subdomain at any DNS provider, with a CNAME record (custom domains) |
| Cloudflare Workers Free | “free and unlimited” (billing) | The Worker, 100,000 requests a day (limits) | Only on a domain whose nameservers Cloudflare runs (custom domains) |
| Netlify Free | 2 credits per 10,000 web requests and 20 per GB of bandwidth, from 300 credits a month; past them, projects pause (credits) | “Functions & AI models,” at 10 credits per GB-hour of compute (pricing) | “Add Custom domains with SSL” (pricing) |
| Vercel Hobby | The first 1,000,000 CDN requests and 100 GB of data transfer a month (Hobby) | The first 1,000,000 function invocations a month (Hobby) | 50 a project; Hobby is for “non-commercial, personal use only” (Hobby) |
| GitHub Pages | Static only: it “takes HTML, CSS, and JavaScript files straight from a repository” (GitHub Docs) | None: “a static site hosting service” (GitHub Docs) | “your own custom domain” (GitHub Docs) |
| Convika Free | 10,000 page views a month, all pages together | None: one HTML file a page, with a form you add and visit stats | 1 custom subdomain, such as www.yourbrand.com |
Frequently asked questions
Should I use Cloudflare Pages or Workers?
Workers, for a new project. Cloudflare's Pages overview, last updated August 25, 2026, says “Start new projects with Workers.” Pages still fits a site whose domain's nameservers aren't at Cloudflare, since “Unlike Pages, Workers does not support any domain whose nameservers are not managed by Cloudflare.”
Is Cloudflare Pages being deprecated?
No Cloudflare doc read on November 3, 2026 calls Pages deprecated or gives it an end date. Cloudflare's April 8, 2025 post says “Cloudflare Pages will continue to be supported, but, going forward, all of our investment, optimizations, and feature work will be dedicated to improving Workers.”
What is the difference between Pages Functions and Workers?
Pages Functions are Workers inside a Pages project: Cloudflare says “All Pages Functions are billed as Workers,” and their requests count toward the same 100,000 a day on Cloudflare's free plan. The setup differs. Functions are files in a functions/ folder, routed by file name, and once you add them, every request runs them unless _routes.json excludes it. A Worker is one script with its own Wrangler configuration, and it serves matching static files first.
Is Cloudflare Workers more expensive than Pages?
Not for the same setup. Cloudflare's migration guide says “Like Pages, requests for static assets on Workers are free, and Pages Functions invocations are charged at the same rate as Workers, so you can expect a similar cost structure.” 2 switches on Workers change that: with Workers Caching on, requests served from the cache, static files included, “are billed at the same per-request rate as requests that invoke the Worker,” and paths you send to the script first with run_worker_first count as requests. Cloudflare's Workers Paid plan, a “minimum charge of $5 USD per month for an account,” covers Workers and Pages Functions alike.
Do static assets count toward the Workers request limit?
Not by default. Cloudflare's static assets billing doc says “Requests to static assets are free and unlimited.” Paths you send to the script first with run_worker_first do count, and on Cloudflare's free plan they get a 429 response once the day's requests run out. With Workers Caching on, cache hits, static files included, are billed like requests that run the Worker.
Can I use a custom domain on Workers without Cloudflare DNS?
No. A Workers custom domain needs “An active Cloudflare zone,” per Cloudflare's custom domains doc, last updated September 29, 2026. Pages can: for a subdomain such as www.example.com, “it is not necessary for your site to be a Cloudflare zone.” Add the domain in the project's Custom domains tab first, then a CNAME record at your DNS provider that points it to Pages. A CNAME record added before the domain is set up in Pages fails with “a 522 error,” Cloudflare's Pages custom domains doc warns.
Do Workers have preview URLs like Pages?
Yes. Cloudflare brought preview URLs to Workers in September 2024, and its Worker Previews of September 22, 2026 give every pull request “its own URL, configuration, observability.” Each Preview gets a URL like <preview-name>-<worker-name>.<subdomain>.workers.dev, and Cloudflare allows 100 Previews per Worker on its free plan and 500 on Paid, with Wrangler 4.135.0 or later. On both Pages and Workers, preview URLs are public by default; Cloudflare Access can require a sign-in.
How do I migrate from Cloudflare Pages to Workers?
Follow Cloudflare's migration guide: swap Pages adapters for the Workers ones, add a Wrangler configuration file with assets.directory, set not_found_handling, and compile any functions/ folder with wrangler pages functions build. Then connect the repository to Workers Builds, turn off the Pages project's automatic deployments, move the domain, and delete the Pages project. The guide also links an experimental prompt for coding assistants.
Should I deploy Next.js, Astro, or SvelteKit on Pages or Workers?
Workers, with the adapters Cloudflare names: vinext for Next.js, which Cloudflare recommends by default and calls beta, or the OpenNext adapter; @astrojs/cloudflare for Astro; and @sveltejs/adapter-cloudflare for SvelteKit. Cloudflare keeps “Static Next.js on Pages” for a static export, and a static Astro site needs no adapter.
Is Cloudflare Workers free for a static site?
Yes. On Cloudflare's Workers Free plan, “Requests to static assets are free and unlimited,” with up to 20,000 files per Worker version, 25 MiB each. For production, Cloudflare recommends a custom domain over the free workers.dev address, which it says “is intended for personal or hobby projects that aren't business-critical.”
Sources
Each source was read on November 3, 2026 (JST). Dates in parentheses are the document's own.
- Cloudflare Pages overview (last updated August 25, 2026)
- Your frontend, backend, and database — now in one Cloudflare Worker (Cloudflare blog) (published April 8, 2025)
- Builder Day 2024: 18 big updates to the Workers platform (Cloudflare blog) (published September 26, 2024)
- Migrate from Pages to Workers (last updated October 12, 2026)
- Cloudflare changelog: posts of September 9, 2025, January 23, 2026, August 11, 2026, September 22, 2026, October 23, 2026, and October 28, 2026 (read November 3, 2026)
- Cloudflare Pages full documentation, llms-full.txt and Workers full documentation, llms-full.txt (searched November 3, 2026)
- Cloudflare Pages limits (last updated September 5, 2026)
- Cloudflare Pages Functions pricing (last updated September 8, 2026)
- Cloudflare Pages Functions routing (last updated September 18, 2026)
- Cloudflare Pages preview deployments (last updated October 12, 2026)
- Cloudflare Pages custom domains (last updated April 21, 2026)
- Cloudflare Pages Direct Upload (last updated April 21, 2026)
- Cloudflare Pages Git integration (last updated October 15, 2026)
- Cloudflare Workers static assets (last updated October 12, 2026)
- Cloudflare Workers static assets billing and limitations (last updated April 23, 2026)
- Cloudflare Workers pricing (last updated October 2, 2026)
- Cloudflare Workers limits (last updated October 29, 2026)
- Cloudflare Workers Builds and Workers Builds limits and pricing (both last updated October 28, 2026)
- Cloudflare Worker Previews (last updated September 24, 2026)
- Cloudflare Workers custom domains (last updated September 29, 2026)
- Cloudflare workers.dev (last updated September 22, 2026)
- Next.js on Cloudflare Workers (last updated August 25, 2026), Astro (October 12, 2026), and SvelteKit (October 10, 2026)
- Cloudflare Service-Specific Terms, Developer Platform (last updated September 28, 2026)
- How credits work (Netlify Docs) (last updated August 12, 2026) and Netlify pricing (no date on the page)
- Vercel Hobby plan (last updated September 14, 2026)
- What is GitHub Pages? (GitHub Docs) (no date on the page)
Next step
How to share an HTML file as a link that opens on any phone
Email and Google Drive open HTML on a phone without scripts. Compare 5 hosts (Netlify Drop, Tiiny Host, Pagelive, GitHub Pages, Convika) and follow 4 steps.
Related articles
- Cloudflare Pages limits on the free plan (2026)Cloudflare Pages Free allows 500 builds a month, 20,000 files of up to 25 MiB, and 100,000 Functions requests a day. What happens past each limit.
- Is Cloudflare Pages free for commercial use?Yes: Cloudflare's agreement sets no personal-use limit on Pages, but bans card data on free services. See 11 cases, the free limits, and 4 other hosts' rules.
- Does Cloudflare Pages have forms? 4 ways to get submissionsNo: write a Pages Function, use the Static Forms plugin, add Formspree, or host the page on Convika.
- Vercel Hobby plan limits: bandwidth, deployments, and what happens when you pass themVercel Hobby includes 100 GB of data transfer and 100 deployments a day. Past a limit, you wait 30 days in most cases. Every limit, quoted from Vercel's docs.
- Is Netlify free? What the Free plan's 300 credits cover in 2026Netlify's $0 plan gives 300 credits a month (15 per deploy, 20 per GB) and allows commercial projects. See how long 300 credits last for 1 HTML page.
- What happens to a free website when it gets too much traffic? Limits comparedTraffic limits of 8 free hosts, GitHub Pages, Netlify, and Vercel included: whether a viral page stops, slows, or gets billed, and how to keep it up.