Serving a status page on your own domain (CNAME)
Every status page lives at https://completestatus.com/status/{handle}/{slug}. With a custom domain you can serve the same page on a hostname you own — status.yourcompany.com — so clients and visitors never see the CompleteStatus URL. This guide walks through the whole setup, assuming no DNS experience.
How it works: you create a CNAME record that points your hostname at CompleteStatus, and set that hostname in the status page editor. CompleteStatus then verifies the DNS record — on save and again every hour — and once verified, serves your status page (with its own HTTPS certificate) at the root of that domain. The /status/{handle}/{slug} URL keeps working alongside it, and only publicly visible pages are ever served this way.
1. Check your plan
Custom domains are available on the Pro plan and up. On the Free plan the field is disabled in the editor with an upgrade prompt — see pricing for the full plan comparison. (If you set up a domain on Pro and later downgrade, the domain keeps working; you just can't change it until you upgrade again.)
2. Choose a subdomain
Pick a subdomain of a domain you own, such as:
status.yourcompany.com
Use a subdomain, not your bare (apex) domain like yourcompany.com. The DNS standard doesn't allow a CNAME record at the apex of a zone — it would conflict with the SOA and NS records that must live there, and most DNS providers will refuse to create it. Some providers offer workarounds (ALIAS/ANAME records, or Cloudflare's CNAME flattening), but a plain subdomain works everywhere and is what we recommend.
status. is the convention visitors expect, but any subdomain works — uptime.yourcompany.com, health.yourcompany.com, and so on.
3. Add the CNAME record at your DNS provider
Log in to wherever your domain's DNS is managed (often your registrar) and create one record:
| Field | Value |
|---|---|
| Type | CNAME |
| Name / Host | status (just the subdomain part) |
| Target / Value / Points to | your CompleteStatus host — the exact target is shown under the Custom domain field in the editor |
| TTL | the default (or 5–30 minutes while testing) |
Provider-specific notes:
- Cloudflare — DNS → Records → Add record → type CNAME, Name
status, Target as above. Set the proxy status to "DNS only" (grey cloud), not "Proxied" (orange cloud). With the orange cloud on, Cloudflare answers TLS for your hostname and forwards traffic from its own network, which breaks certificate provisioning for your domain. You can revisit proxying later; start grey. - Namecheap — Domain List → Manage → Advanced DNS → Add New Record → CNAME Record, Host
status, Value as above. Namecheap appends your domain automatically, so enter onlystatus, not the full hostname. - GoDaddy — My Products → DNS next to your domain → Add New Record → Type CNAME, Name
status, Value as above. If GoDaddy pre-created a conflicting record for the same name (e.g. a parked A record on a wildcard), delete it first — a name can't have both a CNAME and another record.
Note: DNS changes are not instant. Your record's TTL (time to live) tells resolvers how long to cache the old answer, so the change can take anywhere from minutes to ~48 hours to be visible everywhere. Most changes are live within an hour.
4. Set the custom domain in the editor
- Open /status-pages and edit your page.
- In Custom domain, enter the bare hostname exactly as you created it —
status.yourcompany.com. Nohttps://, no trailing slash, no port. - Save. Each domain can be attached to only one status page.
On save, CompleteStatus immediately checks DNS and shows the result under the field:
- Domain verified — the CNAME resolves to our target (or your TXT record matched). Your page is now served on the domain, and its HTTPS certificate is issued automatically on the first visit.
- Not verified yet — we couldn't see the record. That's normal right after creating it (propagation); save again later to re-check, or just wait — we re-check every hour automatically.
- DNS check failing — a previously verified record stopped resolving. Your page keeps serving during a grace window while you fix the record; only after the window elapses does the domain deactivate (your
/status/…URL is never affected).
Can't create the CNAME? (apex domain, or your DNS proxy hides CNAMEs — e.g. Cloudflare's orange cloud): prove ownership with a TXT record instead. The editor shows the exact record after you save — a TXT at _completestatus-challenge.status.yourcompany.com with a value like completestatus-verify=…. Either the CNAME or the TXT record verifies the domain; note that traffic still needs to reach us, so the hostname must ultimately resolve to our infrastructure.
5. Verify the record
From a terminal, check that your hostname resolves to a CNAME:
nslookup -type=CNAME status.yourcompany.com
or with dig (macOS/Linux):
dig CNAME status.yourcompany.com +short
The answer should be the CNAME target shown in the editor. To watch the change roll out across resolvers worldwide, use our free DNS propagation checker — enter your hostname, pick CNAME, and watch it propagate worldwide.
Once DNS resolves, open https://status.yourcompany.com — you should see your status page at the root of your own domain.
HTTPS on your domain
TLS for custom domains terminates at the CompleteStatus edge, and a certificate for your exact hostname is issued automatically on the first HTTPS visit after the domain verifies — there is nothing to upload or configure. If the browser still warns on https:// after the editor shows Domain verified, give it a minute (first-visit issuance takes a few seconds) and retry; if it persists, contact support. (This is also why the Cloudflare orange cloud must stay off during setup: certificate issuance validates your hostname against our edge, and it never sees the request while Cloudflare is answering for it.)
Troubleshooting
- The page still shows my registrar's parking page / the old site. Propagation isn't finished, or your resolver cached the old answer for the record's TTL. Check with the propagation tool, and try
nslookupagainst a public resolver:nslookup status.yourcompany.com 1.1.1.1. - Cloudflare users: certificate errors or redirect loops. The record is proxied (orange cloud). Switch it to DNS only (grey cloud) and retest after a few minutes.
- "That domain is already attached to another status page." Each hostname can serve exactly one page. Detach it from the other page first, or pick a different subdomain.
- The domain resolves but shows the main CompleteStatus site instead of my page. The domain hasn't verified yet — check the status under the Custom domain field in the editor. Custom domains only serve after DNS verification.
- The domain resolves but shows a 404. The status page's Publicly visible toggle is off — custom domains only serve public pages. Turn it back on in the editor.
- The domain resolves but shows "This status page is restricted" (403). The page has an IP allowlist configured and your current IP isn't on it. The allowlist applies on the custom domain exactly as it does on the
/status/{handle}/{slug}URL. - Mixed-content warnings, or the page loads without styling. Make sure you're linking to the page as
https://status.yourcompany.com(nothttp://), and that nothing rewrites the page's asset URLs to plainhttp://(proxies or "optimizers" in front of your DNS can do this). The page itself always references its assets over the scheme it was served on. - The bare domain doesn't work. Expected — the CNAME lives on the subdomain only (see step 2). If you want
yourcompany.com/status-style links, redirect them to the subdomain at your web host.