The ping came from our Southeast Asia team, about two months into their regional launch: paid attribution was dead, and had been the whole time. I opened the dashboard and it was worse than the message. Spend was flowing, credit wasn't. Organic had collapsed into direct. Every UTM we sent evaporated the moment a user crossed from the marketing site to the product domain. And here's the uncomfortable part: I can't tell you what share of traffic was misreporting, because the dashboard that would answer that question was the thing that was broken. Two months of paid budget, roughly $20,000 to $40,000 a month across mostly Google and LinkedIn, effectively unattributed.
This was PingPong, where I was Senior Digital Marketing Manager from 2023 to 2025 and ran tracking for the international sites. The SEA site was built by the regional team, and I did not hold access to their tag container until the second month. The fix, once I read the header script instead of the consent banner, took about an hour. The bug is one of the most common failures in multi-domain setups, but the way it got misdiagnosed is a pattern I keep seeing in marketing ops, so here's the anatomy.
The symptom: two months chasing cookies
The SEA team copied the North America Webflow site for the regional launch. Sensible move, about 80% of the site was reusable as-is. The tracking infrastructure lived in the other 20%, and within days three things broke at once:
- Paid campaign attribution failed across every campaign in the region.
- Organic traffic reported as direct, the channel split collapsed.
- UTM parameters vanished the moment users crossed from the Webflow marketing site to the separate product domain.
The team blamed cookies, and I'd have started there too: a new region means new consent rules, and blocked cookies produce exactly these symptoms, attribution vanishing, direct inflating. It's the right first guess. It just happened to be wrong, and it stayed the working theory for two months of consent-banner and storage-logic troubleshooting that never moved a number. The data died earlier in the tracking chain, and the cookie layer is just where the body surfaced. Meanwhile the marketing dashboard was blind: no campaign performance, no channel-to-customer attribution, no defensible story for the paid spend running against the region. We kept spending through the blind window and steered on platform-side numbers, because I judged going dark in a launch region to be the more expensive option.
The actual root cause
When access finally came through and I got into the setup, I saw it in minutes: the tracking code had been copied verbatim from North America, domain references and all. The header script still pointed at the North America subdomain, so the linker was faithfully bridging two domains that belonged to another region.
Architecture matters here. The Webflow site runs on AWS; the product portal lives on a separate domain and server. For attribution to survive that crossing, three things have to agree on which domains are actually in play:
- The linker. The mechanism that decorates outbound links with a session identifier so it crosses the domain boundary.
- The cross-domain configuration in the Google tag. The list of domains the tag treats as one property.
- The custom header code, which must reference the real regional subdomain for the launch it is running on.
All three were still configured for a different region. No amount of cookie consent work was ever going to fix that.
The one-hour fix
Once I'd named the root cause, repairing it felt anticlimactic. I made four changes in Google Tag Manager:
- Opened the Google tag's cross-domain measurement settings (the “Configure your domains” list) and replaced the North America entries with the pair that mattered here: the SEA marketing domain and the product domain.
- Verified the linker was firing: links out to the product domain now carried the _gl parameter, which is how the session identifier survives the crossing.
- Rewrote the header script with the correct SEA subdomain references and stripped the North America-only logic that had come along in the copy-paste.
- Confirmed the receiving tag accepted decorated links once I listed the pair. So the _gl parameter is read on arrival.
I can't show you a before-and-after percentage chart for the two broken months, that's what a blind dashboard costs you. What I can show you is the check I ran: click a tagged link, cross the domain, watch _gl appear in the URL and the UTMs land in the backend. Before the fix, that check failed every time. After, it passed every time. Paid campaigns started attributing the same day, and organic and direct separated back into distinct channels.
Keeping attribution alive across the handoff
During the rebuild I wrote a small piece of custom code to guard the marketing-site-to-product handoff, the exact seam where the data had been dying. It does four things:
- Captures an inviteCode parameter from the landing URL.
- Appends that code to every sign-up button and cross-domain redirect, so the identifier travels with the user.
- Falls back to a default organic_google attribution when no inviteCode is present.
That default has a cost: it also catches paid visitors whose UTMs get stripped by some future bug, and labels them organic_google. Which is wrong. I accepted that because the two failure modes aren't symmetric. A blank field disappears into direct and nobody asks about it for two months; a suspicious spike in organic_google is visible and queryable, and gets investigated within a day. The default gives the next bug a name someone will notice.
What I documented afterward
The fix took an hour. Making sure the next regional launch doesn't repeat the two months took a bit longer, and was worth more. The post-fix documentation I wrote covers:
- Linker setup and linker rules, step by step.
- Domain mappings and GTM configuration per region.
- Header code patterns and naming conventions.
- A cross-domain checklist to run before any regional site goes live.
- Validation steps: how to prove attribution survives the handoff before spending against it.
I made that documentation the baseline for the international sites I ran tracking for, and it changed how regions collaborate: the checklist is now the conversation, and the regional launches after this one ran it before going live.
If your UTMs disappear between domains
Check these before you touch the consent banner:
- The “Configure your domains” list in your Google tag settings, does it name the domains you run, in this region?
- The _gl parameter, does it appear on links crossing to the second domain? If not, the linker isn't firing.
- Copied header scripts, do they reference the real subdomain, or the one they were copied from?
- The handoff itself, does anything explicitly carry attribution across, or does the setup silently assume the linker alone will?
All four were wrong at once, and each one takes under an hour to check.