<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Immanuel Schranz</title>
    <description>The latest articles on DEV Community by Immanuel Schranz (@immanuel_schranz_ad2ff88e).</description>
    <link>https://dev.to/immanuel_schranz_ad2ff88e</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4241194%2F17d6398c-6889-40e6-9fd3-370ac1fc8c63.png</url>
      <title>DEV Community: Immanuel Schranz</title>
      <link>https://dev.to/immanuel_schranz_ad2ff88e</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/immanuel_schranz_ad2ff88e"/>
    <language>en</language>
    <item>
      <title>How to check if Google Consent Mode v2 is actually working (gcs and gcd explained)</title>
      <dc:creator>Immanuel Schranz</dc:creator>
      <pubDate>Thu, 12 Nov 2026 13:41:18 +0000</pubDate>
      <link>https://dev.to/immanuel_schranz_ad2ff88e/how-to-check-if-google-consent-mode-v2-is-actually-working-gcs-and-gcd-explained-19o7</link>
      <guid>https://dev.to/immanuel_schranz_ad2ff88e/how-to-check-if-google-consent-mode-v2-is-actually-working-gcs-and-gcd-explained-19o7</guid>
      <description>&lt;p&gt;A cookie banner can show "Reject" and still tell Google's tags "granted".&lt;br&gt;
The banner looks fine, the choice is saved, and nobody notices, because the&lt;br&gt;
only place the truth shows up is two query parameters on every Google&lt;br&gt;
measurement request: gcs and gcd.&lt;/p&gt;

&lt;p&gt;Here is how to read them in about two minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Catch a request before anyone clicks
&lt;/h2&gt;

&lt;p&gt;Open the site in a private window, open DevTools (F12), go to the Network&lt;br&gt;
tab, filter for "collect" and reload. Do not touch the banner.&lt;/p&gt;

&lt;p&gt;Every request to Google Analytics carries a gcs parameter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;G100: ad and analytics storage denied&lt;/li&gt;
&lt;li&gt;G111: both granted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before the visitor has chosen anything, G111 should never appear. If it&lt;br&gt;
does, the default in your consent setup says "granted".&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Read gcd for the v2 signals
&lt;/h2&gt;

&lt;p&gt;gcd starts with 13, then one letter per signal, in this order:&lt;br&gt;
ad_storage, analytics_storage, ad_user_data, ad_personalization.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;l: not set&lt;/li&gt;
&lt;li&gt;p: denied&lt;/li&gt;
&lt;li&gt;t: granted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An l on the last two positions means the two signals added with v2 are&lt;br&gt;
missing. Google has required them for users in the EEA since March 2024 if&lt;br&gt;
you use Google Ads for measurement, audiences or remarketing.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Click "Reject" and look again
&lt;/h2&gt;

&lt;p&gt;Filter for "collect" again. gcs should stay G100, or in basic mode no&lt;br&gt;
request is sent at all. No _ga cookie should appear.&lt;/p&gt;

&lt;h2&gt;
  
  
  The usual causes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The default in the banner's Tag Manager template is "granted", or the
configured region does not include the visitor's country.&lt;/li&gt;
&lt;li&gt;A second copy of the Google tag sits in the theme, a plugin or a shop app.
It never got the default and sends with no consent state at all.&lt;/li&gt;
&lt;li&gt;v2 is not switched on in the banner tool, or the Tag Manager template is
outdated.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fix order: default to "denied" for all four signals before any other Google&lt;br&gt;
tag, switch on v2 in the banner tool, load each Google tag once (ideally&lt;br&gt;
through Tag Manager), then measure again after "Reject".&lt;/p&gt;

&lt;p&gt;Consent Mode only covers Google tags. Meta Pixel, TikTok and the rest have&lt;br&gt;
to be held back by the banner tool itself.&lt;/p&gt;

&lt;p&gt;If you would rather not do this by hand on every page: I built a scanner&lt;br&gt;
that loads the page in a fresh browser, reads gcs and gcd on every Google&lt;br&gt;
request, clicks "Reject" and measures again. Free check here:&lt;br&gt;
&lt;a href="https://konformia.at/en/guides/google-consent-mode-v2?q=devto" rel="noopener noreferrer"&gt;https://konformia.at/en/guides/google-consent-mode-v2&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>analytics</category>
      <category>privacy</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
