How to Stop GA4’s (not set) Traffic with Cross-Domain UTM Fix

Conversion tracking in GA4 not pulling UTM parameters accurately since 1 Dec

Our GA4 account has not been pulling any conversion data since 1 December. We use cross-domain tracking installed via gtag code.

I contacted Google Support via email about this and they recommended revisiting the UTM Parameters. All the parameters have been checked and are consistent in that they following the standard conventions and were created using this link builderΒ https://ga-dev-tools.google/ga4/campaign-url-builder/

When testing with GTM, the ‘create account’ trigger fires and can be seen in real time reports but it is then not attributed to any ‘session campaign’ or other UTM parameters. Google Support also recommended installing the gtag to the page after the trigger is fired but this has not resolved the problem. Are there any other suggestions?

The short answer is:

How does server-side tagging prevent UTM parameters from being stripped during a redirect?

Your issue is highly likely a result of client-side tracking limitations where the UTM parameters and the critical cross-domain linker parameter (_gl) are being stripped from the URL during redirects or by browser privacy enhancements before the GA4 script can read them on the destination domain, causing the session_campaign to be (not set).

The solution is to transition your tracking to a Server-Side Google Tag Manager (sGTM) container, hosted on a service like Stape or Google Cloud Platform (GCP), and implement the Google Analytics Measurement Protocol to send event data directly to GA4.

This allows you to process and persist campaign and cross-domain data server-side, making your tracking more resilient to client-side issues.

For retroactive analysis and deep diagnostics, you should also leverage the Google Analytics Data API or BigQuery API to programmatically query and inspect raw event data, bypassing the reporting interface’s aggregation logic to confirm the presence of UTM data at the event level.

The long answer is:

The problem you’re experiencing, where the ‘create account’ event fires but the attribution data (session_campaign and other UTMs) is missing, is a classic symptom of the fragility of client-side tracking, particularly in a cross-domain environment with redirects or the firing of the GA4 tag happening too late.

While your UTM parameters follow convention, the client-side gtag code relies on the browser environment to maintain the query parameters throughout the user journey, including the critical _gl linker parameter that stitches sessions across your domains.

When a redirect occurs, or a JavaScript function interrupts the navigation, or increasingly with browser-level privacy features, these query parameters are often stripped, leading to a loss of session context and the subsequent ‘not set’ attribution in your GA4 reports.

The recommended solution from my expert perspective is to move to a server-side tagging architecture using Google Tag Manager (GTM) in conjunction with a cloud platform like Stape or GCP.

This is a cost-effective, durable problem-solving capability because it shifts data processing and cookie management to a robust, first-party server environment that you control, bypassing most client-side restrictions.

The core of this solution involves setting up a server container in GTM and using the Google Analytics Measurement Protocol to receive the raw client-side hit, extract all necessary parameters including the UTMs and the _gl linker, and then forward a clean, attributed event payload directly to the GA4 endpoint from the server.

By hosting your sGTM container on a service like Stape, you serve the tagging script from your own sub-domain, making it first-party and significantly reducing the likelihood of ad-blockers or browsers stripping the crucial tracking data.

In this server environment, you can inspect the incoming request for UTM and _gl parameters, transform the data, and explicitly set the correct traffic source dimensions before sending the event to GA4, ensuring attribution persists even if the browser subsequently strips the URL parameters.

Furthermore, to diagnose the exact point of failure for your historical or current data, you should utilize the BigQuery API to access your raw GA4 event data in BigQuery, assuming you have the GA4 to BigQuery export enabled.

This allows you to run SQL queries to join conversion events with session_start events and inspect the raw event parameters (page_location for UTMs) for every hit, which provides a level of forensic detail impossible in the standard GA4 interface, helping you pinpoint if the parameters are making it to the collection endpoint at all.

This combination of server-side data collection and programmatic data analysis via the Google Analytics Data API (for aggregated reporting) or BigQuery API (for raw, granular data) represents the most comprehensive and future-proof solution for maintaining accurate cross-domain attribution and eliminating the frustrating (not set) traffic in your reports.

About The Author