Drop GAds traffic and Consent Mode V2: all my conclusions
In this article I want to share my tests and my conclusions about Google Consent Mode V2
Two weeks ago I wrote a post asking for help to everyone worked with Google Ads remarketing.
First of all I want to say thank you for all community that responded to me..
I believe in karma and now it's the my turn to share my experience.
Why did I create this post?
Because after implementing v2 consent mode some customer feedback I saw a drop on the Gads audience.
Note: I'm working A LOT with GTM Server-Side. We are partner of Stape.io (hi Denis Golubovskyi ) and we highly recommend this service, so the 95% of our GAds tracking works with server-side.
Before go ahead with all our tests and considerations, we need to explains some important concept (if you already know them, please skip forward to "The Google Consent Mode parameters in the GA4 and GAds hit" paragraph)
The Google Consent Mode V2
As you probably know since 7th March the Digital Market Acts is applied and it means if you want to use Google Ads you must implement Google Consent Mode V2.
What is Google Consent Mode V2? This is a short video:
You can use a Google-certified consent management platform
Here an example.
<script>
// Define dataLayer and the gtag function.
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
// Set default consent to 'denied' as a placeholder
// Determine actual values based on your own requirements
gtag('consent', 'default', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'analytics_storage': 'denied'
});
</script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=TAG_ID">
</script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'TAG_ID');
</script>
<!-- Create one update function for each consent parameter -->
<script>
function consentGrantedAdStorage() {
gtag('consent', 'update', {
'ad_storage': 'granted'
});
}
</script>
<!-- Invoke your consent functions when a user interacts with your banner -->
<body>
...
<button onclick="consentGrantedAdStorage">Yes</button>
...
</body>
You can enable Consent Mode V2 in basic and advanced mode.
Basic = block all service if the consent is denied
Advanced = GAds conversions and GA4 hits will send without identifier parameters if the consent is denied
Consent Mode V2 advanced in a nutshell
If you want to use GAds Conversion, you must send 2 new parameters
Of course the thing is: Google wants always the conversion.
Wait a minute... what about the remarketing hit?
Answer: It only works if the user has given consent.
Simple. Easy. Crystalline
The official documentation about the Google Consent Mode parameters
How the official documentation explains these new parameters in Google Ads?
Let's see it together
Tag Manager documentation
This is the Tag Manager documentation: https://support.google.com/tagmanager/answer/13695607?hl=en
Important note:
Disabling personalized advertising using allow_ad_personalization_signals, yields the same results as using ad_personalization. If you set both parameters with conflicting values, personalization is disabled. To honor user choices, implement ad_personalization.
So now we have 2 parameters for the ad personalization:
If you use together, take care about their values, if they are in conflict the value is denied
Google Ads documentation
This is the Google Ads documentation:
SPOILER ALERT: The documentation never mentions the new ad_personalization parameter but only the "old" parameter allow_ad_personalization_signals
In this first piece of documentation Google Ads tells me how to use allow_ad_personalization_signals to disable the ad personalization
The great key: this parameter IS TRUE BY DEFAULT.
This parameter doesn't disable the Google Ads Conversion (yeah, makes sense).
A code example to understand how to set up the false value. And if you use Google Tag Manager... there isn't the parameter or a configuration to handle allow_ad_personalization_signals.
You can do it only with Google Tag.
The small problem... this parameter is only valid for this hit and will not be handled by the next Google Ads Tags triggered after.
Ok.
But what about ad_personalization parameter? Is the same thing explained in the Tag Manager documentation?
Answer: boh, I don't know (for now).
So let's go to the next step.
The Google Consent Mode parameters in the GA4 and GAds hit
In the Consent Mode V2 we have a lot of parameters
The npa (Non Personalized Ads)
The most important parameter is npa
Do you remember the allow_ad_personalization_signals and ad_personalization conflict value? Great. If they have not the same values npa is 1 (no, this is no good for you).
PS: I don't know why Google loves the negative parameters (like non-interaction hit for GA3), but that's how it works.
The gcs (Google Consent Status)
The gcs is the Consent Mode parameter for the analyitcs and Ads storage
for more details: https://support.google.com/analytics/answer/9976101
gcd (Google Consent Default)
The gcd is one of the new parameters of Consent Mode V2. There are a lot of articles that explain the values (read this article of Simo Ahava and 📊 Markus Baersch).
So we know what meaning of the value (for example gcd=11v1v1v1v5), but not the last value (in this case 5).
Gianluca Campo shared a really useful post about gcd: https://www.linkedin.com/posts/gianluca-campo_ga4-googleanalytics-analytics-activity-7162885977299005440-BSoJ
I want to say thanks to David Vallejo for the tool https://consentcheck.analytics-debugger.com/ and the chat at the last MeasureCamp Italy
PS: there some news about gcd parameters: https://www.linkedin.com/posts/david-vallejo-sanz_so-it-seems-google-analytics-changed-again-activity-7181232727411560448-a7Aa
Ok, what the meaning of the last value?
The David answer: ads_signals
These are the values
Please keep in mind the number 5 and 6, they will use in the next step.
Ok, now we have all elements to understand our tests.
First drop case: No Consent Mode V2 implemented
If you have a great drop in GAds remarketing, than 99% you don't use the Consent Mode v2.
There are no many things to share: you have to implement Consent Mode v2
Real case: the hits drop in GAds report
In this case we have some feedback of our clients (because all clients after Consent Mode check the GA4 and GAds reports!)
All Google Ads Tag have a drop on the last 3/4 days.
Ok, we have a drop case after implementing Consent Mode V2.
Could it be related to the implementation?
We can test it :)
In this specific case we have the Google Ads client side tracking with GTM. We use the GTM Google Ads Tag to handle remarketing.
If we check the hit we can see:
We have the GTM Server-Side also with the dynamic remarketing.
If we check the hit we can see:
So what are the differences?
The parameter is 6 with the server-side because we use the hits of GA4 and work correctly with the parameter of the google signal.
The question is: is the 5-parameter Google Ads Remarketing working (despite the things previously highlighted in the various guides)?
The answer is: NO
If we drill down to ecomm_ parameters we can see the hits.
So, the final parameter of gcd doesn't block the Google Ads hits. The important parameter is npa=0
Ok, and the allow_ad_personalization_signals can be set true in Google Tag?
The answer is yes if you use: allow_ad_personalization_signals : true
Buy by default or if you don't explain the value in gtag script the final value is always 5.
We realized that this parameter does not affect the remarketing of Google Ads and no longer need to manage it.
But... why is there a DROP in the Google Ads tag remarketing?
I waited a few days with many tests in different accounts... and this is the answer.
This is the first day, please take a look the 40k horizontal line
As you can see it seems a UI delay in this specific report.
Before was under 40k, on the March 19th we have 45,570.
Let's check the next days:
On the March 22th the number increases to 55,134.
So there is a 4/5 delay days.
If we check the segment we don't have the drop.
After few days we can say: it's only a delay
Cool. So it was a false alarm.
Mmm yes, but I found another interest thing
The data parameter in the hit
Our client asked us to understand why there is a drop anyway. In January the hits were about 150k.
In fact, looking at GA4 hits and user ratings, we should have a lot more hits.
We understood that there is a delay, so we just look 4/5 days back to understand the real number of hits.
We tried client-side and server-side but the problem remains. We decided to use server-side (of course).
We analyze the results on the browser and noticed that for standard remarketing (not dynamic) there was actually a problem.
This is the Gogole ads dynamic remarketing of view_item_list.
We have the &data=event%3Dview_item_list[...]
https://googleads.g.doubleclick.net/pagead/viewthroughconversion/11940439905/?random=1044014013&fst=1710924360697&cv=10&fmt=3&bg=ffffff&guid=ON&u_w=1920&u_h=1080>m=45j91e43e1v890374961z8812529564z9896602627za200&url=https%3A%2F%2Fwww.example.com&ref=https%3A%2F%2Ftagassistant.google.com&item=(26.99*1*it_163482**)(19.99*1*it_164103**)(24.99*1*it_164300**)(39.99*1*it_165279**)(27.99*1*it_165292**)(24.99*1*it_165326**)(19.99*1*it_164446**)(44.99*1*it_164493**)(29.99*1*it_164012**)(49.99*1*it_164621**)(29.99*1*it_164697**)(29.99*1*it_164092**)(19.99*1*it_162637**)(14.99*1*it_162630**)(24.99*1*it_162269**)(29.99*1*it_162246**)(19.99*1*it_163166**)(14.99*1*it_163157**)(19.99*1*it_163605**)(23.99*1*it_161657**)(19.99*1*it_164203**)(14.99*1*it_164424**)(24.99*1*it_164542**)(24.99*1*it_164533**)(19.99*1*it_164686**)(49.99*1*it_162410**)(49.99*1*it_162405**)(59.99*1*it_162407**)(24.99*1*it_163833**)(34.99*1*it_163330**)(39.99*1*it_163321**)(39.99*1*it_163325**)(29.99*1*it_163327**)(34.99*1*it_163705**)(47.99*1*it_161563**)(24.99*1*it_164148**)(39.99*1*it_164128**)(49.99*1*it_164900**)(24.99*1*it_156028**)(24.99*1*it_155775**)(16.99*1*it_161810**)(39.99*1*it_161805**)(19.99*1*it_162758**)(24.99*1*it_156797**)(24.99*1*it_156796**)(19.99*1*it_144160**)(24.99*1*it_159950**)(12.99*1*it_163904**)&data=event%3Dview_item_list%3Bgoogle_business_vertical%3Dretail%3Bid%3Dit_163482%2Cit_164103%2Cit_164300%2Cit_165279%2Cit_165292%2Cit_165326%2Cit_164446%2Cit_164493%2Cit_164012%2Cit_164621%2Cit_164697%2Cit_164092%2Cit_162637%2Cit_162630%2Cit_162269%2Cit_162246%2Cit_163166%2Cit_163157%2Cit_163605%2Cit_161657%2Cit_164203%2Cit_164424%2Cit_164542%2Cit_164533%2Cit_164686%2Cit_162410%2Cit_162405%2Cit_162407%2Cit_163833%2Cit_163330%2Cit_163321%2Cit_163325%2Cit_163327%2Cit_163705%2Cit_161563%2Cit_164148%2Cit_164128%2Cit_164900%2Cit_156028%2Cit_155775%2Cit_161810%2Cit_161805%2Cit_162758%2Cit_156797%2Cit_156796%2Cit_144160%2Cit_159950%2Cit_163904%3Bga_session_consent_mode%3Dtrue%7Ctrue%7Ctrue%3Bsite_lang%3Dit%3Bgtm_utm_source%3D%3Bgtm_utm_medium%3D%3Bgtm_utm_campaign%3D%3Bgtm_gclid%3D%3Bsite_type%3Dd%3Bgtm_utm_content%3D%3Bgtm_utm_term%3D%3Bpage_type%3Dhomegenere&userId=&us_privacy=1---&auid=1206575893.1710496165&uaa=x86&uab=64&uafvl=Chromium%3B122.0.6261.129%7CNot(A%253ABrand%3B24.0.0.0%7CGoogle%2520Chrome%3B122.0.6261.129&uamb=0&uam=&uap=Windows&uapv=10.0.0&uaw=0&gdid=dMWZhNz&dma=1&dma_cps=sypham&npa=0&gcs=G111&gcd=13v3v3v2v6&pscdl=noapi
In the Standard Remarketing we have this hit:
https://googleads.g.doubleclick.net/pagead/viewthroughconversion/11940439905/?random=1431885296&fst=1710924360631&cv=10&fmt=3&bg=ffffff&guid=ON&u_w=1920&u_h=1080>m=45j91e43e1h1v890374961z8812529564z9896602627za200&url=https%3A%2F%2Fwww.example.com%3Fgtm_debug%3D1710923946046&ref=https%3A%2F%2Ftagassistant.google.com&data=gtm_referrer%3Dhttps%3A%2F%2Ftagassistant.google.com%2F%3Bgtm_date_now%3D1710924354805%3Bga_session_consent_mode%3Dtrue%7Ctrue%7Ctrue%3Bsite_lang%3Dit%3Bevent_id%3D1702631862799_17109248990332440%3Bgtm_utm_source%3D%3Bgtm_utm_medium%3D%3Bgtm_utm_campaign%3D%3Bgtm_gclid%3D%3Bfbp%3Dfb.1.1710498644396.264836562%3Bsite_type%3Dd%3Bgtm_utm_content%3D%3Bgtm_utm_term%3D%3Bpage_type%3Dhomegenere%3Bcustomer%3Dfalse%3Bbrand_listing%3Dfarfallina%2Csolada%2Cfh%2Cdaystar%2Cvanita%2Cflight%20finery%2Cfrenetika%2Csexy%20sense%2Cluna%26miele%2Cmira%C2%B0belle%2Ci%20jeans%2Cqueen%20helena%2Csissi%20miss%2Cmartin%20pescatore%2Csolo%20soprani%2Cmarquiiz%2Cinblu%2Claura%20biagiotti%2Ccoconuda%2Cinfiore%2Csielei%2Clonsdale%2Caki&userId=&us_privacy=1---&auid=1206575893.1710496165&uaa=x86&uab=64&uafvl=Chromium%3B122.0.6261.129%7CNot(A%253ABrand%3B24.0.0.0%7CGoogle%2520Chrome%3B122.0.6261.129&uamb=0&uam=&uap=Windows&uapv=10.0.0&uaw=0&gdid=dMWZhNz&dma=1&dma_cps=sypham&npa=0&gcs=G111&gcd=13v3v3v2v6&pscdl=noapi
Have you noticed something weird?
There is data parameter but there isn't the event value.
data=gtm_referrer%3Dhttps%3A%2F%2Ftagassistant.google.com%2F%3Bgtm_date_now%3D1710924354805%3Bga_session_consent_mode%3Dtrue%7Ctrue%7Ctrue%3Bsite_lang%3Dit%3Bevent_id%3D1702631862799_17109248990332440%3Bgtm_utm_source%3D%3Bgtm_utm_medium%3D%3Bgtm_utm_campaign%3D%3Bgtm_gclid%3D%3Bfbp%3Dfb.1.1710498644396.264836562%3Bsite_type%3Dd%3Bgtm_utm_content%3D%3Bgtm_utm_term%3D%3Bpage_type%3Dhomegenere%3Bcustomer%3Dfalse%3Bbrand_listing%3Dfarfallina%2Csolada%2Cfh%2Cdaystar%2Cvanita%2Cflight%20finery%2Cfrenetika%2Csexy%20sense%2Cluna%26miele%2Cmira%C2%B0belle%2Ci%20jeans%2Cqueen%20helena%2Csissi%20miss%2Cmartin%20pescatore%2Csolo%20soprani%2Cmarquiiz%2Cinblu%2Claura%20biagiotti%2Ccoconuda%2Cinfiore%2Csielei%2Clonsdale%2Caki
That's WHY we don't have the hits in GAds. The event is a mandatory value, without it Google Ads can not accept the hit.
Question: Why we don't have the event? It's available on the GA4 hit!
Check the Server-Side configuration:
We use Event data as custom parameters and we have too much custom parameters in the GA4 hits!
First solution:
Use custom configuration and set event and only the necessary parameters.
Second Solution
Use the server-side transformation to exclude all parameters.
My suggestion is to use both :)
The result
Remarketing data returned to 150k, reaching 300k.
Remember: the last 3/4 days we have the delay in the UI graph
Conclusion
I hope this article will help you to better understand some case studies. If you want to share something leave me a comment and if you want to have more insights follow me.
Happy Tagging!
Founder | Product MVP Expert | Fiction Writer | Find me @Dubai Trade Show
2wMatteo, thanks for sharing!
Analytics lead
10moHi Matteo, this is a long shot, but I enjoyed your article a lot and I feel like I am getting close to solving a mystery: Me and a few more people I found out there are struggling with sGTM blocking the Remarketing Pixel from firing altogether. It also seems to block the requests that sGTM is meant to send back to the browser and over to double-click when GA and Google Ads are integrated. The status on the remarketing tag is simply: failed. No more explanation. Does this ring a bell?
Technical Marketing & Neural Science Researcher. #SEO , #PPC, and #Analytics. Husband, creative, data freak. Founder at Fuel Lab. "Hope is not a Strategy".
1yHi Matteo, I did experiment a bit with the steps you've shown to verify if also on the accounts we handle we could see a significant uptick in hits coming to the Google Ads Tag. And yes, same result as yours. But did you also notice any specific KPI bettering their performance when re-gaining those hits volume? Any KPI. Cost, Impressions, Cliks, not just conversion data. Just curious to learn about your findings on this one.
Generador de demanda
1yHi Matteo, How do I solve the following: Do you remember the allow_ad_personalization_signals and ad_personalization conflict value? Great. If they have not the same values npa is 1 (no, this is not good for you). help!!
I help agencies/companies measure performance and KPIs | Google Analytics 4 | Google Tag Manager
1yThanks for sharing great insights. I have a quick question with regards to consent mode - if a user moves from Site A to Site B that is linked through cross domain tracking, where he has accepted consent on Site A, will his preferences be saved on Site B? Or do we need to pass the same preferences received by Site A to Site B by customizing the google tag with updated gcd and gcs values? Thanks in advance.