Vercel vs Hetzner VPS (self-host) Comparison

A managed platform that automates everything after git push

VS
Hetzner VPS (self-host)

A fixed monthly-fee server: full control, full responsibility

9 min readDevOps

Quick Verdict

There's no outright winner — these are two different responsibility models. If your traffic is spiky and you lack DevOps capacity, Vercel's automatic scaling earns its price. If you have predictable medium traffic plus an existing systemd/nginx/Cloudflare discipline, Hetzner + Cloudflare fixes the bill and gives you an edge on data residency. The tipping point: bandwidth and ISR-write volume — measure for a month, then decide.

VercelHetzner VPS (self-host)
Read the full verdict

Score Comparison

Loading chart...

Detailed Scoring

Detailed Scoring: Vercel and Hetzner VPS (self-host) — category-by-category scores out of 10
CategoryVercelHetzner VPS (self-host)
Performance
8/10
7/10
Ease of Learning
9/10
5/10
Ecosystem
9/10
7/10
Community
8/10
7/10
Job Market
7/10
7/10
Future-Proof
8/10
8/10

Pros & Cons

Vercel

Pros

  • Build, TLS, CDN distribution, and rollback are fully automatic
  • Automatic scaling — no capacity planning required
  • Preview deployments come ready for every PR/branch
  • ISR/Image Optimization/Proxy work with zero configuration
  • Regional Active-CPU billing via Fluid Compute
  • Instant Rollback included as a feature
  • Day-0 compatibility since Vercel is Next.js's own creator

Cons

  • As traffic grows, billing line items (bandwidth, edge requests, ISR writes) can compound
  • Bot Protection and AI-bot managed rulesets exist but are OFF by default — if you don't enable them, bot traffic is billed at the normal rate
  • Seven separate billing axes run simultaneously; the Spend Management cap checks spend every few minutes, so the pause isn't instant
  • Function/ISR region selection is limited per plan (Hobby: one region, Pro: 5 regions)
  • Regional price differences (Fast Data Transfer, Sandbox) are transparent but complex
  • There are Vercel-specific architectural cost items like Global Config Reads/Writes

Best For

Projects with spiky/unpredictable trafficSmall teams/solo developers without DevOps capacityTeam workflows that need frequent preview deploymentsApplications that need global multi-region edge distributionFast MVP and prototype launches

Hetzner VPS (self-host)

Pros

  • Fixed monthly fee — you pay for the rental, not for usage, so budgeting is predictable
  • Marginal cost doesn't rise as traffic/ISR-write volume grows
  • Germany/Finland data centers are GDPR-native and ISO/IEC 27001 certified
  • Stateful firewall is free and included in the VPS price
  • Free one-click apps like Docker, WordPress, Nextcloud, GitLab
  • Full automation via REST API + hcloud CLI + official Go/Python libraries
  • Next.js standalone/Docker deployment supports all features (per the official docs)

Cons

  • TLS, reverse proxy, security patching, and process management are entirely your responsibility
  • No automatic scaling — capacity increases are manual (vertical or horizontal)
  • ISR cache defaults to a single-instance local disk (multi-instance setups need a shared cache handler)
  • There were two price increases in 2026 — dedicated vCPU (CCX/CPX) lines saw increases of 113-175% in some configurations
  • Without sharp installed, Image Optimization can run slow and memory-heavy
  • Backups, restore rehearsals, and monitoring are a separate responsibility you have to set up yourself

Best For

Predictable, medium-to-high-traffic, budget-sensitive projectsTeams that already have systemd/nginx/Cloudflare disciplineApplications that need full data-residency control under KVKK/GDPRPortfolio/blog/mid-size SaaS projects that a single-instance setup is enough forBudgets that prioritize long-term cost predictability

Code Comparison

Vercel
# Vercel — zero-config Next.js deploy + environment variable + Edge Config example

# 1) vercel.json at the project root for function region and cron settings
{
  "regions": ["fra1"],
  "crons": [
    { "path": "/api/cron/revalidate", "schedule": "0 */6 * * *" }
  ]
}

