A website first lives on a temporary platform address. To put it on the client's own domain you add the domain in the dashboard, set the records it shows at the client's DNS provider, and let the dashboard check them. The records depend on where the site runs, so you tell the dashboard that first.
Who can do this: the agency team (site.settings). Clients never see these settings.
| Where the site runs | Records the dashboard asks for |
|---|---|
| On the platform's own server (custom code) | TXT for verification + A/AAAA to the server's addresses |
| At a host of its own (Cloudflare Pages, Vercel, Netlify) | TXT + CNAME to the host's address |
| Connected to Cloudflare under Hosting & deploys | TXT + CNAME to the Pages address (decided for you) |
| A hosted block site (legacy) | TXT + CNAME to the platform address |
| Not chosen yet | TXT only |
Where the site runs
- Open the website and go to Instellingen → Algemeen → Domein (domain). The screen starts with Je website staat nu op … (your website is now at …) and the temporary address.
- For a custom-code site, choose under Waar draait de website? (where does the website run?):
- Op de server van het platform (on the platform's server): the site runs as a container on the platform's server (Hosting and deploys). This option only exists when the platform has its server addresses configured (
SITE_SERVER_ADDRESSES, a comma-separated list of IPv4 and IPv6 addresses). - Bij een eigen host (at a host of its own): fill in Adres van de host (the host's address), "Het adres dat de host je geeft, bijvoorbeeld klant.pages.dev of klant.vercel.app." A full URL is fine; only the hostname is kept.
- Op de server van het platform (on the platform's server): the site runs as a container on the platform's server (Hosting and deploys). This option only exists when the platform has its server addresses configured (
- Click Opslaan. "Opgeslagen. De records hieronder zijn bijgewerkt."
When the repository is connected to Cloudflare under Hosting & deploys, the choice is made for you (a CNAME to the Pages project's address) and the question is hidden. Until a choice is made, each domain shows "Kies eerst hierboven waar de website draait. Tot dan is alleen de controle-record bekend."
Adding a domain
- Under Domeinnaam (domain name) type the host, for example
www.klant.be. Uppercase,https://and a path are stripped. - Click Domein toevoegen (add domain). "Domein toegevoegd."
Each hostname is its own domain: klant.be and www.klant.be are two entries, each with its own records. The first domain of a site becomes its primary domain. A hostname that another site already uses is refused ("Dit domein is al in gebruik.").
When the site is connected to Cloudflare, the platform attaches every domain you add to the Pages project as well (and removes it there when you delete it here). A failure there is shown as a warning; the domain itself is saved.
The records
Under every domain that is not connected yet, the dashboard lists the records, each value with a Code kopiëren (copy) button:
| Type | Name | Value |
|---|---|---|
TXT | _site-verify.<domain> | site-verify=<code> (unique per domain) |
A | <domain> | Each IPv4 address of the platform's server |
AAAA | <domain> | Each IPv6 address of the platform's server |
CNAME | <domain> | The host's address |
You get either the A/AAAA rows or the CNAME row, never both. The TXT record proves the domain belongs to the client; it is always required. A bare domain (klant.be) cannot carry a CNAME at most providers: use the provider's CNAME flattening or ALIAS record, which the check accepts (below).
The help line under the records reads: "Zet deze records bij de beheerder van de domeinnaam (DNS). Op Cloudflare: proxy uit (grijze wolk, "DNS only"), anders komt het certificaat niet door."
Example: a site on the platform's server
For klant.be and www.klant.be on the platform's server, the client's zone ends up with these entries (the code and the addresses are the ones the dashboard shows; the values here are placeholders):
_site-verify.klant.be. TXT "site-verify=3f9c…"
_site-verify.www.klant.be. TXT "site-verify=a71e…"
klant.be. A 203.0.113.10
klant.be. AAAA 2001:db8::10
www.klant.be. A 203.0.113.10
www.klant.be. AAAA 2001:db8::10Example: a site at its own host
For www.klant.be at a host that gave you klant.pages.dev:
_site-verify.www.klant.be. TXT "site-verify=a71e…"
www.klant.be. CNAME klant.pages.dev.Remove any other A, AAAA or CNAME record for the same name at the same time: a name with a CNAME cannot have other records, and leftover addresses make the check report "still pointing elsewhere".
Controleer records
Click Controleer records (check records). The dashboard looks every record up from its own server and reports one outcome:
| Outcome | Message | What to do |
|---|---|---|
| Connected | "… is gekoppeld." with the domain. The badge turns from Wacht op instellingen (waiting for settings) to Gekoppeld (connected). | Nothing. |
| Missing | "Nog niet gevonden: …. Een DNS-wijziging kan tot een uur duren." with the missing records. | Check the record at the DNS provider, wait, check again. |
| Still pointing elsewhere | "… wijst nog (ook) naar een ander adres. Verwijder dat oude record bij je domeinbeheerder." with the records concerned. | Remove the old A/AAAA record (often the previous host's or a parking page's). |
| Could not look up | "We konden … nu niet opvragen. Probeer het zo opnieuw." with the records concerned. | Try again in a moment. |
How it decides:
- TXT is the gate. The verification value must be among the TXT answers for
_site-verify.<domain>. - A and AAAA must contain the expected address, and no other address: a stray old address next to the right one counts as "still pointing elsewhere", because some visitors would land on the old server. IPv6 addresses are compared in canonical form.
- CNAME counts when the domain's CNAME is the host's address, or, for a bare domain with a flattened record, when the domain's IPv4 addresses overlap the host's.
- A lookup that fails never unverifies. "No such record" is an answer; a timeout or server failure is not. When a lookup fails the dashboard keeps the domain's current state, so a DNS hiccup can never take a working domain offline. Each lookup waits 2.5 seconds and is tried twice.
- A second click within ten seconds gets the same answer instead of new lookups.
When the state changes, the platform empties the site's caches, so canonical links and the noindex on the platform address follow at once. Once a domain is connected, its records and the check button are no longer shown.
The primary domain
A site with several domains has one Hoofdadres (primary address). Click Maak hoofdadres (make primary) on another domain to change it. Verwijderen (delete) removes a domain; the site is then no longer reachable there ("… is losgekoppeld.").
What "primary" does depends on the site:
- Hosted block sites: the verified primary domain becomes the canonical address. The platform address and other domains are served with
noindexand a canonical link to it, so search engines index one host. - Custom-code sites: your code takes its canonical, sitemap and Open Graph addresses from the Site-URL (Instellingen → Ontwikkeling, card Site), not from the domain list. Set the Site-URL to the primary domain (
https://klant.be) yourself, and before a production build that prerenders pages (SEO, performance and security headers).
www and the bare domain
Pick one spelling as the real address and redirect the other to it, path included, with a permanent redirect. The platform does not do this for a custom-code site; where it happens depends on the hosting:
- On the platform's own server: Caddy has an alias block per site that redirects the other spelling to the main address (
redir https://<main host>{uri} permanent). Set both hostnames' DNS to the server and add both as domains so both get verified. - At your own host or on Cloudflare Pages: add both hostnames there and configure the redirect in the host's domain settings.
Also add the second spelling as a domain in the dashboard so its records are checked.
Cloudflare DNS: grey cloud
When the client's DNS zone is on Cloudflare, set the site's records to DNS only (grey cloud), not proxied (orange cloud):
- the server (Caddy) or the host requests the TLS certificate for the domain itself, and the proxy gets in the way;
- the check compares the addresses the domain resolves to; behind the proxy those are Cloudflare's, so the domain reads as "still pointing elsewhere";
- the proxy caches HTML, and the publish webhook cannot purge Cloudflare, so published content would not show within seconds.
This is about the DNS records only; a Cloudflare Pages project behind a CNAME works as Cloudflare describes.
Moving a site to another host
The records follow Waar draait de website?. When a site moves (from your own host to the platform's server, or to another host):
- Get the site running at the new place first.
- Change Waar draait de website? (or connect or disconnect Cloudflare under Hosting & deploys). The records shown for domains that are not connected yet update at once.
- Change the
A/AAAAorCNAMErecords at the DNS provider. TheTXTrecord stays. - A domain that was already Gekoppeld shows no records and no check button any more; keep it, or delete and re-add it if you want the dashboard to check the new records.
Troubleshooting
| Symptom | Cause and fix |
|---|---|
Only a TXT record is listed | Waar draait de website? is not chosen yet (or the site is an external site, which the platform never serves). |
| Op de server van het platform is missing | The platform has no SITE_SERVER_ADDRESSES; the operator sets it. |
| "Still pointing elsewhere" right after switching | The old record is still there next to the new one, or the zone is proxied (orange cloud). |
| "Could not look up" keeps coming back | The domain's name servers do not answer the platform's lookups in time. Check the zone's delegation; the domain's state stays as it was meanwhile. |
| Connected, but the browser shows a certificate error | The certificate is requested once DNS points at the server or host; with a proxy in front it cannot be. Switch to DNS only and wait a few minutes. |
| Search results still show the temporary address | Set the Site-URL to the domain (custom code) or make the domain Hoofdadres (hosted), and make sure the site is set online (Online zetten). |
Checklist before switching DNS
- The site runs at its final host and answers on the temporary address (or on the server with
curl --resolve). - Site-URL, Webhook bij publiceren and Preview-URL point at the final domain.
- Waar draait de website? is set; every hostname is added.
- The
TXTrecord is in place for each hostname (it can go in days ahead). - Switch the
A/AAAAorCNAMErecords, DNS only. - Click Controleer records until every domain is Gekoppeld; remove stray old records when asked.
- Set the site Online zetten (set online):
robots.txtand the sitemap open up.
Staging addresses follow the same rules; the staging screen shows its own records (Staging).