Serving a status page on your own domain (CNAME)
Put your status page on status.yourdomain.com with a CNAME and a TXT ownership record — plan requirements, registrar walkthroughs for Cloudflare, Namecheap and GoDaddy, verification with dig/nslookup, and troubleshooting.
On this page
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, set that hostname in the status page editor, and add a TXT record that proves the domain is yours. CompleteStatus checks the TXT record — on save and again every hour — and once it matches, 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 move to a plan without custom domains, the domain is removed from your page as soon as the plan change goes through. The /status/{handle}/{slug} URL keeps working, and you can set the domain up again after upgrading.)
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 and add the TXT record
- 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. The editor now shows a TXT record for this page under the field: a TXT at
_completestatus-challenge.status.yourcompany.comwith a value likecompletestatus-verify=…. - Create that TXT record at your DNS provider (Type
TXT, Name_completestatus-challenge.status— most providers append your domain — and the value exactly as shown). - Save the page again once the record is live, or just wait: we re-check every hour automatically.
The TXT record is what proves the domain is yours. The CNAME only routes traffic: every customer's CNAME points at the same target, so it can't show which status page you meant, and it no longer verifies a domain on its own. The TXT value is tied to this page and this domain, so if you move the domain to another page, the editor shows a new value to publish.
After each check, the editor shows the result under the field:
- Domain verified — 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 TXT 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).
A domain can be verified on only one status page. Until one page verifies it, several pages may claim the same hostname; the first to verify keeps it, and the other claims are released.
Domains that were verified before the TXT record was required keep working on their CNAME. You only need the TXT record for a new or changed domain, or for one whose verification lapsed.
Can't create a CNAME? (for example on an apex domain): use your DNS provider's ALIAS/ANAME record or CNAME flattening to point the hostname at the target instead. Verification only needs the TXT record, but traffic still has to reach us, so the hostname must ultimately resolve to our infrastructure.
5. Verify the records
From a terminal, check that your TXT record is published:
nslookup -type=TXT _completestatus-challenge.status.yourcompany.com
dig TXT _completestatus-challenge.status.yourcompany.com +short
The answer should include the completestatus-verify=… value shown in the editor. Then 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." Another page has already verified this hostname, and 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, and make sure the
_completestatus-challengeTXT record is published with the value shown there. Custom domains only serve after 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.
Ready to try it?
10 monitors, security grading and email-authentication checks on the free tier — commercial use allowed.