Vercel go-live checklist for content sites (10 checks)

A pre-launch checklist for content sites going live on Vercel as of June 2026 — base URL, env vars, www-vs-apex DNS, SSL, analytics limits, sitemap, leaked vercel.app scan, instant rollback, and spend caps.

Before you point a real domain at your Vercel deployment, run through these 10 checks. Each one maps to a mistake a real indie dev has shipped to production: a canonical URL still pointing at *.vercel.app, a secret leaked into a PUBLIC_-prefixed variable, a sitemap submitted to the wrong hostname, no rehearsed rollback, or a commercial site quietly running on the free Hobby plan (which Vercel only licenses for personal, non-commercial use). None of these takes more than five minutes to verify. Skipping one is how “launch day” becomes “revert-and-apologize day.”

TL;DR

  • Set your real base URL (site: in Astro, metadataBase in Next.js) so canonical and Open Graph tags never emit a *.vercel.app host.
  • Pick www or apex as canonical, add both domains, and 308-redirect the other. As of June 2026 Vercel issues a project-specific CNAME (e.g. xxxx.vercel-dns-017.com), so always copy the value from your own dashboard.
  • Audit Production env vars for secrets sitting in PUBLIC_/NEXT_PUBLIC_ names — those ship to the browser.
  • Know the free-tier ceilings before launch: Web Analytics caps at 2,500 events/month and Speed Insights at 10,000 data points/month on Hobby.
  • Rehearse vercel rollback and turn on Spend Management before traffic arrives, not during the incident.

Why pre-launch is its own job

Vercel’s defaults get a project running in minutes, but launch is a different task: it’s where you lock down the canonical domain, environment secrets, SEO surface, analytics budget, and your crash plan. The list below is in run order — do it top to bottom, because step 1 (base URL) changes what step 8 (the leaked-host scan) is looking for.

The 10 checks

1. Confirm the base URL

For Astro that’s site: in astro.config.mjs; for Next.js it’s metadataBase in app/layout.tsx. It must be your custom domain, never *.vercel.app — this single value feeds canonical tags, the sitemap, and og:url.

// astro.config.mjs
export default defineConfig({
  site: 'https://yourdomain.com',
  trailingSlash: 'always',
});
// app/layout.tsx (Next.js)
import type { Metadata } from 'next';
export const metadata: Metadata = {
  metadataBase: new URL('https://yourdomain.com'),
  alternates: { canonical: '/' },
};

2. Audit Production env vars

List Production vars and grep for secrets accidentally placed in a browser-exposed name. Anything prefixed NEXT_PUBLIC_ (Next.js) or PUBLIC_ (Astro) is inlined into the client bundle.

vercel env ls production

# Make sure no real secret sits in a public-prefixed variable
vercel env ls production | grep -E 'NEXT_PUBLIC_|PUBLIC_'
# any STRIPE_SECRET / API_KEY here = a leak shipped to every browser

3. Add both domains, declare one canonical

Decide whether www or the apex is primary (Vercel’s docs now recommend www for the most robust setup), add both to the project, and redirect the non-canonical with a permanent 308.

{
  "redirects": [
    { "source": "/:path*", "has": [{ "type": "host", "value": "www.yourdomain.com" }],
      "destination": "https://yourdomain.com/:path*", "permanent": true }
  ]
}

DNS for apex-as-primary. The apex A record is Vercel’s anycast IP 76.76.21.21, but the www CNAME is now project-specific as of June 2026 — copy the exact value from your dashboard instead of using the old generic cname.vercel-dns.com:

Type   Name   Value
A      @      76.76.21.21
CNAME  www    <copy from Vercel — e.g. d1d4fc829fe7bc7c.vercel-dns-017.com>
# Print the exact DNS records Vercel wants for your domain
vercel domains inspect yourdomain.com

4. Verify SSL on both hostnames

curl -sI https://yourdomain.com     | head -1   # HTTP/2 200
curl -sI https://www.yourdomain.com | head -3   # HTTP/2 308 + location: https://yourdomain.com/

Vercel auto-issues Let’s Encrypt certificates for every added domain, but they only provision after DNS resolves — so do this check after the records propagate, not before.

5. Enable analytics — and know the free caps

Turn on Web Analytics and Speed Insights in Project → Analytics → Enable, or wire the SDK for finer control. Budget for the Hobby ceilings up front (see the table below) so collection doesn’t silently pause mid-launch.

npm install @vercel/analytics @vercel/speed-insights
// app/layout.tsx
import { Analytics } from '@vercel/analytics/react';
import { SpeedInsights } from '@vercel/speed-insights/next';

export default function RootLayout({ children }) {
  return <html><body>{children}<Analytics /><SpeedInsights /></body></html>;
}

6. Run Lighthouse against the live URL

