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
- Confirm base URL. For Astro that’s
site:inastro.config.mjs; for Next.js it’smetadataBaseinapp/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: '/' },
};
- 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
- Both domains added with one canonical. A
vercel.jsonredirect 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
- 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/
- 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>;
}
- Lighthouse on live URL. Performance and Best Practices > 90:
npx lighthouse https://yourdomain.com/ \
--only-categories=performance,seo,best-practices \
--chrome-flags="--headless" --quiet
- 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
- 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
- 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
- Spending caps. Settings → Billing → Spend Management → enable. Set hard cap, plus alerts at 50% and 90%.
Common pitfalls
- Leaving
*.vercel.appreferences 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.
Related
Tags: #Indie dev #Vercel #Hosting #Workflow #SEO