GA4 Cross-Domain Tracking Setup: How to Stop Sessions From Splitting Across Domains
A visitor moving from your marketing site to a separate checkout or app domain looks like two different sessions to GA4 by default. Here is how to configure cross-domain measurement correctly, and the two mistakes that break it silently.
GA4 Cross-Domain Tracking Setup: How to Stop Sessions From Splitting Across Domains
GA4 treats a visitor moving between two different domains as two separate sessions by default, crediting a new session (and often a new traffic-source attribution) the moment they land on the second domain - even if it's the same business and the same continuous visit. Cross-domain measurement configuration tells GA4 which domains belong to the same user journey so a single visit stays one session across all of them.
Key takeaways
- By default, GA4 has no way to know that two different domains belong to the same business - a visit that crosses domains looks like a new session with a new (often self-referral) traffic source.
- Cross-domain measurement is configured per data stream under Admin > Data Streams > Configure tag settings > Configure your domains, listing every domain that should be treated as continuous.
- Once configured, GA4 automatically appends a linker parameter (
_gl) to outbound links between the listed domains, which carries session and client ID information across the domain boundary. - The most common silent failure is a redirect between the two domains that strips the
_glparameter before the destination domain can read it - the configuration is correct, but the redirect breaks it in transit. - The second common failure is simply forgetting to add a domain to the list - a subdomain-only setup left out of the domain list will split sessions even though the main domain is configured correctly.
Teams that see a spike in "(direct)" or self-referral traffic specifically at the point where visitors move from a marketing site to a checkout or app subdomain are almost always looking at a cross-domain configuration gap, not a real change in visitor behavior.
Cross-domain measurement: GA4 configuration that tells the platform which separate domains should be treated as one continuous user journey, preventing a session split when a visitor moves between them.
Linker parameter (_gl): the query parameter GA4 automatically appends to outbound links between domains configured for cross-domain measurement, carrying the session and client ID across the domain boundary.
1. Identify every domain in the actual user journey
Before touching any GA4 setting, map every domain a real visitor journey crosses - the marketing site, a separate checkout domain, a subdomain-hosted app, or a payment processor's hosted page the user is briefly redirected through. This step gets skipped more often than it should, because teams configuring cross-domain tracking usually think first of the two most obvious domains (marketing site and app) and miss a third domain in the middle of the journey, like a hosted checkout page on a payment provider's own subdomain.
The mismatch is easiest to spot on single-day reports and easiest to miss on weekly or monthly rollups that dilute the effect -- Why Your Marketing Numbers Don't Match Across Platforms explains why longer date ranges hide the problem.
2. Add every domain to the data stream's configured domains list
In GA4, go to Admin > Data Streams > select the relevant web stream > Configure tag settings > Configure your domains, and add every domain identified in step 1. This list is what tells GA4's own tag to treat traffic moving between these domains as a continuous session rather than a new one - a domain left off this list will still split sessions even if every other domain is configured correctly.
3. Confirm the linker parameter actually survives the domain transition
Once domains are configured, GA4 automatically appends a linker parameter (_gl) to outbound links pointing to any other domain on the list. Click through the actual user journey manually and check the destination URL for the _gl parameter in the address bar - if it's present on arrival at the second domain, the linker is working end to end.
Turn scattered analytics into one clear picture
Every source in one brief. The whole picture. Your decision.
14 days free · no credit card
4. Check for a redirect stripping the parameter in transit
If the _gl parameter is present on the outbound link but missing on arrival at the destination domain, a redirect somewhere in between is stripping it - a common but easy-to-miss failure, since the GA4 configuration itself is correct and shows no error. Any URL-rewriting redirect, load balancer, or third-party checkout hop needs to be checked specifically for whether it preserves query parameters through the redirect chain.
5. Verify with a real session, not just the Realtime report alone
Run the actual cross-domain journey once and confirm in GA4's Realtime report that the session ID stays constant across both domains, rather than a new session appearing at the moment of the domain switch. This kind of hands-on verification matters more than it might seem, since GA4's own processing lag means a subtle session-continuity bug can look fine in Realtime but still show up as split sessions once the full processed report catches up a day later.
Server-side tracking recovers signal lost to ad blockers, but it does not restore visibility into users who declined the ATT prompt at the OS level -- App Tracking Transparency's Predictable Blind Spot explains what server-side tracking does and does not fix.
A broken server-side GTM setup rarely produces an obvious error - dashboards keep populating with numbers, they are just incomplete or duplicated -- Server-Side Google Tag Manager: The Setup Mistakes covers how to actually verify it works.
What breaks cross-domain tracking after it's already working
The ICP problem this creates for teams that set this up once and consider it done: cross-domain tracking is fragile to changes made well after the initial setup, often by a different team that doesn't know the configuration exists.
A new redirect added later (a marketing team launching a new landing-page redirect, or an infrastructure change introducing a load balancer rewrite) can silently reintroduce the parameter-stripping failure even though the original GA4 configuration never changed. The same class of silent, downstream breakage shows up when UTM parameters get stripped by a privacy browser before they reach the site at all - in both cases, the tracking configuration itself is correct, but something in the delivery path removes the signal before it arrives. The practical habit: re-run the manual verification (steps 3-5) any time a redirect, domain, or infrastructure change touches the path between the configured domains, not just at initial setup.
Once cross-domain measurement is correctly configured and verified, Prooflytics ingests that already-unified GA4 session and conversion data through its own GA4 connection the same way it would for a single-domain property - there's no separate cross-domain-specific setup needed on Prooflytics' side once GA4 itself reports the journey as one continuous session.
Bottom line
- Map every domain in the real user journey first, including easy-to-miss third-party hosted pages, before touching GA4 configuration.
- Add every domain to Configure your domains, then manually verify the
_gllinker parameter survives the actual domain transition - don't trust the configuration alone. - Check specifically for a redirect stripping the parameter in transit - this is the most common silent failure after setup looks correct.
- Re-verify any time a redirect, domain, or infrastructure change touches the path between configured domains, not just at initial setup.
- Book a walkthrough to see how Prooflytics ingests already-unified GA4 session and conversion data once cross-domain tracking is correctly configured.
Frequently asked questions
Does cross-domain tracking work automatically once I add the domains?+
Mostly, but always verify manually - the domain-list configuration is necessary but not sufficient if a redirect between the domains strips the linker parameter in transit. Configuration without verification is the most common reason teams believe cross-domain tracking works when it actually doesn't.
What if one of my domains is a third-party checkout or payment page I don't control?+
Third-party hosted pages (a payment processor's checkout, for instance) often can't be added to your own GA4 configuration directly, since you don't control their tagging. Check whether the third-party platform has its own cross-domain or parameter-passthrough support, or accept that the payment step itself may show as a session break while the pre- and post-payment domains you do control still track correctly.
How do I know if self-referral traffic is a cross-domain problem or something else?+
Self-referral traffic (your own domain showing up as a referral source) concentrated specifically around the point where visitors move to a second domain you own is a strong signal of a cross-domain configuration gap. Self-referral traffic scattered without that pattern usually points to a different cause, like an internal link missing proper referrer handling.
Should I add every subdomain individually, or does the root domain cover them?+
Add every subdomain that's actually part of the user journey explicitly - GA4's domain configuration does not automatically infer that a subdomain should be included just because the root domain is configured, so a subdomain left off the list will still split sessions.
You can read independent reviews of Prooflytics on G2 and compare it to other marketing intelligence platforms in the category.
Turn scattered analytics into one clear picture
Every source in one brief. The whole picture. Your decision.
14 days free · no credit card
Continue reading
Server-Side Google Tag Manager: The Setup Mistakes That Break Tracking Silently
A server-side GTM container fixes real signal-loss problems, but a broken setup fails quietly - dashboards keep showing numbers, they are just wrong ones. Here are the mistakes that cause that, and how to actually verify a server container is working.
UTM Governance for Marketing Teams: The Complete Naming Convention Guide
When multiple people create UTM links without a shared convention, your attribution data fragments silently - same campaign, five different spellings, zero reliable reporting. Here is how to build and enforce UTM governance that actually holds.
Why Your Marketing Numbers Don't Match Across Platforms (It's the Timezone)
A campaign reporting 50 conversions in one platform and 47 in another isn't necessarily a tracking bug - each platform may be attributing the same conversions to a different calendar day. Here is how to find and fix a timezone mismatch before it wastes an afternoon of investigation.
How to Set Up GA4 Correctly in 2026: The Task Assistant Checklist
Google Analytics 4 now includes a Task Assistant that guides property setup through six structured categories, launched in May 2026. For marketing teams configuring a new property or auditing an existing one, this guide covers what each category contains, why it matters, and what the most commonly skipped steps cost you in data quality.