A customer clicks your Google ad, lands on your site, adds an item, then jumps to a payment gateway to pay and comes back to a thank-you page. To you, that’s one person and one journey. To GA4 with broken cross-domain tracking, it’s two visits — and the sale gets credited to the payment gateway, not the ad that actually earned it.
This is one of the quietest tracking faults we see at ZenWeb across 500+ Malaysian client accounts. Any business that sends visitors to a second domain — a separate checkout, a booking vendor, a store on its own address — is exposed. When cross-domain tracking is broken, your reports look busy but wrong, and every digital marketing decision built on them inherits the error.
The good news: this is a setup problem, not lost data. Once GA4 knows your domains belong together, one journey stays one journey. This guide shows the signs, the cause, and the fix. The short video below is a useful primer before we dig in.
Source video: MeasureSchool on YouTube
Cross-domain tracking is the setting that tells GA4 two or more of your web addresses belong to the same business. With it on, a person who crosses from your site to your checkout domain is counted once. With it off, GA4 sees a stranger arriving at a new site and starts the clock again.
That single gap is what produces split sessions. The visit isn’t deleted — it’s cut in half, with the second half wrongly credited to your own site. If your other reports already look off, this often sits alongside a GA4 property that shows no data, because both come down to a tag that isn’t sending what you assume it is.
Quick Answer: The clearest sign is your own domain appearing in your traffic sources as a referral. Others include session and user counts higher than reality, conversions credited to a referral instead of the ad or search that drove them, and engagement time that looks oddly low. Any one of these points to split sessions.
Broken cross-domain tracking rarely throws an error. It just quietly bends the numbers, so the problem hides until you go looking. The chart below shows how often each symptom turns up when we audit a Malaysian account that hands visitors to a second domain.
| Symptom | Share of affected accounts |
|---|---|
| Own domain listed as a referral (self-referral) | 68% |
| Session count higher than real visits | 54% |
| Conversions credited to a referral, not the real source | 47% |
| Average engagement time looks unusually low | 39% |
| User count higher than reality | 33% |
Source: ZenWeb audits of Malaysian SME GA4 accounts with a second domain, 2024–2026.
The self-referral at the top is the tell-tale one. When your checkout domain reports your main site as the “source” of a sale, GA4 has lost the real origin. That’s the same distortion behind a bloated Direct or Referral line, close cousin to the way broken UTM links push campaigns into the wrong bucket.
Not sure if your numbers are split?
A quick audit shows whether one journey is being counted as two before you touch a setting. See how our digital marketing team fixes tracking →
Quick Answer: GA4 identifies a visitor with a first-party cookie that is tied to one domain. When the person moves to a second domain, that cookie can’t be read, so GA4 creates a new ID — a new user and a new session. The second domain then records your first site as the referrer, which is the self-referral.
Google explains the mechanism plainly. Without cross-domain measurement, GA4 makes fresh cookies with new IDs for each domain a visitor lands on, so one person across two addresses is counted as two users and two sessions. With it on, the same IDs are carried across in the URL, so the journey stays whole. That is the core of Google’s cross-domain measurement guidance.
Here is what actually happens at the hand-off point:
Cross-domain measurement solves this by passing the IDs between domains through a _gl linker parameter in the link URL, so both domains agree it’s the same visitor.
Quick Answer: Any setup that sends visitors to a different root domain needs cross-domain measurement — a payment gateway, a booking vendor, a store on its own address, or campaign pages on a builder. Staying on one domain with one GA4 tag needs nothing. Subdomains sometimes need it, depending on their cookie setup.
Most Malaysian SMEs hit this the moment they add a checkout or booking step that lives somewhere else. The table below sorts the common setups by whether they need cross-domain measurement switched on.
| Setup | Typical second domain | Needs setup? |
|---|---|---|
| Checkout on a payment gateway | iPay88, Billplz, senangPay, eGHL | Yes |
| Booking or appointment tool | A vendor’s booking domain | Yes |
| Separate online store | A Shopify or marketplace domain | Yes |
| Campaign landing pages | A page-builder domain | Yes |
| Subdomain with its own cookies | shop.yoursite.com | Sometimes |
| One root domain, one GA4 tag | yoursite.com only | No |
Source: ZenWeb client setups across Malaysian SME accounts, 2024–2026.
The pattern is simple: if a sale or lead completes on a web address different from where it started, you need cross-domain measurement. E-commerce stores feel this hardest, which is why it often shows up next to e-commerce tracking that’s broken in GA4 and losing sales from the report.
Quick Answer: Fix it in GA4 Admin: confirm both domains use the same tag, open Configure your domains under your web stream’s tag settings, add every domain, then clear any self-referrals and test that the _gl parameter carries across. It takes a few minutes once the same tag is on every page.
You don’t need code for the standard case — GA4 handles it from the interface. Work through these steps in order, and confirm the last one before you trust the data.
Follow these five steps, checking each before moving on.
_gl parameter. If it’s missing, a redirect or script is stripping it — fix that before you rely on the numbers.If the test link never carries the parameter, it’s often the same silent failure that leaves a GA4 property showing no data. Confirm one clean hand-off first; everything else builds on that.
Quick Answer: Split sessions inflate session and user counts, hide the real source of conversions behind a self-referral, and pull conversion rates down on the channels that actually work. The fix doesn’t just tidy the numbers — it moves credit back to the ads and searches that earned the sale.
To see why this matters for budget, picture 100 real people who each cross to a second domain to pay. The table compares what the report shows before and after cross-domain measurement is fixed.
| Metric | Before fix (broken) | After fix |
|---|---|---|
| Sessions for 100 journeys | ~150 | ~100 |
| Your domain in top sources | Appears as self-referral | Gone |
| Sales credited to the real source | About half | Nearly all |
| Reported users vs actual | Overstated | About right |
Source: Illustrative scenario modelled on ZenWeb account clean-ups, Malaysia, 2024–2026.
The “sales credited to the real source” row is the one that costs money. When only half your sales point to the channel that drove them, you under-fund your winners and over-fund the self-referral. That’s the same misread that makes people chase the wrong fix when campaign links stop reporting cleanly.
Want the credit back on your real channels?
We rebuild GA4 so every sale traces to the ad or search that earned it. Get your tracking fixed properly →
Quick Answer: Attribution accuracy climbs sharply as the setup gets more complete. Just adding your domains lifts it well past a broken baseline; adding redirect-safe links and clearing self-referrals takes it close to full. The gain is not gradual busywork — most of it lands in the first proper configuration.
Fixing cross-domain tracking isn’t one switch — it’s a short ladder, and each rung recovers more of the truth. The chart below shows how correct attribution improves as the setup tightens.
| Setup level | Journeys attributed correctly |
|---|---|
| No cross-domain setup | 45% |
| Domains added to the data stream | 72% |
| Domains added + redirects keep _gl | 88% |
| Full setup, tested, self-referrals cleared | 96% |
Source: Illustrative scenario modelled on ZenWeb account clean-ups, Malaysia, 2024–2026.
The jump from the first rung to the second is the biggest, which is why even a basic setup is worth doing today. When attribution is accurate, you stop guessing which channel earned a sale — and you diagnose the right problem instead of blaming the wrong one, the way a clear head helps when rankings drop suddenly and you need the real cause fast.
Quick Answer: Adding your domains and testing the _gl parameter is well within reach for most teams. Bring in help when the second domain is a third-party tool you can’t fully tag, when redirects keep stripping the parameter, or when the tracking feeds Google Ads and dashboards you make spending decisions on.
You don’t need an agency for the standard setup. Use this rough line to decide when it’s worth outsourcing:
_gl parameter, or the data feeds ad bidding and reporting you can’t afford to get wrong.The stakes rise once real budget rides on the numbers. If split sessions feed a dashboard or an automated bid strategy, the error doesn’t just misreport — it trains decisions on the wrong signal. That’s where our digital marketing team most often steps in, wiring every domain into one clean view you can act on.
Broken cross-domain tracking is almost never a broken GA4 — it’s a missing setting. When your site hands a visitor to a payment gateway, booking tool, or separate store, GA4 needs to be told those domains belong together, or it splits one journey into two and credits the second half to your own site.
Start simple: put the same tag on every domain, add them all under Configure your domains, clear any self-referrals, and test that the _gl parameter carries across. Do that and your reports finally show one visitor as one person, with the sale credited to the channel that earned it. If you’d rather have it set up and verified for you, the team at ZenWeb does exactly that.
The clearest sign is your own domain appearing as a referral in your traffic sources. You may also see session and user counts higher than your real visits, conversions credited to a referral instead of the ad or search that drove them, and engagement time that looks unusually low. Together, these point to one journey being split into two sessions.
Because the visitor crossed to a second domain that couldn’t read the first domain’s ID cookie, so GA4 started a new session and logged your site as the source. This self-referral means the real origin — your ad, search, or social click — is lost. Adding your domains to cross-domain measurement stops it.
In GA4 Admin, open Data streams, click your Web stream, choose Configure tag settings, then Configure your domains. Add every domain the visitor travels across and save. Make sure the same GA4 tag is on all of them first, then test that a link to the second domain carries the _gl parameter.
Yes. Cross-domain measurement only works when every domain loads the same GA4 tag with the same “G-” ID from one web data stream. If your checkout or store runs a different property or tag, the IDs can’t be shared, and the journey will keep splitting no matter what you configure.
No. GA4 doesn’t reprocess history, so past split sessions and self-referrals stay as they were recorded. The fix applies from the moment you set it up, so the sooner you configure your domains, the sooner your reports become accurate. Treat older data as a rough guide, not a clean baseline.
Sales landing on your own domain instead of the real source?
Book a free 30-minute session — we’ll check your cross-domain setup, clear the self-referrals, and get every journey counted once so your reports finally credit the channels that earn the sales.
Complete the form and our team will contact you to discuss your goals. Let’s grow your business.

Online