Ship/Now

Ship it · 2 min

Custom domain

The five DNS records, in the order that stops you waiting on the wrong one.

Two things need your domain and they are independent: the site, and email.

The site

Add the domain in the Vercel project, then at your registrar:

TypeHostValue
A@the address Vercel shows
CNAMEwwwthe target Vercel shows

Pick one as canonical and redirect the other. Vercel does that for you; just choose deliberately rather than serving both, because two URLs for one page splits your ranking.

Then set NEXT_PUBLIC_SITE_URL to the canonical one and redeploy. Metadata, the sitemap and Stripe's redirect URLs all read it, and they will keep pointing at vercel.app until you do.

Email

Add the same domain in Resend and set the three records it gives you:

TypeHostPurpose
TXTresend._domainkeyDKIM
MXsendBounce handling
TXTsendSPF

Order of operations

Set the DNS records

All five at once. They propagate independently, so there is no reason to wait between them.

Verify in Vercel

Usually a minute or two. Until it verifies, the domain serves your registrar's parking page and it looks like the deploy failed.

Verify in Resend

Slower, sometimes an hour. Nothing else is blocked on it, and until it lands mail only reaches the account owner.

Update the Stripe webhook

Point the endpoint at the real domain and put the new signing secret in the environment. An endpoint on the old URL keeps firing at a deployment that is no longer the one people buy from.

Something wrong or missing on this page? Tell us.