# 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

1. **Add the domain**

   Go to **Site → Domain**. Under **Custom domain**, enter the hostname and press
   **Connect**.

2. **Add the DNS records**

   Copy each record into your DNS provider. Names are relative to your
   domain: `help` for `help.example.com`, `@` for `example.com` itself.

3. **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](/articles/choose-how-visitors-sign-in) | Works on both addresses |

## Plan and access

| Requirement | Detail |
| --- | --- |
| Plan | The Site add-on, or Pro. See [Plans](/articles/manage-your-plan-and-credits#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](https://docs.median.sh/reference/manage).

## Troubleshooting

Every message the domain form can show, and what to do about it, is in
[Fix public site problems](/articles/fix-public-site-problems#custom-domain).
