GA4 treats each domain as a separate visitor session by default, which means a visitor moving from your main site to a separate checkout domain, or between two related domains you operate, looks like two different people arriving from two different places — cross-domain tracking tells GA4 to treat that journey as one continuous visit instead.
Why this only matters if visitors genuinely cross domains
If your entire site, including checkout, lives on one domain, this configuration has nothing to do and isn’t needed — it specifically solves the problem of a visitor’s session appearing to restart when they move between two separate domains you actually control, such as a main site and a subdomain-free checkout or partner platform.
Cross-domain tracking configuration
Visitors moving between your own domains tracked as one visit, not counted as two separate people.
- Full backup taken before we start
- If we can’t fix it, you get your money back
- We never ask for your own password
What we need from you
- Confirmation of every domain involved in a single visitor journey
- Access to the GA4 property covering these domains
- Whether Google Tag Manager is already in use across these domains
This or something else?
| Visitors moving between two or more of your own domains show as separate sessions | This fix covers it |
| Your entire site and checkout are on one domain | Not needed; this doesn’t apply to your setup |
| You want subdomains (like a blog on a subdomain) treated as one property | Often already handled by default GA4 behaviour; worth confirming first |
| You’re tracking referral traffic incorrectly, not cross-domain sessions | Referral exclusion & self-referral fix, a different problem |
What we do
- Confirm every domain involved and how visitors actually move between them
- Configure cross-domain measurement in the GA4 property settings
- Update Tag Manager or direct tag configuration to pass the necessary linking parameters
- Test the full cross-domain journey and confirm it appears as one session
- Verify existing single-domain tracking isn’t disrupted by the change
- Document the configuration for future reference
What is included
- Verified single-session tracking across the domains you specified
- Existing tracking confirmed unaffected on each individual domain
- Testing across the actual visitor journey involved
- A written note on the configuration
Not included
- Setting up GA4 itself, if not already connected — a prerequisite
- Cross-domain tracking for domains added after this fix, quoted separately
- Fixing unrelated data accuracy issues found during testing
- Ongoing adjustment as your domain structure changes
Questions about this fix
How do I know if I actually need this?
If visitors genuinely move between two domains you control as part of one journey — like checking out on a separate domain — you likely do; if everything lives on one domain, you don't.
Will this merge historical data from before this was set up?
No — it changes how future sessions are measured going forward; past data recorded as separate sessions stays as it was recorded.
Does this work the same with Google Tag Manager as without it?
The underlying goal is the same, though the specific configuration differs slightly depending on whether GTM or direct GA4 tags are in use — we configure it correctly either way.
Could this accidentally merge data from an unrelated domain I don't want included?
Only if that domain is deliberately included in the configuration, which is exactly why we confirm the full, correct list of domains with you before setting anything up.
What if I add a new domain to my setup later?
It would need to be added to this configuration specifically — cross-domain tracking only covers domains explicitly included in the setup.
Related fixes
If this is the second time this year
A bad update breaking the site is a symptom of updates not being tested first. Care plans run every update on a staging clone before it reaches your live site, which is the actual fix for this happening again.
Your access, your rules
Create a separate admin account for us and delete it when we are done. For anything else, we get in touch and agree a method — never a form field on this site, never by reply to an email.
We back up first, always
Before anything is touched we take a full backup and keep it for 30 days. If a fix goes wrong, we put the site back exactly as it was.
If it is not what you bought
If the problem turns out smaller than what you ordered, we refund the difference. If it is bigger, we stop and send a quote before doing any extra work.
If we cannot fix it
You get back what we received. Diagnosis is on us — you only pay when the problem is actually solved. The payment processor takes its fee before the money reaches us, so we never hold it and it is not ours to return. That is true here as everywhere else.
If it comes back
Reply within seven days of delivery and we put it back on the bench at no cost. The fix is not finished until it holds.
What we are responsible for
If something goes wrong with a fix, our responsibility is limited to what you paid for it. We take a full backup first so mistakes can be undone, and we tell you before doing anything outside what you bought.