Prooflytics
Analytics6 min read

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.

Concrete bridge connecting two separate landmasses representing cross-domain session continuity

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

  1. 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.
  2. 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.
  3. 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.
  4. The most common silent failure is a redirect between the two domains that strips the _gl parameter before the destination domain can read it - the configuration is correct, but the redirect breaks it in transit.
  5. 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.

Prooflytics

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 _gl linker 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.

Prooflytics

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