A CDN is the most impactful infrastructure decision for marketing page performance and has no substitute — it is the mechanism by which TTFB for users far from the origin drops from 500–1500ms to under 50ms. ISO-25010 time-behaviour quality for global users is impossible to achieve without geographic distribution of content. A marketing page served from a single-region VPS or single-region cloud deployment fails TTFB for any user outside that region, and since marketing pages target geographically distributed prospects, most visitors will be geographically distant from a single-region origin. Critically, this isn't just an average performance issue: users in slow-TTFB regions have lower engagement rates, lower conversion rates, and generate less revenue per visitor.
Critical because no application-level optimisation can compensate for the physical latency of serving from a single-region origin to geographically distributed users — CDN is the only fix.
Move to a hosting platform with built-in global CDN for Next.js projects — Vercel is the lowest-friction option and requires no CDN configuration.
# Option 1: Vercel — automatic global CDN, optimal for Next.js
npx vercel --prod
# Option 2: Netlify
npx netlify deploy --prod
# Option 3: Cloudflare Pages
npx wrangler pages deploy ./out
If you must stay on a custom server or VPS (Fly.io, Railway, bare VM), add Cloudflare in front — the free tier proxies your domain through Cloudflare's global network with no code changes required. Point your DNS to Cloudflare, enable the proxy, and static assets are automatically cached at edge nodes in 300+ cities. For dynamic HTML, set Cache-Control: public, s-maxage=3600 on marketing page responses to enable CDN HTML caching.
ID: marketing-page-speed.infrastructure.cdn-usage
Severity: critical
What to look for: Check whether the project is configured to serve static assets (and ideally HTML) from a CDN (Content Delivery Network). Signals: (1) hosting config files — vercel.json (Vercel = built-in global CDN), netlify.toml (Netlify = built-in global CDN), wrangler.toml (Cloudflare Pages = edge CDN), fly.toml (no CDN — single region), (2) next.config.* for assetPrefix pointing to a CDN URL, (3) NEXT_PUBLIC_CDN_URL or similar env var reference, (4) AWS CloudFront distribution config, (5) custom CDN configs (Fastly, Akamai, etc.). If hosting is Vercel, Netlify, or Cloudflare Pages, CDN is automatic. Count all instances found and enumerate each.
Pass criteria: The project deploys to a platform with global CDN capabilities (Vercel, Netlify, Cloudflare Pages, AWS CloudFront + S3). Static assets are served from CDN edge nodes. Users worldwide get the same fast TTFB rather than waiting for requests to traverse to a single-region origin. At least 1 implementation must be confirmed.
Fail criteria: Project deploys to a single-region server (raw VPS, Docker on a single cloud region, Fly.io single region, Railway) with no CDN in front. All users hit the origin regardless of geographic location.
Skip (N/A) when: Never — CDN is applicable to all public marketing sites.
Detail on fail: "Hosting detected as Fly.io single-region deployment (fly.toml) with no CDN configuration. Users outside the deployment region will experience TTFB > 1000ms, failing the threshold."
Remediation: Move to a CDN-native hosting platform:
# Option 1: Vercel (recommended for Next.js — automatic global CDN)
npx vercel --prod
# Option 2: Netlify
npx netlify deploy --prod
# Option 3: Cloudflare Pages
npx wrangler pages deploy ./dist
If staying on a VPS or custom infrastructure, add CloudFront or Cloudflare in front: