ShipToCash
Deploy Beginner

Vercel vs Netlify vs Cloudflare Pages: Deployment Checklist

Compare hosting by output type, runtime compatibility, commercial terms, and billing. Includes a migration checklist for static Astro sites.

Peng Zhou Peng Zhou · · Updated November 2, 2026 · 660 words · 3 min read

Choose a host by what your app produces: static files, server-rendered pages, functions, or a mixture. A static Astro site and a Next.js app with server actions do not have the same hosting requirements.

This is a documentation-based comparison and a deployment checklist, not a benchmark of speed or reliability. Plan terms and account allowances can change; check the provider’s current pages before committing a commercial project.

Classify the output first

Run your build locally. A directory of HTML, CSS, JavaScript, and images can use static hosting. An app that needs server rendering, database credentials at request time, or payment webhooks also needs a compatible runtime.

ShipToCash is an example of the first case: its astro.config.mjs has no server adapter, and its build script runs astro build. Its guides generate static routes from a content collection. You can inspect the same signals in your own repository.

RequirementWhat to check before choosing
Static pagesBuild command, output directory, redirects, custom headers
Server-rendered routesSupported framework adapter and runtime APIs
Payment webhooksPublic POST endpoint, secrets, signature verification, storage
Client-side SPA routesFallback routing without masking genuine missing assets
Commercial projectPlan terms as well as technical quotas

Vercel: check framework support and commercial terms

Vercel is a practical option to evaluate for a Next.js application. For a static project, check the detected build command and output directory before the first deployment. The first-deploy guide walks through that workflow.

The Hobby plan documentation limits that plan to personal, non-commercial use. A sales site should assess a suitable commercial plan rather than assuming that low traffic makes the free tier eligible. Plan suitability and technical capacity are separate questions.

If the build runs but fails, start with the build diagnostic table. If a push produces no deployment entry, use the Git trigger checks instead.

Netlify: check the billing model on your account

Use Netlify’s current pricing page and your account dashboard. Do not reuse an old table of monthly build minutes and bandwidth as if it described every current account. Also inspect function usage, requests, and any add-ons the project enables.

For a static app, confirm the publish directory. For an SPA, configure fallback routing deliberately. A build exit code alone does not identify the failure; the Netlify error guide explains how to find the earlier error.

Cloudflare Pages: distinguish assets from Functions

Cloudflare Pages can publish a static build directory and run Pages Functions for request-time logic. Their limits and runtime behavior differ. Use the Pages limits documentation for builds and assets, and check function limits separately when adding backend behavior.

A build-time environment variable does not automatically become a secret available to a function. Before moving payment code, review Pages environment variables and bindings. Also verify that any Node APIs used by an integration work in the target runtime.

Compare a concrete workload

Write down expected production deploys, preview deploys, asset size, requests, function calls, and any database or storage charges. Distinguish included allowances from paid overages and hard limits. Record the plan name and date beside any numbers you use.

Avoid choosing on the phrase “unlimited bandwidth” alone. File-size, build, function, and acceptable-use constraints can still matter. A static documentation site may have negligible runtime cost while a small authenticated application spends most of its budget on functions and storage.

Rehearse a move before changing DNS

Deploy the same commit to the candidate host using a preview URL. Check direct navigation, refreshes, missing routes, images, response headers, environment values, and any server endpoints. Keep private values out of client bundles.

Then connect the custom domain using the records the chosen host supplies. Keep email records intact and keep the old deployment available until the new one is verified. Static files usually move easily; functions, provider-specific APIs, and stored data require a separate migration plan.

Frequently Asked Questions

Is a free Vercel Hobby project suitable for commercial use?

The Hobby documentation limits it to personal, non-commercial use. Check an eligible plan before launching a commercial project.

Can every app move between these hosts unchanged?

No. Static files are portable, but server adapters, runtime APIs, secrets, storage, redirects, and functions may need changes.

Should I compare only bandwidth allowances?

No. Include builds, requests, runtime work, storage, commercial terms, and any add-ons in the comparison.

Peng Zhou

Peng Zhou

Founder of ShipToCash. I build small software products and write about the part nobody teaches you: getting your app deployed, taking payments, and understanding operational requirements. Guides include documentation references and worked examples; see the editorial standards for how they are prepared.

More about me →

Related Articles