Aim for Performance and Best Practices above 90. A static Astro or pre-rendered Next.js content site on Vercel’s CDN should clear this easily; if it doesn’t, an oversized hero image or render-blocking font is usually the culprit.

npx lighthouse https://yourdomain.com/ \
  --only-categories=performance,seo,best-practices \
  --chrome-flags="--headless" --quiet

7. Submit the canonical domain to Search Console

Use a Domain property — it covers http/https and every subdomain at once — and verify with a DNS TXT record (more durable than an HTML tag that a redeploy could drop).

Search Console → Add property → Domain → yourdomain.com
DNS TXT record at apex:
  Name: @       Value: google-site-verification=[token]
Then Sitemaps → Add → https://yourdomain.com/sitemap.xml

8. Scan production HTML for leaked vercel.app URLs

curl -s https://yourdomain.com/ | grep -iE 'vercel\.app|canonical|og:url' | head
# canonical / og:url must be yourdomain.com, never *.vercel.app

If anything still resolves to *.vercel.app here, go back to check 1 — your base URL didn’t take.

9. Rehearse an instant rollback

Don’t learn the command during an outage. As of June 2026 Vercel has a dedicated vercel rollback; on Hobby you can only roll back to the immediately previous production deployment, while Pro can target any earlier one.

vercel ls                         # find the deployment you'd fall back to
vercel rollback                   # roll back to the previous production deployment
vercel rollback [deployment-url]  # Pro: roll back to a specific earlier one
vercel rollback status            # confirm it completed
vercel promote [deployment-url]   # undo a rollback / re-promote

In the dashboard the same action lives under Deployments → ⋯ → Instant Rollback. Note that only deployments previously aliased to your production domain are eligible — most one-off preview builds are not.

10. Turn on Spend Management

New teams ship with a default $200 on-demand budget. On Pro, configure Spend Management to pause projects at a hard cap and fire alerts at intermediate thresholds — without it, a traffic spike or a misconfigured function can run up usage before you notice.

Settings → Billing → Spend Management → set a hard cap
Add notification thresholds (e.g. 50% and 90%)
Pro: enable "pause projects" so spend stops at the cap

Free-tier ceilings to plan around (as of June 2026)

The Hobby plan is genuinely free and never charges overage — it pauses collection or takes the app offline instead. That’s fine for a side project but a trap for anything commercial, which Vercel’s terms require to be on Pro.

ItemHobby (free)Pro ($20/seat/mo)
Commercial useNot permittedPermitted
Web Analytics events2,500 / month, then pausedPay-as-you-go beyond included
Speed Insights1 project, 10,000 data points/mo, 7-day window$10/project base, 30-day window
Instant RollbackPrevious deployment onlyAny earlier deployment
Custom domains per project5050
Spend Management auto-pauseNot availableAvailable

If your content site sells anything, runs ads, or represents a business, plan to be on Pro at launch — see Vercel Hobby vs Pro for content sites for where the line falls.

Common pitfalls

  • Leaving *.vercel.app references in canonical, sitemap, or social meta — usually because the base URL in check 1 was never set.
  • Submitting the sitemap to a non-canonical hostname; Search Console treats www and apex as separate properties and splits your reporting.
  • Pasting the old generic cname.vercel-dns.com instead of the project-specific CNAME Vercel now issues — the domain stays “Invalid Configuration.”
  • Going live Friday afternoon; ship earlier in the week so you have time to use that rollback you rehearsed.
  • Skipping the env audit and hitting undefined errors on the first production request.
  • Running a commercial site on Hobby and getting taken offline mid-month when the free cap trips.

FAQ

  • How long does the full checklist take?: About 30-45 minutes the first time. On your second project it drops to roughly 10 minutes once vercel.json, the DNS records, and the analytics wiring become a reusable template.
  • www or apex — which should be canonical?: Either works; pick one and redirect the other. Vercel’s current docs lean toward www as primary because it’s easier to put a CDN or edge layer in front of later. Whatever you choose, be consistent across base URL, sitemap, and Search Console.
  • The www CNAME from an old tutorial doesn’t work — why?: Vercel moved to per-project CNAME hostnames (like xxxx.vercel-dns-017.com). Run vercel domains inspect yourdomain.com or read it off the dashboard; the generic cname.vercel-dns.com is no longer the value to copy.
  • What if I see a 404 right after going live?: Check redirect rules and cleanUrls / trailingSlash interactions first — a mismatch between Astro’s trailingSlash: 'always' and Vercel’s link handling is the usual cause. If it’s widespread, run vercel rollback and debug on a preview.
  • Should I set up uptime monitoring?: At minimum, point a free monitor (UptimeRobot or BetterStack free tier) at / every 5 minutes so you hear about an outage before your readers do.

Tags: #Indie dev #Vercel #Hosting #Workflow #SEO