# Custom domains

A custom domain serves your [status page](/status-pages/introduction) from your own hostname, for example `status.example.com`. You add one DNS record, Spectate verifies that you own the domain, and the first HTTPS visit gets a certificate. The default address `https://<slug>.spectate.page` continues to work.

All paid plans and the trial include custom domains. Owners, managers and admins can add them.

## Add a custom domain

1. In the dashboard, open the status page and go to the **Domain** tab.
2. Type the **Hostname**, for example `status.example.com`.
3. Select **Add domain**.
4. Add the DNS records that the **DNS records** section shows, at your DNS provider.
5. Select **Check DNS**.

When the check finds a correct record, the section shows **Domain verified**. DNS changes can take some time to reach all resolvers. If the check finds nothing, wait and select **Check DNS** again. Spectate does not check again by itself.

A subdomain such as `status.example.com` is the easiest choice: one CNAME record verifies the domain and sends visitors to Spectate.

## DNS records

Every status page with a custom domain has its own CNAME target, for example `3f9a1c07b2e4d856.custom.spectate.page`. Only this page uses it. The **DNS records** section shows the target of your page. Copy the values from there.

### Subdomain

Add one CNAME record:

| Type | Name | Value |
|---|---|---|
| `CNAME` | `status.example.com` | The page's target, for example `3f9a1c07b2e4d856.custom.spectate.page` |

This record verifies the domain and routes the visitors.

If you cannot add a CNAME record, for example because a proxy is in front of the domain, verify with a TXT record instead:

| Type | Name | Value |
|---|---|---|
| `TXT` | `_spectate.status.example.com` | The token from the dashboard, for example `spectate-verify=...` |

The TXT record only proves that you own the domain. Visitors must still reach Spectate, through a CNAME to the page's target or through the same IP addresses.

### Root domain

A root domain such as `example.com` cannot have a CNAME record. Add both of these records:

| Type | Name | Value |
|---|---|---|
| `TXT` | `_spectate.example.com` | The token from the dashboard |
| `ALIAS` | `example.com` | The page's target |

Use the ALIAS, ANAME or CNAME flattening record of your DNS provider. If your provider has none of these, add `A` and `AAAA` records with the addresses that `dig +short <target>` returns. These addresses can change, so an ALIAS record is better. You can also use a subdomain instead.

## Check results

For each record, the **DNS records** section shows what DNS returns:

| Result | Meaning |
|---|---|
| **Found** | The record has the expected value. |
| **Points at** `<value>` | A record exists, with a different value. |
| **Not found** | DNS returns no record. |

**Traffic reaches Spectate** shows **Yes** when the domain points at Spectate, by the CNAME or by the same IP addresses. Otherwise it shows the address that the domain resolves to, or **Not yet**.

One correct record verifies the domain: the CNAME to the page's target, or the TXT token. After that, the domain stays verified, also if a later check fails.

:::caution
A CNAME to a shared Spectate host, such as `status.spectate.page`, does not verify a domain. Only the target of your own page or the TXT token proves that you own it. This stops other teams from claiming a domain that still points at Spectate.
:::

## HTTPS

You do not need to configure HTTPS. Spectate gets a certificate on the first HTTPS visit to the domain, after the domain is verified and points at Spectate. This first request can take a few seconds. Spectate renews the certificate automatically.

Spectate gets certificates only for verified domains of status pages that are not paused. This applies to public, private and password-protected pages.

## Change or remove the domain

To change the domain, type the new hostname and select **Update domain**. The new domain gets a new TXT token and must be verified again. The CNAME target of the page stays the same.

To remove the domain, select **Remove domain**. The page then has only its default address.

## What can go wrong

| Problem | Result | What to do |
|---|---|---|
| The domain is not verified. | Spectate does not serve the page on the domain and gets no certificate. | Add the CNAME or TXT record, then select **Check DNS**. |
| **Traffic reaches Spectate** is not **Yes**. | Visitors do not reach the page. | Point the domain at the page's target with a CNAME or ALIAS record. |
| The CNAME points at another host. | The check shows **Points at** with that host. | Change the CNAME to the target shown in the dashboard. |
| The hostname is under `spectate.page`, or another page uses it. | The dashboard rejects the hostname. | Use a domain that you own and that no other status page uses. |
| The page is paused because of the plan limit. | Spectate does not serve the page or issue a certificate. | Upgrade the plan or delete another status page. |

The **Integrations** page of the dashboard lists all custom domains of the team, with **Verified** or **Awaiting DNS**.

## Pages from Spectate v1

Pages that moved from the previous version of Spectate keep their verified domain and their target `<slug>.custom.spectate.page`. A CNAME to the old shared target `cname.spectate.page` continues to work for these domains. It does not verify a new domain.

## Related

- [Access and visibility](/status-pages/access)
- [Status pages in the API reference](/api-reference/status-pages)
