Cross-Domain Tracking in GA4
By default, a visitor who crosses from your marketing site to a checkout on a different domain starts a brand-new GA4 session - and the reporting side of that gap is a different fix from the tag-deployment side.
In short
GA4 keeps one session continuous across domains only when you list every domain under Configure your domains and the browser successfully appends the _gl linker parameter to outbound links between them. Get the domains list right and this reporting page's setup is done; if links are still decorated correctly but sessions still split, the break is usually a redirect hop or a browser stripping the parameter - not the GA4 configuration itself. This is the reporting half of cross-domain tracking; the tag-deployment half, for teams running GA4 through Google Tag Manager, lives on our GTM cross-domain tracking guide.
Why Sessions Split at the Domain Boundary
GA4's client ID and session are stored in a first-party cookie scoped to the domain that set it. The moment a user's browser navigates to a second domain, that cookie isn't visible - the new domain has no way to know it's "the same person, mid-visit" unless something tells it. Cross-domain measurement is that something: it appends a query parameter (_gl) containing the client and session IDs to outbound links, and the receiving domain's GA4 tag reads that parameter to pick the same session back up instead of starting fresh.
Setting It Up
| Step | Where | What it does |
|---|---|---|
| List every domain | Admin > Data Streams > web stream > Configure tag settings > Configure your domains | Tells GA4 which domains are one continuous experience, not separate sites |
| Enable Enhanced Measurement outbound clicks (if used) | Same tag-settings panel | Determines whether a click to a domain NOT on your list still fires an outbound_click event |
| Confirm the tag actually decorates links | gtag.js auto-decorates same-page links; a GTM-deployed tag needs the domains list set consistently on the Configuration tag | Decoration is what attaches _gl to the outbound URL |
What Still Breaks After Setup
- Redirect chains strip the parameter. A link that bounces through a URL shortener, an SSO redirect, or a marketing-automation click tracker before landing on the second domain often drops the query string somewhere in the chain.
- Third-party checkout isn't actually your domain. If checkout runs on a payment processor's own domain rather than a subdomain of your business, it typically isn't "cross-domain tracking" you want at all - see the referral-traffic guide for the distinction between "exclude as unwanted referral" and "add to the domains list."
- The two configuration surfaces disagree. A domains list set in GA4's UI and a different list set on a GTM-deployed Configuration tag can silently diverge if someone edits one and not the other.
- Consent state resets across the boundary. If consent isn't (or can't be) carried across domains, the receiving domain may not fire measurement at all until a fresh consent decision is recorded, independent of whether the linker worked.
Verifying this needs a live click, not a settings screenshot: open DevTools Network tab, click the actual cross-domain link, and confirm _gl= is present in the destination URL before it gets rewritten by the page's own routing.
Frequently Asked Questions
Do I configure cross-domain tracking in GA4 or in Google Tag Manager?
Both surfaces can set the domains list - GA4's own tag settings, or the GA4 Configuration tag's fields inside GTM if that's how the tag is deployed. They control the same underlying setting, so the practical rule is: whichever surface you use, make sure the two never disagree, and document which one is the source of truth for your setup.
Why does cross-domain tracking work on desktop but not in some mobile browsers?
Some mobile browsers and privacy-focused extensions strip query parameters more aggressively, including the _gl linker parameter, especially across a redirect. It's not a GA4-specific failure - it's the same category of parameter-stripping that breaks UTM tags in the same browsers.
Does cross-domain tracking fix referral traffic from my own domain?
Only if the referral was actually a broken cross-domain session. If the domain showing up as a referral is a payment gateway or third-party checkout you don't control as a continuous experience, that's a different setting - see our GA4 referral traffic guide for the distinction.
Sessions Splitting at a Domain Boundary?
We check the domains list, the actual link decoration, and any redirect chain in between - then fix whichever one is broken.
Get Cross-Domain Tracking FixedGet Cross-Domain Tracking Fixed
Tell us which two domains are involved and what you're seeing break.