# Custom domain

> Serve the ClickClacks tracker from a subdomain you own: pick a subdomain, add one CNAME record, follow the setup states, update your snippet and move sources over.

- Canonical URL: https://clickclacks.io/docs/guides/custom-domain
- Section: Product guides
- Last updated: 2026-09-26

Serve the tracker script and the event endpoint from a subdomain you own, such as cc.acme.com, so your analytics looks like part of your own site rather than a third party.

> **Part of the Pro plan**
>
> A custom tracker domain is included on Pro. See [pricing](https://clickclacks.io/pricing).

## Why use one {#why}

By default the script loads from `app.clickclacks.io/c.js`. With a custom domain it loads from `cc.acme.com/c.js` and sends events to `cc.acme.com/e`. A project has one custom domain, shared by all its sources.

## Set it up {#setup}

It takes three steps and about ten minutes. You need an Owner, because it is under Settings.

1. Open **Settings › Custom domain** and click **Add a domain**. Enter a subdomain, such as `cc.acme.com`, and click **Continue**. A bare domain such as `acme.com` isn’t accepted.
2. At your DNS provider, add the one **CNAME** record shown: its name is your subdomain, and it **Points to** the target on screen. Leave the TTL on automatic.
3. Click **Check now**. When the domain is live, change the script’s `src` in your snippet. Everything else in the snippet stays the same.

## Setup states {#states}

| State | Means |
| --- | --- |
| Waiting for DNS | The CNAME record hasn’t been seen yet. DNS changes can take a while to spread. |
| Turning on HTTPS | The record is right, and a certificate is being issued. |
| Needs a small fix | The record points somewhere else. The page says what it found, or you can use a different subdomain. |
| One more record needed | Your domain’s CAA records don’t allow Let’s Encrypt. Add the record shown. |
| Live | Your subdomain serves the script and receives events. |

## Move your sources over {#move}

Once live, the page shows your snippet on the new domain and _where events are arriving_, so you can see which sites still use the old address. Update each site’s snippet. The old address keeps accepting events for 30 days after your domain is verified, which gives you time to deploy.

The exact snippet, and what happens to heatmap captures, are in [Domains and identity](https://clickclacks.io/docs/domains.md#custom-domain).

## Tips and gotchas {#tips}

- **Server events** still go to `app.clickclacks.io/api/v1/batch`. Custom domains carry browser traffic only.
- **To remove the domain**, type its hostname to confirm and click **Remove domain**. Point your snippets back first.

## Recipes {#recipes}

### Move our site and app onto cc.acme.com.

1. Add `cc.acme.com` in **Settings › Custom domain** and create the CNAME.
2. Wait for **Live**, then change the snippet’s `src` on the site and deploy.
3. Do the same in the app, and watch _where events are arriving_ until everything uses the new domain.

## Related {#related}

- [Domains and identity](https://clickclacks.io/docs/domains.md)
- [Install the tracker](https://clickclacks.io/docs/install.md)
- [Sources](https://clickclacks.io/docs/guides/sources.md)
- [Privacy](https://clickclacks.io/docs/privacy.md)
