Use your own domain
Serve your public site from your own address, like help.example.com.
A custom domain becomes the site's address. Once it is live,
<slug>.median.website redirects to it.
Any domain you own works: a subdomain like docs.example.com or
support.example.com, a deeper one, or the apex example.com itself.
Connect a domain
-
Add the domain
Go to Site → Domain. Under Custom domain, enter the hostname and press Connect.
-
Add the DNS records
Copy each record into your DNS provider. Names are relative to your domain:
helpforhelp.example.com,@forexample.comitself. -
Wait for Live
The status moves from Waiting for DNS to Live once the records are found. Check now checks straight away.
DNS records
| Domain | Type | Name | Value |
|---|---|---|---|
A subdomain, like help.example.com | CNAME | help | The target shown, like cname.vercel-dns.com |
The apex, like example.com | A | @ | The address shown, like 76.76.21.21 |
| Any, when listed | TXT | _vercel | The value shown. Proves you own a domain that is already used elsewhere on Vercel |
Use the values the dashboard shows. They can differ from these examples.
Turn off any proxy on the record, like Cloudflare's orange cloud. The HTTPS certificate is only issued while DNS points straight at the site.
Status
| Status | Meaning |
|---|---|
| Waiting for DNS | Records are missing, or have not spread yet. The records still to add are listed |
| Live | The site answers on the domain over HTTPS. <slug>.median.website sends visitors on to it in the browser |
| Fact | Detail |
|---|---|
| Checks | On connect, then on their own: after 2 minutes, then further apart, for about 4 days. Daily once live |
| Certificate | Issued and renewed for you |
| Paths | The move keeps the path, query and heading. /support goes to /support |
| Broken records | A live domain whose records stop resolving goes back to Waiting for DNS, and the redirect stops |
| One per site | In the dashboard, remove the domain before connecting another. The CLI, the API and MCP replace it in one step |
| Remove | The site answers on <slug>.median.website again |
| Sign-in | Works on both addresses |
Plan and access
| Requirement | Detail |
|---|---|
| Plan | The Site add-on, or Pro. See Plans |
| Role | Admins and owners connect and remove a domain. Anyone can press Check now |
API and CLI
| Action | CLI | REST |
|---|---|---|
| Show | median site domain get | GET /v1/site/domain |
| Connect | median site domain set <hostname> | POST /v1/site/domain |
| Check now | median site domain check | POST /v1/site/domain/check |
| Remove | median site domain remove | DELETE /v1/site/domain |
MCP: median.site.domain(), setDomain({ domain }), checkDomain(). setDomain({ domain: null }) removes it. See
the management API.
Troubleshooting
Every message the domain form can show, and what to do about it, is in Fix public site problems.