{"id":8101,"date":"2026-08-10T10:23:00","date_gmt":"2026-08-10T08:23:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=8101"},"modified":"2026-10-24T03:01:38","modified_gmt":"2026-10-24T01:01:38","slug":"ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/","title":{"rendered":"GA4 Consent Mode v2: The gcd Parameter, CMP Race Conditions and Server-Side Debugging"},"content":{"rendered":"<p><code>gcd<\/code> is a diagnostic clue in Google requests. The parameter does not replace consent verification or inspection of outgoing data. With an asynchronously loaded consent management platform (CMP), the sequence matters: defaults, stored choice, update, measurement event and actual transmission.<\/p>\n<h2>Four signals with different purposes<\/h2>\n<table>\n<thead>\n<tr>\n<th>Signal<\/th>\n<th>Meaning<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>ad_storage<\/code><\/td>\n<td>Storage for advertising, such as cookies.<\/td>\n<\/tr>\n<tr>\n<td><code>analytics_storage<\/code><\/td>\n<td>Storage for analytics.<\/td>\n<\/tr>\n<tr>\n<td><code>ad_user_data<\/code><\/td>\n<td>Sending user data to Google for online advertising.<\/td>\n<\/tr>\n<tr>\n<td><code>ad_personalization<\/code><\/td>\n<td>Personalized advertising.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Analytics permission is not a general marketing permission. In particular, <code>ad_user_data<\/code> does not automatically authorize Meta CAPI. Other recipients and purposes need an explicit mapping to the choice actually collected.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-8101-gcd-20261024.png\" alt=\"Four stages of consent debugging: defaults, CMP update, browser request and destination-specific server output.\"\/><figcaption>Four stages of consent debugging: defaults, CMP update, browser request and destination-specific server output.<\/figcaption><\/figure>\n<h2>What gcs and gcd reveal<\/h2>\n<p>Google describes <code>gcs<\/code> as carrying the states of <code>ad_storage<\/code> and <code>analytics_storage<\/code>. <code>gcd<\/code> carries more detailed consent information and is also sent without an active Consent Mode implementation. Its presence therefore does not establish correct configuration.<\/p>\n<p>Google explicitly warns that encoded HTTP fields can change. Observed letter tables and fixed character positions are not a permanent documented interface. A check such as <code>gcd.charAt(6)<\/code> should not control permission to forward data. An apparently matching value proves neither valid consent nor a complete history of every decision.<\/p>\n<h2>Investigating a CMP race condition<\/h2>\n<p>An early request with a different consent pattern from later requests can indicate a delayed update. A normal later acceptance, regional differences or a partial update can also explain the change. Comparing requests alone does not establish the cause.<\/p>\n<ol>\n<li>A fresh Tag Assistant session establishes the earliest consent event and all four defaults.<\/li>\n<li>The record includes CMP initialization and any stored choice. The choice must match the current purposes and vendor configuration.<\/li>\n<li>All four update values are compared with the timing of the first measurement event.<\/li>\n<li>The affected tag&#8217;s consent checks and firing reason are linked to the corresponding browser request.<\/li>\n<li>The test matrix covers a new session, stored denial, stored acceptance, partial consent, withdrawal and a slow CMP, plus separate regional variants.<\/li>\n<\/ol>\n<p>A defensible finding would be: a relevant stored acceptance existed, but the consent update was processed after the measurement event under investigation. That timeline distinguishes an ordering problem from a normal later decision.<\/p>\n<h2>Fixing order and bounding the wait<\/h2>\n<p>In GTM, suitable consent templates should set defaults on <code>Consent Initialization \u2013 All Pages<\/code>. Templates use <code>setDefaultConsentState<\/code> and <code>updateConsentState<\/code>. Calling <code>gtag('consent', ...)<\/code> inside a template can introduce queueing delays. Starting a template early still does not guarantee that an asynchronously loaded CMP has finished.<\/p>\n<p>For direct gtag.js integration, defaults must precede measurement-producing <code>config<\/code> or <code>event<\/code> commands. <code>wait_for_update<\/code> provides a bounded waiting period for an update. The frequently shown 500 milliseconds is an example, not a reliable maximum CMP loading time. After expiry, the consent state available at that point applies.<\/p>\n<p>A documented CMP event can support an appropriate firing strategy. An invented event name or an additional pageview on every consent change can instead lose or duplicate measurements. Firing, repeat events and navigation need joint testing.<\/p>\n<h2>Distinguishing Basic and Advanced<\/h2>\n<p>Basic Consent Mode blocks the relevant Google tags until the required consent. In Advanced Consent Mode, loaded Google tags can send limited pings without the relevant cookies following denial. Therefore, <code>denied<\/code> does not automatically mean no network traffic. A design requiring no corresponding transmission before consent needs verified blocking across every involved path.<\/p>\n<h2>Following server traffic to each destination<\/h2>\n<p>In Google&#8217;s documented setup, a GA4 client processes the incoming request in the server container, and consent-aware Google tags use the transported signals. Behavior varies by destination and tag. A GA4 request is not a mandatory carrier for every other server client or vendor.<\/p>\n<p>Server preview should connect the incoming request, responsible client, generated event, fired tags and outgoing requests. Third-party templates need explicitly verified rules for each recipient and purpose. An externally supplied consent field is also not cryptographic proof of consent.<\/p>\n<p>Missing or unintelligible signals should remain visible as a separate error condition and must not imply permission. A minimized test record can include the case, event time, tag version, firing decision and destination. Full URLs or user data should not enter diagnostic logs without checking the contents and need.<\/p>\n<h2>Questions and answers<\/h2>\n<h3>Does missing gcd establish denial?<\/h3>\n<p>No. A different transport path may omit the parameter. The origin, client and expected format need investigation. Unknown and explicitly denied are different diagnostic states.<\/p>\n<h3>Does gcs prove that no cookies were written?<\/h3>\n<p>No. The parameter reports transported states. Actual cookie access and requests require additional browser and, where relevant, server inspection.<\/p>\n<h3>Does Consent Mode guarantee legal compliance?<\/h3>\n<p>No. Technical signals do not replace assessment of consent, purposes, recipients, payloads and retention. A successful test suite establishes only the tested flows and versions.<\/p>\n<h2>Sources<\/h2>\n<ul>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/security\/concepts\/consent-mode\">Consent mode overview<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/security\/guides\/consent-debugging\">Troubleshoot consent mode with Tag Assistant<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/security\/guides\/consent\">Consent Mode implementation<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/templates\/consent-apis\">Create a consent mode template<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/server-side\/consent-mode\">Implement consent mode with server-side Tag Manager<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/gtagjs\/reference\">gtag.js reference<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>A technical breakdown of the GA4 gcd parameter bit-logic, server-side debugging in ssGTM, and identifying CMP race conditions.<\/p>\n","protected":false},"author":1,"featured_media":19801,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[91040,91041,91258,91267,91061,91516],"class_list":["post-8101","post","type-post","status-publish","format-standard","hentry","category-digital-analytics","tag-consent-management","tag-consent-mode-v2","tag-google-analytics-4","tag-google-tag-manager","tag-server-side-gtm","tag-tracking"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>GA4 Consent Mode v2: The gcd Parameter, CMP Race Conditions and Server-Side Debugging | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Inspect the GA4 gcd parameter: consent states, CMP race conditions and debugging incoming requests in Server-Side GTM.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GA4 Consent Mode v2: The gcd Parameter, CMP Race Conditions and Server-Side Debugging | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Inspect the GA4 gcd parameter: consent states, CMP race conditions and debugging incoming requests in Server-Side GTM.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-10T08:23:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-24T01:01:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8101-ga4-consent-mode-v2-the-gcd-paramete-tk.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"GA4 Consent Mode v2: The gcd Parameter, CMP Race Conditions and Server-Side Debugging\",\"datePublished\":\"2026-08-10T08:23:00+00:00\",\"dateModified\":\"2026-10-24T01:01:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\\\/\"},\"wordCount\":801,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-8101-ga4-consent-mode-v2-the-gcd-paramete-tk.png\",\"keywords\":[\"Consent Management\",\"Consent Mode v2\",\"Google Analytics 4\",\"Google Tag Manager\",\"Server-Side GTM\",\"Tracking\"],\"articleSection\":[\"Digital Analytics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\\\/\",\"name\":\"GA4 Consent Mode v2: The gcd Parameter, CMP Race Conditions and Server-Side Debugging | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-8101-ga4-consent-mode-v2-the-gcd-paramete-tk.png\",\"datePublished\":\"2026-08-10T08:23:00+00:00\",\"dateModified\":\"2026-10-24T01:01:38+00:00\",\"description\":\"Inspect the GA4 gcd parameter: consent states, CMP race conditions and debugging incoming requests in Server-Side GTM.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-8101-ga4-consent-mode-v2-the-gcd-paramete-tk.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-8101-ga4-consent-mode-v2-the-gcd-paramete-tk.png\",\"width\":1200,\"height\":630,\"caption\":\"GA4 Consent Mode v2: The gcd Parameter, CMP Race Conditions and Server-Side Debugging\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GA4 Consent Mode v2: The gcd Parameter, CMP Race Conditions and Server-Side Debugging\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"GA4 Consent Mode v2: The gcd Parameter, CMP Race Conditions and Server-Side Debugging | Lukas Wojcik","description":"Inspect the GA4 gcd parameter: consent states, CMP race conditions and debugging incoming requests in Server-Side GTM.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/","og_locale":"en_US","og_type":"article","og_title":"GA4 Consent Mode v2: The gcd Parameter, CMP Race Conditions and Server-Side Debugging | Lukas Wojcik","og_description":"Inspect the GA4 gcd parameter: consent states, CMP race conditions and debugging incoming requests in Server-Side GTM.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-08-10T08:23:00+00:00","article_modified_time":"2026-10-24T01:01:38+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8101-ga4-consent-mode-v2-the-gcd-paramete-tk.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"GA4 Consent Mode v2: The gcd Parameter, CMP Race Conditions and Server-Side Debugging","datePublished":"2026-08-10T08:23:00+00:00","dateModified":"2026-10-24T01:01:38+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/"},"wordCount":801,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8101-ga4-consent-mode-v2-the-gcd-paramete-tk.png","keywords":["Consent Management","Consent Mode v2","Google Analytics 4","Google Tag Manager","Server-Side GTM","Tracking"],"articleSection":["Digital Analytics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/","name":"GA4 Consent Mode v2: The gcd Parameter, CMP Race Conditions and Server-Side Debugging | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8101-ga4-consent-mode-v2-the-gcd-paramete-tk.png","datePublished":"2026-08-10T08:23:00+00:00","dateModified":"2026-10-24T01:01:38+00:00","description":"Inspect the GA4 gcd parameter: consent states, CMP race conditions and debugging incoming requests in Server-Side GTM.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8101-ga4-consent-mode-v2-the-gcd-paramete-tk.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8101-ga4-consent-mode-v2-the-gcd-paramete-tk.png","width":1200,"height":630,"caption":"GA4 Consent Mode v2: The gcd Parameter, CMP Race Conditions and Server-Side Debugging"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-consent-mode-v2-the-gcd-parameter-cmp-race-conditions-and-server-side\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"GA4 Consent Mode v2: The gcd Parameter, CMP Race Conditions and Server-Side Debugging"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/8101","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=8101"}],"version-history":[{"count":8,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/8101\/revisions"}],"predecessor-version":[{"id":23295,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/8101\/revisions\/23295"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/19801"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=8101"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=8101"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=8101"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}