Question from Reddit user:
If you help me, I will be indebted to you forever and ever.
We are struggling with the Traffic Acquisition report in GA4 (dimension session default channel group).
The distribution of revenue looks correct for all channels, aside from Affiliates. We use the standard UTM convention for affiliate tracking.
However, the revenue from this source is getting distributed out across the other channels. This is strange because my understanding was this report should be essentially last non-direct attribution according to the guidance (essentially renamed as last organic / paid click in GA4).
What makes it stranger is when viewing the model comparison report, the revenue for affiliates looks correct. And when looking at just source / medium, it looks correct. But for some reason the traffic acquisition reports do not want to credit this channel, even though it was often the final click. Any ideas anyone?
I am convinced it is something straightforward I am missing. Thanks
Answer from Nabil:
The short answer is:
Your GA4 Traffic Acquisition report is misattributing affiliate conversions because, by default, GA4 uses the last non-direct click model, which often assigns the conversion to the final page the user visited before converting, which is frequently your website’s domain or a direct entry.
The core issue is that many affiliate programs use redirects, unique tracking URLs that might not contain the necessary UTM parameters, or a tracking code that doesn’t properly send the affiliate source, causing GA4 to fall back to generic attribution.
The only robust, permanent solution is to use a Server-Side Tracking architecture that captures the initial affiliate tracking parameters, stores them safely (often in a first-party cookie managed by a platform like Stape or Google Cloud Platform), and then ensures this crucial attribution data is explicitly included with the final conversion event sent to GA4.
The long answer is:
The misattribution you’re seeing is a common problem in affiliate marketing and highlights a fundamental difference between click-based affiliate tracking and GA4’s data-driven attribution model.
When a user clicks an affiliate link, one of two common tracking failures often occurs: first, the affiliate link might be a redirect chain that strips the referrer information before the user reaches your site, causing the session to be misidentified as direct
or unassigned
.
Second, even if you use UTMs, GA4’s model might later re-assign the credit to a different touchpoint that occurred closer to the conversion time, such as a brand search or a subsequent visit where the user typed the URL directly.
The excellent solution is to implement a Server-Side Tracking workflow using Google Tag Manager to capture the initial tracking parameters, a platform like Stape or Google Cloud Platform to manage the data, and the Google Analytics Data API for post-processing and validation.
Here is how it works: First, you use Google Tag Manager on the client side to capture any unique affiliate tracking identifiers (beyond just standard UTMs, which are essential but often insufficient) immediately when the user lands on your site.
Second, instead of letting the browser send all hits to GA4 directly, you route the data through a server-side container hosted on Stape or Google Cloud Platform.
In this server environment, you immediately store the full attribution data from the landing page in a strong, long-lasting first-party cookie or local storage, which overcomes browser-side tracking limitations.
Third, when the user finally converts, the server-side environment attaches the stored, original affiliate attribution data to the conversion event before sending it to GA4, guaranteeing the correct source
and medium
are present on the final purchase
or generate_lead
event, regardless of what happens in the browser or on intermediate pages.
Finally, while the GA4 interface reports the corrected attribution, you can use the Google Analytics Data API to build custom reports, which pull in the raw session and event data, allowing you to validate and audit that your server-side attribution logic is working perfectly and providing the accurate, permanent solution you need.