# 2) Deploy via CLI (build+TLS+CDN automatic)
npx vercel --prod

# 3) To reduce the cost of ISR write units (1 unit = 8 KB, no included quota),
# adjust the revalidate interval based on traffic
export const revalidate = 3600; // regenerate once an hour

# 4) To reduce Fast Origin Transfer, force the function
# output into a static cache
export async function GET() {
  return Response.json(
    { data: "ok" },
    { headers: { "Cache-Control": "public, s-maxage=600" } }
  );
}
Hetzner VPS (self-host)
# Hetzner VPS — Next.js standalone self-host + systemd + nginx

# 1) next.config.js — standalone output mode (per the official self-hosting guide)
module.exports = {
  output: "standalone",
};

# 2) Build + copy into standalone
npm run build
cp -r .next/static .next/standalone/.next/static
cp -r public .next/standalone/public

# 3) systemd unit — process management (portfolio-ssr.service example)
[Unit]
Description=Next.js standalone server
After=network.target

[Service]
Type=simple
User=portfolio
WorkingDirectory=/var/www/app/.next/standalone
ExecStart=/usr/bin/node server.js
Restart=on-failure
Environment=PORT=4000
NoNewPrivileges=true
ProtectHome=true

[Install]
WantedBy=multi-user.target

# 4) nginx reverse proxy (Next.js's official recommendation)
server {
  listen 443 ssl;
  server_name example.com;
  location / {
    proxy_pass http://127.0.0.1:4000;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

# 5) Install sharp — required for Image Optimization
npm install sharp

Conclusion

There's no outright winner — these are two different responsibility models. If your traffic is spiky and you lack DevOps capacity, Vercel's automatic scaling earns its price. If you have predictable medium traffic plus an existing systemd/nginx/Cloudflare discipline, Hetzner + Cloudflare fixes the bill and gives you an edge on data residency. The tipping point: bandwidth and ISR-write volume — measure for a month, then decide.

Get Free Consultation
FAQ

Frequently Asked Questions

The exact ratio depends on your traffic and ISR-write volume, but the structural difference is clear: Vercel Pro charges a $20/month base plus usage-based extras (Fast Data Transfer from $0.15/GB, Edge Requests $2/1M, ISR Write $4/1M write units), while a Hetzner VPS charges a fixed monthly rent with no extra charges as long as you stay within the included traffic quota. If your bandwidth/ISR-write volume is low, the gap can be negligible; as it rises, Vercel's bill compounds while Hetzner's stays fixed. Factor in the 2026 Hetzner price increases too (especially on the CCX/CPX lines) and run the numbers for both sides against your own traffic.

Introduction

The moment you're about to ship a Next.js project, two philosophies stand in front of you: Vercel's "manage it automatically, pay for what you use" model versus Hetzner VPS's "rent a fixed server, manage everything yourself" model. In September 2026, this comparison can be made cleanly for the first time: Vercel Pro now comes with transparent unit pricing ($20/month + $20 credit, then bandwidth/edge/ISR line items on top). In the same period, Hetzner also went through two price increases — on the dedicated vCPU lines (CCX/CPX) the increase exceeded 100%. "Self-hosting is always cheaper" is no longer a blind slogan — it's now a calculation that depends on which line you pick. This article isn't trying to convince you — it's giving you the numbers to do the math yourself: we compare nine criteria, from base cost to unit pricing, from how much of ISR/Image Optimization runs out of the box on self-host (most of it does) to KVKK/data residency. The tipping point: bandwidth and ISR-write volume — don't decide without measuring these.

Comparison Matrix

Comparison Matrix: Vercel / Hetzner VPS (self-host)
FeatureVercelHetzner VPS (self-host)
Base pricing model$20/month + $20 usage creditFixed monthly VPS rental
Fast Data Transfer / bandwidthFirst 1TB included, then $0.15+/GBIncluded quota with the VPS, extra charge on overage (Winner)
Edge Request unit price10M/month included, then $2.00-$3.20 per 1M (fra1: $2.60)No such concept (your own nginx/CDN)
ISR Write unit priceNo included quota: $4.00-$6.40 / 1M write units (1 unit = 8 KB; fra1: $5.20)Disk I/O cost, practically ~zero (Winner)
Automatic scalingYes (Fluid Compute) (Winner)No, manual vertical/horizontal scaling
Build/CI/CD automationIncluded automatically (Winner)Needs your own script/GitHub Actions
Instant RollbackIncluded feature (Winner)Needs your own fail-safe deploy discipline
ISR/Image Optimization/Proxy working on self-hostNative (it's the platform itself)Works with next start, zero-config (official docs)
ISR cache distributionTeam-shared Data Cache (Winner)Single-instance local disk (extra setup needed for multi-instance)
DevOps load (TLS/reverse proxy/security)Close to zero (Winner)Setup plus ongoing low-level maintenance
Data residency control / KVKK-GDPRFunction/ISR region selectable (Hobby 1, Pro 5); static content on global CDNFull control, ISO 27001-certified DCs (Germany/Finland) (Winner)
CDN/cache purge controlPlatform's own CDN logicDetailed rule engine via Cloudflare API (Winner)
2026 price movementUsage-based, regional price rangesApril 1 + June 15 2026 price-increase waves
Compute/function billing modelActive-CPU + memory-based (regional)Fixed vCPU/RAM rental

Deep Dive

Vercel

Overview

Vercel is a git-based deployment platform operated by the creators of Next.js itself. Once you connect your repository, build, TLS, CDN distribution, preview deployment, and rollback are all managed automatically — no need to set up a server or reverse proxy. In 2026, the Pro plan starts at $20/month plus $20 of included usage credit; on top of that, Fast Data Transfer, Edge Request, ISR Read/Write, function invocations, and image transformation are billed separately, based on usage. Fluid Compute scales functions on an Active-CPU + memory basis by region. For spiky traffic profiles and teams with limited DevOps capacity, it offers a model that hands off operational risk for money; as usage grows, the bill can grow disproportionately.

Ecosystem

Package manager
npm/pnpm/yarn (project-dependent, platform-agnostic)
Development environment
VS CodeCursorWebStorm
Popular libraries
Next.jsSvelteKitNuxtVercel AI SDKVercel Edge Config

Hetzner VPS (self-host)

Overview

Hetzner VPS is a cloud server service offered by Germany-based Hetzner Online GmbH, available in the Shared Cost-Optimized, Shared Regular Performance, and Dedicated General Purpose product lines. Its data centers are in Germany (Falkenstein, Nürnberg), Finland (Helsinki), the US (Hillsboro, Ashburn), and, since 2024, Singapore; the Germany and Finland facilities are ISO/IEC 27001 certified. Self-hosting Next.js, per the official docs, requires building with standalone output mode and putting a reverse proxy (nginx) and a process manager (systemd) in front — ISR, Image Optimization, and Proxy work out of the box in this setup. In 2026, Hetzner made two price increases (April 1, June 15); the shared lines (CX/CAX) rose moderately, while the dedicated lines (CCX/CPX) doubled in some configurations. The fixed-fee model keeps its advantage for predictable traffic, but the responsibility is entirely on the user.

Ecosystem

Package manager
hcloud CLI + Cloud API (OS-level package management via apt/yum)
Development environment
SSH + VS Code Remoteterminal-based management
Popular libraries
hcloud-pythonhcloud-goTerraform hcloud providerAnsible hetzner.hcloud collection

Technical Analysis

Monthly base cost and billing predictability

Vercel Pro starts at $20/month plus $20 of included usage credit. The base is clear, but once the credit runs out the bill becomes variable: Fast Data Transfer, Edge Request, function invocations, ISR writes, and image transformation are all billed separately. Vercel's bot protection and AI-bot managed rulesets come OFF by default; the Spend Management cap exists on Pro but checks spend every few minutes rather than continuously. If you don't set both up deliberately, sudden traffic spikes can push the bill up disproportionately. On Hetzner VPS the picture flips: the monthly fee is fixed, and the bill doesn't change as long as you stay under the included traffic quota. But let's be honest — in 2026 Hetzner made two price increases (April 1, June 15); the dedicated vCPU lines (CCX/CPX) rose over 100% in some configurations, while the shared lines (CX/CAX) moved more moderately (30-38%). "Fixed and cheap" is still true, but now it depends on which line you pick. The hidden cost item is human-hours: if DevOps time is a capability you already have, the marginal cost is low; if it has to be learned from scratch, the real cost can approach Vercel's.

Bandwidth, Edge Request, and ISR Write unit prices

Vercel's official regional price table is clear: Fast Data Transfer includes the first 1TB, after which it's $0.15-$0.35 per GB. Fast Origin Transfer has no included quota — it starts at $0.06/GB and goes up to $0.43 depending on region. Edge Request includes 10M per month, after which it's $2.00-$3.20 per 1M requests (fra1: $2.60). There's no such thing as an included quota for ISR: 1M write units cost $4.00-$6.40 (fra1: $5.20), 1M read units cost $0.40-$0.64. Note that the unit isn't a page — one write unit means 8 KB of data; a large page can consume dozens of units in a single revalidation. Function invocation is $0.60/1M, image transformation is $0.05-$0.0812/1K. On Hetzner + Cloudflare, the picture is different: Hetzner includes a traffic quota with the server price — the official product page describes this as "generous included traffic, very low price for extra data transfer"; confirm the current GB figure from your own account. Put Cloudflare in front and static traffic is already served from the CDN. The equivalent of ISR-write is writing to disk: not a dollar bill, but disk I/O. Tipping point: if your volume stays under the included quotas, the difference is negligible; once you go over, Vercel's bill grows while Hetzner's stays fixed.

DevOps load: zero configuration or manual management?

On Vercel, deployment is automatic after a git push: build, TLS, CDN, preview deployment, and rollback are all managed by the platform. The pricing table includes "Automatic CI/CD" and "Instant Rollback" as included features. On Hetzner VPS, that responsibility is entirely yours. Next.js's official self-hosting documentation recommends putting a reverse proxy (nginx) in front — protection against malformed requests and rate-limiting should be kept separate from the server process. The official docs also note that Image Optimization can consume excessive memory on glibc-based Linux. In concrete terms: TLS renewal, security updates, process management (systemd), log rotation, and a build-lock discipline to prevent concurrent builds. This site's portfolio-ssr.service setup works exactly this way: a systemd unit + nginx + Cloudflare, plus a deployment script with build-lock/RAM-checks/health-retry. Setting this up takes real engineering time — this is the cost item most "self-hosting is cheap" articles skip.

ISR, streaming, and Image Optimization: what do you actually lose on self-host?

A common misconception: "if you switch to self-hosting, you lose ISR/Image Optimization/Proxy." According to the official Next.js documentation, this is WRONG — a Node.js/Docker deployment "supports all features." Image Optimization and Proxy work with next start with zero extra configuration. The real structural difference is in exactly one place: the ISR cache. On Vercel, it runs on a team-shared, distributed Data Cache. On self-host, the cache is written to each server instance's local disk file system by default. On a single instance (like this project), that's fine; once you move to multiple instances, each instance has its own cache, and users can see stale pages — the fix is a shared cache handler (Redis/NFS). Expecting ISR to work with next export is another trap — export produces a fully static build, and ISR doesn't work in this mode. This is a limitation that comes from the wrong deployment mode, not from standalone/Docker. For single-instance setups (most portfolios/blogs/mid-sized SaaS), the difference is practically zero; but for systems that need horizontal scaling, it introduces a real engineering cost.

Build/CI automation, scaling model, and CDN control

On Vercel, build, CI/CD, preview deployment, and scaling all come in one package. The Fluid Compute architecture bills functions on an Active-CPU + Provisioned-Memory basis by region (official figures like $0.184/hour CPU + $0.0152/GB-memory in Frankfurt) — capacity grows automatically as traffic increases. The CDN belongs to Vercel and covers a large number of regions. On Hetzner VPS, build/CI is something you set up yourself (GitHub Actions or a custom script). Scaling isn't automatic — it's manual, either vertical (bigger server) or horizontal (adding a load balancer). That's a disadvantage during sudden traffic spikes, but no waste for predictable traffic. On the CDN side, the Hetzner + Cloudflare combination offers strong control: cache purge and edge rules are entirely in your API token. This project's production triggers an automatic cache purge after every deploy. On Vercel, flexibility (region count, automatic distribution) wins on one axis, while Cloudflare's detailed rule engine wins on a different axis.

Data residency, KVKK/GDPR, backups, and outage discipline

For a project under KVKK/GDPR, data residency isn't an abstract criterion. Hetzner explicitly lists its data centers: Germany (Falkenstein, Nürnberg), Finland (Helsinki), the US (Hillsboro, Ashburn), and Singapore since 2024. The Germany and Finland facilities are ISO/IEC 27001 certified, and the company is headquartered in Germany — you know exactly where your data sits. On Vercel, static content is cached on the global CDN on every plan; you choose the region for functions and the ISR cache — per the official documentation's table, Hobby gets a single region, Pro gets 5 regions, Enterprise gets all regions. So region selection exists, but it's limited by plan. Backup responsibility falls on you at the application layer in both models — the platform only guarantees the infrastructure. On Hetzner, you set this up entirely yourself (on this project: daily automatic backups plus a monthly restore rehearsal). For outages/rollback, Vercel offers "Instant Rollback" out of the box; on Hetzner the equivalent is a fail-safe deploy discipline that leaves the previous version running in service if a build fails. Both providers have their own transparent status page, though the communication style differs.

Which One, When

A solo developer wants to ship a first MVP quickly

Recommendation: Vercel

Zero DevOps load, deploy on git push, no capacity planning needed — the right choice in an early stage where speed comes first.

A product whose traffic could suddenly spike 10x from a viral campaign

Recommendation: Vercel

Automatic scaling responds to sudden spikes without waiting for manual capacity increases; on Hetzner this requires manual intervention.

A predictable, medium-traffic portfolio/corporate site, with existing server-management knowledge

Recommendation: Hetzner VPS + Cloudflare

A fixed monthly fee plus already-established DevOps discipline lowers the total cost, with no billing surprises.

You need to contractually guarantee data residency under KVKK/GDPR

Recommendation: Hetzner VPS

The Germany/Finland data centers are ISO/IEC 27001 certified and fully under your control; on Vercel you can choose the function/ISR region, but the count is limited per plan (Hobby single region, Pro 5) and static content sits on the global CDN on every plan.

A large content site with high ISR-write volume that revalidates frequently

Recommendation: Hetzner VPS

On Vercel, ISR Write is billed with no included quota ($4.00-$6.40 / 1M write units, 1 unit = 8 KB); on self-host this cost drops to disk I/O and stays practically fixed.

A large-scale, multi-instance/K8s-based system that needs horizontal scaling

Recommendation: Vercel (or Hetzner with a shared cache handler)

On self-host, the ISR cache is tied to a single instance; multi-instance setups need an extra Redis/NFS setup — on Vercel, this distributed cache comes ready-made.

Budget-constrained, where long-term cost predictability is the most critical factor

Recommendation: Hetzner VPS (shared vCPU line)

The CX/CAX lines stayed fixed and moderate despite the 2026 price increases; the fixed-fee model makes long-term budget planning easier.

Common Pitfalls

  • Using Image Optimization in production on self-host without installing the sharp package

    Hetzner VPS (self-host)

    Solution

    Add npm install sharp — the official Next.js documentation explicitly states it will run slow/memory-heavy without it.

  • Expecting ISR or dynamic routes to work with next export (static export)

    Hetzner VPS (self-host)

    Solution

    Use a standalone/Docker deployment if you need ISR/dynamic routes — export produces a fully static build, and ISR doesn't work at all in this mode.

  • Budgeting the Vercel bill only on the base fee, without accounting for bot/crawler traffic

    Vercel

    Solution

    Turn on Vercel's own Bot Protection managed ruleset in challenge mode (off by default), write a rate-limit rule with the WAF, and set up a Spend Management cap; don't put a reverse proxy like Cloudflare in front of Vercel — the official docs say this breaks Bot Protection. Monitor Fast Data Transfer and Edge Request usage in the dashboard regularly.

  • Not noticing that in a multi-instance self-host setup, the ISR cache is separate on each instance

    Hetzner VPS (self-host)

    Solution

    Set up a shared cache handler (Redis/NFS) before moving to horizontal scaling, otherwise users may see stale pages.

  • Budgeting Hetzner's dedicated vCPU (CCX/CPX) line at old prices and missing the bill after the 2026 increase

    Hetzner VPS (self-host)

    Solution

    Confirm the current price from your own account; for general web workloads, the shared CX/CAX line is usually enough and saw a more moderate increase.

  • Triggering a second concurrent build during self-host builds (crash risk on low-RAM VPS)

    Hetzner VPS (self-host)

    Solution

    Add a build-lock to the deploy script (only one build at a time), do a RAM pre-check, and set up a fail-safe that doesn't restart on a failed build.

Migration Guide

Migrating from Vercel to self-hosted Hetzner VPS + Cloudflare

Estimated time: For a mid-sized Next.js project, initial setup takes 1-3 working days (with experienced DevOps capacity); once automation scripts mature, subsequent deploys take minutes
  1. 1Add output: 'standalone' to next.config.js and test it with next build
  2. 2Install the sharp package (npm install sharp) — needed for Image Optimization to work properly
  3. 3Create a server on Hetzner Cloud from the shared vCPU (CX/CAX) line, and define stateful firewall rules
  4. 4Write a build/deploy script that copies the .next/static and public folders into .next/standalone (add build-lock and a RAM check)
  5. 5Set up process management with a systemd unit (Restart=on-failure, non-root user, hardening settings like NoNewPrivileges)
  6. 6Set up nginx as a reverse proxy, and attach the TLS certificate (Let's Encrypt/Cloudflare)
  7. 7Put Cloudflare in front, point the DNS, and add automatic cache purge via API token to the deploy script
  8. 8Move environment variables (.env) to the server with secure permissions (600/640, root:app-user); set up daily database backups and a restore rehearsal

Future Outlook

Vercel

Vercel continues integrating the dev-mode memory improvements and Turbopack persistent build cache that came with Next.js 16.3 into its platform; Fluid Compute's regional Active-CPU billing model is maturing alongside the expanding Sandbox region count (now up to 4 regions).

Hetzner VPS (self-host)

Hetzner continues expanding automation via the Cloud API and hcloud CLI; regional coverage grew with the addition of Singapore in 2024. The two 2026 price increases are a sign that the provider is updating its pricing against rising infrastructure/energy costs — there's no official future price commitment, so it's worth checking the current price regularly when planning a long-term budget.

Golden Insight

"Vercel or self-host?" is the wrong question. The right question is: "how much bandwidth and ISR-write volume do I have, and is the marginal cost of my DevOps time close to zero?" Because Next.js doesn't lose any feature on self-host — ISR, Image Optimization, and Proxy all work out of the box with next start. The only difference is that the ISR cache is tied to a single instance; that only creates a cost at horizontal scale. The decision is really a choice about who takes on responsibility: on Vercel you hand off operational risk for money, on Hetzner you take it on with your own time, and in exchange you get a fixed bill and full data control. Even Hetzner's 2026 price increases didn't fundamentally change this balance.

Related Blog Posts

View All Posts
All Comparisons