Navigating the Maze of Cross-Domain Tracking in Google Analytics 4

Well, hello there, fellow data lovers and trackers! Welcome to the wonderful, sometimes confusing, but ultimately rewarding universe of cross-domain tracking in Google Analytics 4, or GA4 if you want to sound like you’re in the know.

A figure crossing into another domain, generated by Bing Creator.

Now, if you’ve been spending sleepless nights trying to make sense of your data, pulling your hair out because the user journey on your analytics dashboard looks like a scattered jigsaw puzzle—hold onto your seats! Cross-domain tracking is basically the superhero you didn’t know you needed.

The Basics: What is Cross-Domain Tracking?

Alright, first things first. Cross-domain tracking means that your client and session identifiers stay the same when a user hops from one domain to another, provided those domains collect data to the same Data Stream in GA4. It’s like the VIP backstage pass at the international tea convention that lets you move seamlessly from one show to another, without losing your perks (like unlimited teabags and hot water).

If you’re using subdomains under a single domain, you’re in luck. GA4 writes cookies at the main domain level, so your subdomains are covered by default. How great is that? But here’s the nifty bit: cross-domain tracking adds a URL parameter to all outbound links from one configured domain to another. This parameter is like your backstage pass barcode, hashed from relevant identifiers.

Once the user lands on the new domain, that domain will pick up these identifiers and save them as new first-party cookies. Yes, we’re talking about an elegant handover from one domain to another. Smooth, isn’t it?

Setting it Up: Crossing the Great Domain

Alright, the official documentation explains how to set up cross-domain tracking, but let’s take a walk through the process anyway. First, you need to make sure that all domains involved are configured to the same Measurement ID. No wiggle room here, folks—this is essential.

Head over to your Data Stream settings in GA4 and click “Configure Tagging Settings.” Then click “Configure your domains.” Pop in any domain boundaries that you own and which you expect your users to encounter.

Don’t forget that you will need to have Google Analytics 4 added to all your sites, and that the measurement ID is the same for all your sites (this is the G-XXXXXXX that you see in your stream settings). If all is set up correctly, you should see a new URL parameter with _gl followed by a bunch of hashes on the domains you added in your stream settings, when you click on them on your site. These hashes are prefixed with cookie names like _gcl_aw, _ga, and others.

Here’s a protip: if you don’t see the _gl parameter in your browsers address bar after you click on one of these links, double-check your settings or, well, prepare for some troubleshooting. It could be an implementation mistake or something else messing with your automated link decoration. Dont forget to make sure your adblocker is off!

The Complexities: Multi-Property and Local Histories

Lets pause for a moment and talk about what happens when you’ve got multiple trackers or a rich history of data collected. Your existing cookies on the target domain will be overwritten. Yep, bulldozed by the new ones. What to do? You need to namespace those other trackers to protect them.

Sadly, GA4 only works with the default cookie name. So if you’re looking to preserve history, prepare for some awkward coding gymnastics. You’ll have to do some shenanigans to move the cookie value before the cross-domain linker kicks in. Not exactly elegant, I know.

Now, if you want to take things into your own hands and set up cross-domain tracking manually, prepare for some tedious work. For some baffling reason, there’s no built-in API in gtag.js or Google Tag Manager to manually generate the linker parameter.

You’ll need to write event listeners, prevent default actions, append values to URLs, and more. It’s like building a LEGO castle with a random assortment of pieces. And let me tell you, it’s a time-consuming process.

Final Thoughts

So there you have it, the joys of cross-domain tracking in GA4. It’s great that GA4 has simplified the setup through the user interface, but it still leaves much to be desired when you want manual control.

The biggest letdowns? There’s no way to protect your cookies from being overwritten on the target domain, and no way to manually generate the linker parameter. Both scenarios require manual work, which is never as polished as what automation could do.

The ball’s in your court, Google. We’re waiting for those updates. In the meantime, if you have questions or want to share your own setup stories, hit me up in the form below!

					if ('You Have Feedback' == true) {
  return 'Message Me Below!';
Picture of neobadger


I'm a Technology Consultant who partners with visionary people who want to solve human problems using data and technology (and having fun doing it)!


Want to dig a little deeper? Send me a message!
🎉 Nice work, that was a long article!