Many websites do not live at a single address. The blog sits on a subdomain, the shop on another, bookings go through an external service, payment happens on a provider's page. For the visitor it is a single journey; for analytics, unless configured, it is a set of separate pieces. The typical result is that conversions get attributed to the wrong channel and funnels break halfway.
Why sessions break
Analytics tools that use cookies recognise a visitor through an identifier stored in the browser. Cookies are tied to a domain: a cookie set on one domain cannot be read by a different domain. When the visitor moves from one domain to the other, the second one cannot find the identifier and creates a new one. For the tool, a new visitor has appeared, arriving from the first domain as if it were an external site.
Subdomains are a simpler case: a cookie can be set on the parent domain and shared across its subdomains. Many tools already do this by default, but it is worth checking.
Cookieless tools, which estimate visitors in aggregate, have the same problem in a different form: moving to another domain still produces a new visit with an internal referrer.
How to recognise the problem
The most common symptoms are these:
- your own domain appears among traffic sources, as if it were an external site sending you visitors;
- the payment service shows up as the channel with the most conversions, because the purchase is recorded on return from its page;
- the number of users is inflated compared with real people;
- funnels break exactly at the hand-off from one domain to another.
The second symptom is particularly harmful: it makes campaigns that actually work look useless, because the credit goes to the payment provider.
The solutions
| Situation | Typical fix |
|---|---|
| Subdomains of the same domain | cookie set on the parent domain |
| Different domains you own | pass the identifier in links between domains |
| External payment or booking service | exclude its domain from referral sources |
| External service that lets you install code | cross-domain configuration, if the tool supports it |
Passing the identifier works like this: when the visitor clicks a link to the other domain, the tool appends a parameter with the identifier to the URL; the landing page reads it and reuses it instead of creating a new one. Nearly all major tools offer this feature, enabled by listing the linked domains.
Referral exclusion
For external services where you cannot install anything, such as many payment pages, the minimum fix is to tell the tool not to treat that domain as a new source. That way, when the visitor returns to the site after paying, the session keeps being attributed to the channel they originally came from.
Mind consent and URLs
Two precautions:
- The identifier parameter appears in the URL. It should be removed from the address bar after it is read and must not end up in canonical versions of pages or in shared links. It must also be considered under consent rules: if the visitor has not accepted tracking, the identifier must not be passed.
- Every domain must have the same configuration of consent, tool version and measurement property. If one domain uses a different setup, the data will not join up anyway.
Verify
After configuring, the test is simple: in a private window, walk through the whole journey, from landing page to payment and back, watching in the browser's network tab that the identifier stays the same in every request. In the reports over the following days, your own domain should disappear from the sources and the payment service should no longer show up among the channels.
In short
- Cookies are tied to a domain: without configuration, every hand-off creates a new session.
- The typical symptom is your own domain or the payment service among traffic sources.
- For subdomains a cookie on the parent domain is enough; different domains need the identifier passed.
- Exclude external services where you cannot install code from referral sources.
- Respect consent, clean up URLs and check the whole journey after the change.