Auditing Consent State Across Subdomains Without Losing the User's Choice
A choice made on the main site vanishes on the shop subdomain, so the banner returns and the tags disagree. Here is how consent state breaks across subdomains, and how to audit it.
Subdomains are where consent goes to get lost. The marketing site lives on one host, the shop on another, support on a third, each with the CMP installed slightly differently, and a cookie scoped to one host that the others cannot read. The visitor's experience is simple: they answered already, and the site keeps asking, while the analytics show consent states that contradict each other by subdomain.
An audit here is not a banner design review. It is a state audit: one identity, moving across hosts, with the recorded choice checked at each stop, and the tags compared against that choice on each property.
Related reading on this site: Free consent audit, Auditing Consent When Checkout Moves to a Third Party Page, Auditing Consent Banners on Mobile Layouts Where Space Runs Out.
Map the state, host by host
List every host the visitor can reach in one session, including checkout, accounts, help centre, and any regional storefront. For each one, record: CMP present, cookie name and domain attribute, whether the banner appears for a visitor with an existing choice, and a sample of which tags fire before and after a choice.
The domain attribute is the usual culprit. A consent cookie set as host only on www cannot be read by shop, and vice versa. The fix, setting the cookie on the registrable domain with the right path and security flags, is easy. Finding it requires exactly this table, because each subdomain passes its own isolated test perfectly.
Check the handoff in the middle of a journey
Test a real path: arrive on content, reject marketing, move to the shop, add to cart, check out, land on support. At each step, does the choice persist, does the banner stay away, do the tags match the choice. Breaks cluster at handoffs, especially where a checkout moves to a payments host or a single sign on flow crosses domains.
Also test the change path: update preferences on the support subdomain, return to the main site, and verify the new state took effect there. Consent that propagates in one direction only is half a system, and the half that fails is the half a complaint will sample.
Decide what to do with legacy cookies
Years of banners leave residue: old cookie names, old consent values in local storage, states that predate the current CMP. Decide, and document, whether legacy state is honoured, migrated, or discarded with a fresh ask, host by host. An undocumented mix means the same visitor is treated as consented in one place and unknown in another, indefinitely.
After the audit, keep one monitoring check: a scripted visit, weekly, that sets a choice on the main host and reads it back on the others. Subdomain consent breaks quietly after deployments, and a five minute automated walk catches the class of failure humans stop noticing.
Frequently asked questions
Why does a consent banner reappear on a subdomain?
Usually because the consent cookie was set as host only, so other subdomains cannot read it, or because the CMP is configured differently on that host. Each subdomain looks correct alone, which is why a cross domain test with one browser session is needed to find it.
What cookie scope lets subdomains share consent state?
The consent cookie generally needs its domain attribute set to the registrable domain, with appropriate path and security flags, so sibling subdomains can read it. Exact configuration depends on your CMP and security policy, and should be tested in production.
Should every subdomain show the same banner?
The experience should be consistent, but the key requirement is shared state, not identical pixels. A visitor's recorded choice and preferences must be readable and honoured on every host they reach in a session.
How often should cross subdomain consent be audited?
After any CMP, checkout, or domain change, and on a recurring automated check. Deployments on a single host are the common trigger for a break that only appears when a visitor crosses between subdomains.