Vercel content site go-live checklist (10 items)

A pre-launch checklist for content sites going live on Vercel in 2026 — covers Astro / Next.js settings, custom domain, env vars, sitemap, canonical, analytics, and rollback.

Before you point a real domain at your Vercel deployment, run through these 10 items. Each one is something a real indie dev has been bitten by — wrong canonical URL, leaked staging hostname, missing rollback rehearsal, runaway Hobby usage cap. None take more than five minutes to verify, and skipping any one of them is exactly the kind of mistake that turns “launch day” into “Slack-message-and-revert day.”

Background

Vercel’s defaults are excellent for getting a project running, but pre-launch is where you tighten everything down: canonical domain, env vars, analytics, redirects, and crash plan. This list is in run order — do them top to bottom.

Step by step

  1. Confirm base URL. For Astro that’s site: in astro.config.mjs; for Next.js it’s metadataBase in app/layout.tsx. Must match your custom domain, never *.vercel.app:
// 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: '/' },
};
  1. Env var audit. List Production vars and grep for accidental client-side exposure:
vercel env ls production

# Make sure no real secret is in a public-prefixed variable
vercel env ls production | grep -E 'NEXT_PUBLIC_|PUBLIC_'
# any STRIPE_SECRET / API_KEY here = leak
  1. Both domains added with one canonical. A vercel.json redirect for the non-canonical:
{
  "redirects": [
    { "source": "/:path*", "has": [{ "type": "host", "value": "www.yourdomain.com" }],
      "destination": "https://yourdomain.com/:path*", "permanent": true }
  ]
}

DNS for apex-primary:

Type   Name   Value
A      @      76.76.21.21
CNAME  www    cname.vercel-dns.com
  1. Verify SSL for 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/
  1. Enable Speed Insights and Web Analytics in Project → Analytics → Enable. Or via SDK if you want server-side capture:
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>;
}
  1. Lighthouse on live URL. Performance and Best Practices > 90:
npx lighthouse https://yourdomain.com/ \
  --only-categories=performance,seo,best-practices \
  --chrome-flags="--headless" --quiet
  1. Submit canonical domain to Search Console. Domain property is best — verify via DNS TXT (more reliable than HTML tag):
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
  1. Scan production HTML for leaked vercel.app URLs:
curl -s https://yourdomain.com/ | grep -iE 'vercel\.app|canonical|og:url' | head
# canonical/og:url should be yourdomain.com, never *.vercel.app
  1. Rehearse a rollback before you need one:
vercel ls
# READY  Production https://yourdomain.com  abc123  current
# READY  Preview    https://...              def456  rollback target

vercel promote https://yourdomain-def456.vercel.app   # promotes to Production
# Console: Deployments → ... → Promote to Production
  1. Spending caps. Settings → Billing → Spend Management → enable. Set hard cap, plus alerts at 50% and 90%.

Common pitfalls

  • Leaving *.vercel.app references in canonical, sitemap, or social meta.
  • Submitting sitemap to a non-canonical domain — Search Console treats them as separate properties.
  • Going live Friday afternoon — Mondays are better for rollback rehearsals.
  • Skipping the env var audit and hitting “undefined” errors on first production traffic.
  • Trusting Hobby usage caps on a commercial project that should be on Pro.

Who this is for

Every indie dev launching a content site on Vercel.

When to skip this

Apps with complex backend / DB integration need additional checks beyond this list.

FAQ

  • How long does the full launch checklist take?: 30-45 minutes the first time, 10 minutes on the second project once you have a template.
  • Do I need to do anything special for Search Console verification?: Add the HTML meta tag or DNS TXT record. Vercel supports both. The DNS option is more reliable.
  • What if I find a 404 right after going live?: Check redirects and cleanUrls / trailing-slash interactions. Promote a previous deployment if it is severe.
  • Should I set up monitoring?: At minimum a free uptime monitor (UptimeRobot / BetterStack free tier) hitting / every 5 minutes.

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