[{"data":1,"prerenderedAt":1388},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fen\u002Fmarketing\u002Fconsent-mode-v2-ve-tcf-modeling-loss-minimize":12},{"i18nKey":4,"paths":5},"marketing-006-2026-07",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11},"\u002Fde\u002Fmarketing\u002Fconsent-mode-v2-tcf-2-2-modeling-loss-yonetimi","\u002Fen\u002Fmarketing\u002Fconsent-mode-v2-ve-tcf-modeling-loss-minimize","\u002Fes\u002Fmarketing\u002Fconsent-mode-v2-tcf-2-2-modeling-loss","\u002Ffr\u002Fmarketing\u002Fconsent-mode-v2-tcf-2-2-modeling-loss","\u002Fit\u002Fmarketing\u002Fconsent-mode-v2-tcf-2-2-modeling-loss","\u002Fru\u002Fmarketing\u002Fkonsent-mode-v2-ve-tcf-22-modeling-loss-yonetimi",{"_path":7,"_dir":13,"_draft":14,"_partial":14,"_locale":15,"title":16,"description":17,"publishedAt":18,"modifiedAt":18,"category":13,"i18nKey":4,"tags":19,"readingTime":25,"author":26,"body":27,"_type":1382,"_id":1383,"_source":1384,"_file":1385,"_stem":1386,"_extension":1387},"marketing",false,"","Consent Mode v2 and TCF 2.2: Managing Modeling Loss in GDPR Compliance","Navigate Google's consent modeling architecture and TCF 2.2 integration to minimize GDPR-compliant measurement loss with real-world implementation scenarios.","2026-07-16",[20,21,22,23,24],"consent-mode","tcf","gdpr","conversion-modeling","gtm",8,"Roibase",{"type":28,"children":29,"toc":1367},"root",[30,38,45,67,72,85,92,97,143,148,154,167,188,517,522,572,578,583,711,724,730,735,766,779,784,931,944,950,1008,1020,1026,1031,1064,1077,1100,1120,1126,1131,1174,1186,1192,1197,1326,1349,1361],{"type":31,"tag":32,"props":33,"children":34},"element","p",{},[35],{"type":36,"value":37},"text","Google Consent Mode v2 and IAB TCF 2.2 are now mandatory. Since March 2024, EEA and UK traffic without Consent Mode cannot trigger Google Ads remarketing and audience targeting. But once you achieve legal compliance, you face a new problem: 40-70% of users reject analytics cookies, and conversion loss climbs to 15-35%. Google's consent modeling infrastructure attempts to bridge this gap—but only when implemented correctly. This article walks through implementation layers, TCF integration, and data quality checklists to minimize modeling loss using real scenarios.",{"type":31,"tag":39,"props":40,"children":42},"h2",{"id":41},"what-is-consent-mode-v2-and-why-modeling-loss-is-unavoidable",[43],{"type":36,"value":44},"What Is Consent Mode v2 and Why Modeling Loss Is Unavoidable",{"type":31,"tag":32,"props":46,"children":47},{},[48,50,57,59,65],{"type":36,"value":49},"Google Consent Mode is a protocol that transmits user consent status (granted\u002Fdenied) as signals to platform APIs. v2 introduced two new parameters: ",{"type":31,"tag":51,"props":52,"children":54},"code",{"className":53},[],[55],{"type":36,"value":56},"ad_user_data",{"type":36,"value":58}," (can data be collected for personalization?) and ",{"type":31,"tag":51,"props":60,"children":62},{"className":61},[],[63],{"type":36,"value":64},"ad_personalization",{"type":36,"value":66}," (can users be added to remarketing audiences?). Without both, EEA traffic cannot access persona targeting in Google Ads.",{"type":31,"tag":32,"props":68,"children":69},{},[70],{"type":36,"value":71},"The core problem with Consent Mode is straightforward: when a user rejects an analytics cookie, Google Analytics cannot record the conversion event. This leaves your Google Ads campaigns with incomplete conversion data—the bidding algorithm operates blind. This is where consent modeling steps in. Google attempts to predict the behavior of users who denied consent by inferring patterns from consent-granted cohorts, using these projections to model conversion counts.",{"type":31,"tag":32,"props":73,"children":74},{},[75,77,83],{"type":36,"value":76},"For modeling to work, two critical inputs are essential: (1) sufficient consent-granted data (minimum 100 conversions daily; ideally 1,000+), and (2) consent status must be pinged correctly (",{"type":31,"tag":51,"props":78,"children":80},{"className":79},[],[81],{"type":36,"value":82},"gtag('consent', 'update', {...})",{"type":36,"value":84},"). Without both, modeling drops into \"insufficient data\" mode and loss remains unrecovered.",{"type":31,"tag":86,"props":87,"children":89},"h3",{"id":88},"factors-that-affect-modeling-loss",[90],{"type":36,"value":91},"Factors That Affect Modeling Loss",{"type":31,"tag":32,"props":93,"children":94},{},[95],{"type":36,"value":96},"According to Google's Q4 2024 documentation, consent modeling delivers ~70% recovery in accounts with ~50% consent denial rates. So if you have 50% consent loss, modeling can reduce that to ~15%. But this rate depends on several variables:",{"type":31,"tag":98,"props":99,"children":100},"ul",{},[101,113,123,133],{"type":31,"tag":102,"props":103,"children":104},"li",{},[105,111],{"type":31,"tag":106,"props":107,"children":108},"strong",{},[109],{"type":36,"value":110},"Consent-granted traffic volume:",{"type":36,"value":112}," Below 100 daily conversions, the model is weak.",{"type":31,"tag":102,"props":114,"children":115},{},[116,121],{"type":31,"tag":106,"props":117,"children":118},{},[119],{"type":36,"value":120},"CMP implementation:",{"type":36,"value":122}," If your IAB TCF v2.2-compliant CMP (OneTrust, Cookiebot, Usercentrics) correctly maps purposes and vendors, signal quality increases.",{"type":31,"tag":102,"props":124,"children":125},{},[126,131],{"type":31,"tag":106,"props":127,"children":128},{},[129],{"type":36,"value":130},"Server-side GTM usage:",{"type":36,"value":132}," With sGTM, consent status can be validated at the backend, and this first-party context strengthens modeling inputs.",{"type":31,"tag":102,"props":134,"children":135},{},[136,141],{"type":31,"tag":106,"props":137,"children":138},{},[139],{"type":36,"value":140},"Conversion type diversity:",{"type":36,"value":142}," When e-commerce checkout, add-to-cart, and pageview are tracked together, the model learns from a wider funnel.",{"type":31,"tag":32,"props":144,"children":145},{},[146],{"type":36,"value":147},"When modeling underperforms, Google Ads bidding strategies (Target ROAS, Max Conversions) struggle because true conversion signals are missing. To compensate, offline conversion import or CAPI (Conversions API) backend-to-Google integration becomes necessary.",{"type":31,"tag":39,"props":149,"children":151},{"id":150},"tcf-22-integration-purpose-mapping-and-vendor-lists",[152],{"type":36,"value":153},"TCF 2.2 Integration: Purpose Mapping and Vendor Lists",{"type":31,"tag":32,"props":155,"children":156},{},[157,159,165],{"type":36,"value":158},"The IAB Transparency and Consent Framework (TCF) 2.2 separates user consent into 10 purpose categories. For Google Ads to function, at minimum Purpose 1 (store\u002Faccess info) and Purpose 2 (personalization) are required. The TCF consent string is generated by the CMP and read via the ",{"type":31,"tag":51,"props":160,"children":162},{"className":161},[],[163],{"type":36,"value":164},"__tcfapi",{"type":36,"value":166}," callback, then converted to Consent Mode in GTM.",{"type":31,"tag":32,"props":168,"children":169},{},[170,172,178,180,186],{"type":36,"value":171},"In practice, it works like this: when a user clicks \"Accept\" on the CMP banner, the CMP sets ",{"type":31,"tag":51,"props":173,"children":175},{"className":174},[],[176],{"type":36,"value":177},"tcData.purpose.consents",{"type":36,"value":179}," to something like ",{"type":31,"tag":51,"props":181,"children":183},{"className":182},[],[184],{"type":36,"value":185},"{1: true, 2: true, ...}",{"type":36,"value":187},". This object is read in a GTM Custom JavaScript variable and mapped as follows:",{"type":31,"tag":189,"props":190,"children":194},"pre",{"className":191,"code":192,"language":193,"meta":15,"style":15},"language-javascript shiki shiki-themes github-dark","var tcData = window.__tcfapi || {};\nvar purposes = tcData.purpose.consents;\n\nif (purposes[1] && purposes[2]) {\n  gtag('consent', 'update', {\n    ad_storage: 'granted',\n    ad_user_data: 'granted',\n    ad_personalization: 'granted'\n  });\n} else {\n  gtag('consent', 'update', {\n    ad_storage: 'denied',\n    ad_user_data: 'denied',\n    ad_personalization: 'denied'\n  });\n}\n","javascript",[195],{"type":31,"tag":51,"props":196,"children":197},{"__ignoreMap":15},[198,236,258,268,313,349,368,385,398,407,426,454,471,487,500,508],{"type":31,"tag":199,"props":200,"children":203},"span",{"class":201,"line":202},"line",1,[204,210,216,221,226,231],{"type":31,"tag":199,"props":205,"children":207},{"style":206},"--shiki-default:#F97583",[208],{"type":36,"value":209},"var",{"type":31,"tag":199,"props":211,"children":213},{"style":212},"--shiki-default:#E1E4E8",[214],{"type":36,"value":215}," tcData ",{"type":31,"tag":199,"props":217,"children":218},{"style":206},[219],{"type":36,"value":220},"=",{"type":31,"tag":199,"props":222,"children":223},{"style":212},[224],{"type":36,"value":225}," window.__tcfapi ",{"type":31,"tag":199,"props":227,"children":228},{"style":206},[229],{"type":36,"value":230},"||",{"type":31,"tag":199,"props":232,"children":233},{"style":212},[234],{"type":36,"value":235}," {};\n",{"type":31,"tag":199,"props":237,"children":239},{"class":201,"line":238},2,[240,244,249,253],{"type":31,"tag":199,"props":241,"children":242},{"style":206},[243],{"type":36,"value":209},{"type":31,"tag":199,"props":245,"children":246},{"style":212},[247],{"type":36,"value":248}," purposes ",{"type":31,"tag":199,"props":250,"children":251},{"style":206},[252],{"type":36,"value":220},{"type":31,"tag":199,"props":254,"children":255},{"style":212},[256],{"type":36,"value":257}," tcData.purpose.consents;\n",{"type":31,"tag":199,"props":259,"children":261},{"class":201,"line":260},3,[262],{"type":31,"tag":199,"props":263,"children":265},{"emptyLinePlaceholder":264},true,[266],{"type":36,"value":267},"\n",{"type":31,"tag":199,"props":269,"children":271},{"class":201,"line":270},4,[272,277,282,288,293,298,303,308],{"type":31,"tag":199,"props":273,"children":274},{"style":206},[275],{"type":36,"value":276},"if",{"type":31,"tag":199,"props":278,"children":279},{"style":212},[280],{"type":36,"value":281}," (purposes[",{"type":31,"tag":199,"props":283,"children":285},{"style":284},"--shiki-default:#79B8FF",[286],{"type":36,"value":287},"1",{"type":31,"tag":199,"props":289,"children":290},{"style":212},[291],{"type":36,"value":292},"] ",{"type":31,"tag":199,"props":294,"children":295},{"style":206},[296],{"type":36,"value":297},"&&",{"type":31,"tag":199,"props":299,"children":300},{"style":212},[301],{"type":36,"value":302}," purposes[",{"type":31,"tag":199,"props":304,"children":305},{"style":284},[306],{"type":36,"value":307},"2",{"type":31,"tag":199,"props":309,"children":310},{"style":212},[311],{"type":36,"value":312},"]) {\n",{"type":31,"tag":199,"props":314,"children":316},{"class":201,"line":315},5,[317,323,328,334,339,344],{"type":31,"tag":199,"props":318,"children":320},{"style":319},"--shiki-default:#B392F0",[321],{"type":36,"value":322},"  gtag",{"type":31,"tag":199,"props":324,"children":325},{"style":212},[326],{"type":36,"value":327},"(",{"type":31,"tag":199,"props":329,"children":331},{"style":330},"--shiki-default:#9ECBFF",[332],{"type":36,"value":333},"'consent'",{"type":31,"tag":199,"props":335,"children":336},{"style":212},[337],{"type":36,"value":338},", ",{"type":31,"tag":199,"props":340,"children":341},{"style":330},[342],{"type":36,"value":343},"'update'",{"type":31,"tag":199,"props":345,"children":346},{"style":212},[347],{"type":36,"value":348},", {\n",{"type":31,"tag":199,"props":350,"children":352},{"class":201,"line":351},6,[353,358,363],{"type":31,"tag":199,"props":354,"children":355},{"style":212},[356],{"type":36,"value":357},"    ad_storage: ",{"type":31,"tag":199,"props":359,"children":360},{"style":330},[361],{"type":36,"value":362},"'granted'",{"type":31,"tag":199,"props":364,"children":365},{"style":212},[366],{"type":36,"value":367},",\n",{"type":31,"tag":199,"props":369,"children":371},{"class":201,"line":370},7,[372,377,381],{"type":31,"tag":199,"props":373,"children":374},{"style":212},[375],{"type":36,"value":376},"    ad_user_data: ",{"type":31,"tag":199,"props":378,"children":379},{"style":330},[380],{"type":36,"value":362},{"type":31,"tag":199,"props":382,"children":383},{"style":212},[384],{"type":36,"value":367},{"type":31,"tag":199,"props":386,"children":387},{"class":201,"line":25},[388,393],{"type":31,"tag":199,"props":389,"children":390},{"style":212},[391],{"type":36,"value":392},"    ad_personalization: ",{"type":31,"tag":199,"props":394,"children":395},{"style":330},[396],{"type":36,"value":397},"'granted'\n",{"type":31,"tag":199,"props":399,"children":401},{"class":201,"line":400},9,[402],{"type":31,"tag":199,"props":403,"children":404},{"style":212},[405],{"type":36,"value":406},"  });\n",{"type":31,"tag":199,"props":408,"children":410},{"class":201,"line":409},10,[411,416,421],{"type":31,"tag":199,"props":412,"children":413},{"style":212},[414],{"type":36,"value":415},"} ",{"type":31,"tag":199,"props":417,"children":418},{"style":206},[419],{"type":36,"value":420},"else",{"type":31,"tag":199,"props":422,"children":423},{"style":212},[424],{"type":36,"value":425}," {\n",{"type":31,"tag":199,"props":427,"children":429},{"class":201,"line":428},11,[430,434,438,442,446,450],{"type":31,"tag":199,"props":431,"children":432},{"style":319},[433],{"type":36,"value":322},{"type":31,"tag":199,"props":435,"children":436},{"style":212},[437],{"type":36,"value":327},{"type":31,"tag":199,"props":439,"children":440},{"style":330},[441],{"type":36,"value":333},{"type":31,"tag":199,"props":443,"children":444},{"style":212},[445],{"type":36,"value":338},{"type":31,"tag":199,"props":447,"children":448},{"style":330},[449],{"type":36,"value":343},{"type":31,"tag":199,"props":451,"children":452},{"style":212},[453],{"type":36,"value":348},{"type":31,"tag":199,"props":455,"children":457},{"class":201,"line":456},12,[458,462,467],{"type":31,"tag":199,"props":459,"children":460},{"style":212},[461],{"type":36,"value":357},{"type":31,"tag":199,"props":463,"children":464},{"style":330},[465],{"type":36,"value":466},"'denied'",{"type":31,"tag":199,"props":468,"children":469},{"style":212},[470],{"type":36,"value":367},{"type":31,"tag":199,"props":472,"children":474},{"class":201,"line":473},13,[475,479,483],{"type":31,"tag":199,"props":476,"children":477},{"style":212},[478],{"type":36,"value":376},{"type":31,"tag":199,"props":480,"children":481},{"style":330},[482],{"type":36,"value":466},{"type":31,"tag":199,"props":484,"children":485},{"style":212},[486],{"type":36,"value":367},{"type":31,"tag":199,"props":488,"children":490},{"class":201,"line":489},14,[491,495],{"type":31,"tag":199,"props":492,"children":493},{"style":212},[494],{"type":36,"value":392},{"type":31,"tag":199,"props":496,"children":497},{"style":330},[498],{"type":36,"value":499},"'denied'\n",{"type":31,"tag":199,"props":501,"children":503},{"class":201,"line":502},15,[504],{"type":31,"tag":199,"props":505,"children":506},{"style":212},[507],{"type":36,"value":406},{"type":31,"tag":199,"props":509,"children":511},{"class":201,"line":510},16,[512],{"type":31,"tag":199,"props":513,"children":514},{"style":212},[515],{"type":36,"value":516},"}\n",{"type":31,"tag":32,"props":518,"children":519},{},[520],{"type":36,"value":521},"Three key points to watch when implementing this mapping:",{"type":31,"tag":523,"props":524,"children":525},"ol",{},[526,544,554],{"type":31,"tag":102,"props":527,"children":528},{},[529,534,536,542],{"type":31,"tag":106,"props":530,"children":531},{},[532],{"type":36,"value":533},"Vendor list verification:",{"type":36,"value":535}," If Google (vendor ID 755) is on the TCF vendor list and the user has approved it, the signal can be sent. Otherwise, ",{"type":31,"tag":51,"props":537,"children":539},{"className":538},[],[540],{"type":36,"value":541},"ad_storage: 'denied'",{"type":36,"value":543}," must remain.",{"type":31,"tag":102,"props":545,"children":546},{},[547,552],{"type":31,"tag":106,"props":548,"children":549},{},[550],{"type":36,"value":551},"Legitimate interest model:",{"type":36,"value":553}," Purposes 2-7-9-10 can also operate via \"legitimate interest.\" In Turkey, this carries legal risk—KVKK doesn't fully recognize this model.",{"type":31,"tag":102,"props":555,"children":556},{},[557,562,564,570],{"type":31,"tag":106,"props":558,"children":559},{},[560],{"type":36,"value":561},"Consent renewal period:",{"type":36,"value":563}," TCF 2.2 requires consent renewal every 13 months. If your CMP lacks automatic refresh, consent should flip to ",{"type":31,"tag":51,"props":565,"children":567},{"className":566},[],[568],{"type":36,"value":569},"denied",{"type":36,"value":571}," once it expires.",{"type":31,"tag":86,"props":573,"children":575},{"id":574},"cmp-selection-and-qa-checklist",[576],{"type":36,"value":577},"CMP Selection and QA Checklist",{"type":31,"tag":32,"props":579,"children":580},{},[581],{"type":36,"value":582},"When choosing a CMP, TCF 2.2 certification is mandatory. OneTrust and Cookiebot are certified, but you can break IAB compliance by adding custom purposes to their config. Use this QA checklist:",{"type":31,"tag":584,"props":585,"children":586},"table",{},[587,606],{"type":31,"tag":588,"props":589,"children":590},"thead",{},[591],{"type":31,"tag":592,"props":593,"children":594},"tr",{},[595,601],{"type":31,"tag":596,"props":597,"children":598},"th",{},[599],{"type":36,"value":600},"Step",{"type":31,"tag":596,"props":602,"children":603},{},[604],{"type":36,"value":605},"Control Point",{"type":31,"tag":607,"props":608,"children":609},"tbody",{},[610,623,643,656,669,690],{"type":31,"tag":592,"props":611,"children":612},{},[613,618],{"type":31,"tag":614,"props":615,"children":616},"td",{},[617],{"type":36,"value":287},{"type":31,"tag":614,"props":619,"children":620},{},[621],{"type":36,"value":622},"CMP load order: does it load before the GTM container? (no race condition?)",{"type":31,"tag":592,"props":624,"children":625},{},[626,630],{"type":31,"tag":614,"props":627,"children":628},{},[629],{"type":36,"value":307},{"type":31,"tag":614,"props":631,"children":632},{},[633,635,641],{"type":36,"value":634},"Does ",{"type":31,"tag":51,"props":636,"children":638},{"className":637},[],[639],{"type":36,"value":640},"__tcfapi('getTCData', 2, callback)",{"type":36,"value":642}," return a response?",{"type":31,"tag":592,"props":644,"children":645},{},[646,651],{"type":31,"tag":614,"props":647,"children":648},{},[649],{"type":36,"value":650},"3",{"type":31,"tag":614,"props":652,"children":653},{},[654],{"type":36,"value":655},"Is Purpose 1, 2, 7, 9, 10 mapping correct?",{"type":31,"tag":592,"props":657,"children":658},{},[659,664],{"type":31,"tag":614,"props":660,"children":661},{},[662],{"type":36,"value":663},"4",{"type":31,"tag":614,"props":665,"children":666},{},[667],{"type":36,"value":668},"Is Vendor 755 (Google) approved?",{"type":31,"tag":592,"props":670,"children":671},{},[672,677],{"type":31,"tag":614,"props":673,"children":674},{},[675],{"type":36,"value":676},"5",{"type":31,"tag":614,"props":678,"children":679},{},[680,682,688],{"type":36,"value":681},"After consent update, does a ",{"type":31,"tag":51,"props":683,"children":685},{"className":684},[],[686],{"type":36,"value":687},"consent_update",{"type":36,"value":689}," event fire to GTM Data Layer?",{"type":31,"tag":592,"props":691,"children":692},{},[693,698],{"type":31,"tag":614,"props":694,"children":695},{},[696],{"type":36,"value":697},"6",{"type":31,"tag":614,"props":699,"children":700},{},[701,703,709],{"type":36,"value":702},"In ",{"type":31,"tag":51,"props":704,"children":706},{"className":705},[],[707],{"type":36,"value":708},"ad_storage: denied",{"type":36,"value":710}," state, do GA4 events still ping? (consent-denied pinging is mandatory)",{"type":31,"tag":32,"props":712,"children":713},{},[714,716,722],{"type":36,"value":715},"Step 6 is critical: even when consent is denied, the ",{"type":31,"tag":51,"props":717,"children":719},{"className":718},[],[720],{"type":36,"value":721},"gtag('event', ...)",{"type":36,"value":723}," ping must fire—only cookie setting is blocked. These pings feed into Google's modeling.",{"type":31,"tag":39,"props":725,"children":727},{"id":726},"server-side-gtm-and-hybrid-consent-architecture",[728],{"type":36,"value":729},"Server-Side GTM and Hybrid Consent Architecture",{"type":31,"tag":32,"props":731,"children":732},{},[733],{"type":36,"value":734},"The most effective way to boost signal quality in Consent Mode v2 is to build a \"hybrid consent\" architecture via server-side GTM (sGTM). This model works as follows:",{"type":31,"tag":523,"props":736,"children":737},{},[738,756],{"type":31,"tag":102,"props":739,"children":740},{},[741,746,748,754],{"type":31,"tag":106,"props":742,"children":743},{},[744],{"type":36,"value":745},"Client-side:",{"type":36,"value":747}," User consent status is read from the CMP and sent to Google via ",{"type":31,"tag":51,"props":749,"children":751},{"className":750},[],[752],{"type":36,"value":753},"gtag('consent', 'update', ...)",{"type":36,"value":755},".",{"type":31,"tag":102,"props":757,"children":758},{},[759,764],{"type":31,"tag":106,"props":760,"children":761},{},[762],{"type":36,"value":763},"Server-side:",{"type":36,"value":765}," The sGTM container inspects the consent header in incoming HTTP requests. If consent is granted, backend-generated server-side events (e.g., checkout completion) are posted directly to the Google Ads Conversion endpoint.",{"type":31,"tag":32,"props":767,"children":768},{},[769,771,777],{"type":36,"value":770},"The advantage of this approach is that even iOS ATT rejections or ad-blocker users can send server-side conversion signals—because server-side events are independent of browser cookies and linked to backend order IDs instead. Google matches this via ",{"type":31,"tag":51,"props":772,"children":774},{"className":773},[],[775],{"type":36,"value":776},"gclid",{"type":36,"value":778}," (Google Click ID).",{"type":31,"tag":32,"props":780,"children":781},{},[782],{"type":36,"value":783},"Example scenario: a user runs an ad blocker, so client-side GTM never loads. But at checkout, your backend POSTs to sGTM:",{"type":31,"tag":189,"props":785,"children":789},{"className":786,"code":787,"language":788,"meta":15,"style":15},"language-json shiki shiki-themes github-dark","{\n  \"event_name\": \"purchase\",\n  \"client_id\": \"hashed_user_id\",\n  \"gclid\": \"abc123\",\n  \"value\": 250.00,\n  \"currency\": \"USD\",\n  \"consent_ad_storage\": \"denied\"\n}\n","json",[790],{"type":31,"tag":51,"props":791,"children":792},{"__ignoreMap":15},[793,801,823,844,865,886,907,924],{"type":31,"tag":199,"props":794,"children":795},{"class":201,"line":202},[796],{"type":31,"tag":199,"props":797,"children":798},{"style":212},[799],{"type":36,"value":800},"{\n",{"type":31,"tag":199,"props":802,"children":803},{"class":201,"line":238},[804,809,814,819],{"type":31,"tag":199,"props":805,"children":806},{"style":284},[807],{"type":36,"value":808},"  \"event_name\"",{"type":31,"tag":199,"props":810,"children":811},{"style":212},[812],{"type":36,"value":813},": ",{"type":31,"tag":199,"props":815,"children":816},{"style":330},[817],{"type":36,"value":818},"\"purchase\"",{"type":31,"tag":199,"props":820,"children":821},{"style":212},[822],{"type":36,"value":367},{"type":31,"tag":199,"props":824,"children":825},{"class":201,"line":260},[826,831,835,840],{"type":31,"tag":199,"props":827,"children":828},{"style":284},[829],{"type":36,"value":830},"  \"client_id\"",{"type":31,"tag":199,"props":832,"children":833},{"style":212},[834],{"type":36,"value":813},{"type":31,"tag":199,"props":836,"children":837},{"style":330},[838],{"type":36,"value":839},"\"hashed_user_id\"",{"type":31,"tag":199,"props":841,"children":842},{"style":212},[843],{"type":36,"value":367},{"type":31,"tag":199,"props":845,"children":846},{"class":201,"line":270},[847,852,856,861],{"type":31,"tag":199,"props":848,"children":849},{"style":284},[850],{"type":36,"value":851},"  \"gclid\"",{"type":31,"tag":199,"props":853,"children":854},{"style":212},[855],{"type":36,"value":813},{"type":31,"tag":199,"props":857,"children":858},{"style":330},[859],{"type":36,"value":860},"\"abc123\"",{"type":31,"tag":199,"props":862,"children":863},{"style":212},[864],{"type":36,"value":367},{"type":31,"tag":199,"props":866,"children":867},{"class":201,"line":315},[868,873,877,882],{"type":31,"tag":199,"props":869,"children":870},{"style":284},[871],{"type":36,"value":872},"  \"value\"",{"type":31,"tag":199,"props":874,"children":875},{"style":212},[876],{"type":36,"value":813},{"type":31,"tag":199,"props":878,"children":879},{"style":284},[880],{"type":36,"value":881},"250.00",{"type":31,"tag":199,"props":883,"children":884},{"style":212},[885],{"type":36,"value":367},{"type":31,"tag":199,"props":887,"children":888},{"class":201,"line":351},[889,894,898,903],{"type":31,"tag":199,"props":890,"children":891},{"style":284},[892],{"type":36,"value":893},"  \"currency\"",{"type":31,"tag":199,"props":895,"children":896},{"style":212},[897],{"type":36,"value":813},{"type":31,"tag":199,"props":899,"children":900},{"style":330},[901],{"type":36,"value":902},"\"USD\"",{"type":31,"tag":199,"props":904,"children":905},{"style":212},[906],{"type":36,"value":367},{"type":31,"tag":199,"props":908,"children":909},{"class":201,"line":370},[910,915,919],{"type":31,"tag":199,"props":911,"children":912},{"style":284},[913],{"type":36,"value":914},"  \"consent_ad_storage\"",{"type":31,"tag":199,"props":916,"children":917},{"style":212},[918],{"type":36,"value":813},{"type":31,"tag":199,"props":920,"children":921},{"style":330},[922],{"type":36,"value":923},"\"denied\"\n",{"type":31,"tag":199,"props":925,"children":926},{"class":201,"line":25},[927],{"type":31,"tag":199,"props":928,"children":929},{"style":212},[930],{"type":36,"value":516},{"type":31,"tag":32,"props":932,"children":933},{},[934,936,942],{"type":36,"value":935},"When sGTM relays this event to Google Ads, it doesn't set cookies because ",{"type":31,"tag":51,"props":937,"children":939},{"className":938},[],[940],{"type":36,"value":941},"consent_ad_storage: denied",{"type":36,"value":943},", but it still provides input for conversion modeling. To do this, you need Google Ads Conversion Linker tag + server-side Client ID mapping in sGTM.",{"type":31,"tag":86,"props":945,"children":947},{"id":946},"sgtm-implementation-steps",[948],{"type":36,"value":949},"sGTM Implementation Steps",{"type":31,"tag":523,"props":951,"children":952},{},[953,963,973,990],{"type":31,"tag":102,"props":954,"children":955},{},[956,961],{"type":31,"tag":106,"props":957,"children":958},{},[959],{"type":36,"value":960},"Deploy an sGTM container:",{"type":36,"value":962}," Use Google Cloud Run or Cloudflare Workers.",{"type":31,"tag":102,"props":964,"children":965},{},[966,971],{"type":31,"tag":106,"props":967,"children":968},{},[969],{"type":36,"value":970},"POST events from your backend:",{"type":36,"value":972}," Send checkout completion events with order ID + gclid + consent flag.",{"type":31,"tag":102,"props":974,"children":975},{},[976,981,983,989],{"type":31,"tag":106,"props":977,"children":978},{},[979],{"type":36,"value":980},"Configure a Google Ads tag in sGTM:",{"type":36,"value":982}," Enter your Conversion ID and Conversion Label; in the \"User-Provided Data\" section, map ",{"type":31,"tag":51,"props":984,"children":986},{"className":985},[],[987],{"type":36,"value":988},"client_id",{"type":36,"value":755},{"type":31,"tag":102,"props":991,"children":992},{},[993,998,1000,1006],{"type":31,"tag":106,"props":994,"children":995},{},[996],{"type":36,"value":997},"Enforce consent:",{"type":36,"value":999}," Add a consent check in a Custom Template—if ",{"type":31,"tag":51,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":36,"value":1005},"ad_user_data: denied",{"type":36,"value":1007},", enforce IP masking and user_id hashing.",{"type":31,"tag":32,"props":1009,"children":1010},{},[1011,1013,1018],{"type":36,"value":1012},"The critical point in this architecture: for GDPR compliance, the ",{"type":31,"tag":51,"props":1014,"children":1016},{"className":1015},[],[1017],{"type":36,"value":988},{"type":36,"value":1019}," from your backend must be SHA-256 hashed. Sending raw email or user IDs is a data transfer violation.",{"type":31,"tag":39,"props":1021,"children":1023},{"id":1022},"reporting-and-optimizing-modeling-loss",[1024],{"type":36,"value":1025},"Reporting and Optimizing Modeling Loss",{"type":31,"tag":32,"props":1027,"children":1028},{},[1029],{"type":36,"value":1030},"In Google Ads, navigate to \"Conversions > Measurement\" and look for the \"Modeled conversions\" column. This shows the number of conversions attributed to users who denied consent but were statistically inferred. Here's how to read it:",{"type":31,"tag":98,"props":1032,"children":1033},{},[1034,1044,1054],{"type":31,"tag":102,"props":1035,"children":1036},{},[1037,1042],{"type":31,"tag":106,"props":1038,"children":1039},{},[1040],{"type":36,"value":1041},"Observed conversions:",{"type":36,"value":1043}," Real conversions from consent-granted users.",{"type":31,"tag":102,"props":1045,"children":1046},{},[1047,1052],{"type":31,"tag":106,"props":1048,"children":1049},{},[1050],{"type":36,"value":1051},"Modeled conversions:",{"type":36,"value":1053}," Inferred conversions for consent-denied users.",{"type":31,"tag":102,"props":1055,"children":1056},{},[1057,1062],{"type":31,"tag":106,"props":1058,"children":1059},{},[1060],{"type":36,"value":1061},"Total conversions:",{"type":36,"value":1063}," Observed + Modeled sum.",{"type":31,"tag":32,"props":1065,"children":1066},{},[1067,1069,1075],{"type":36,"value":1068},"To calculate modeling loss, use a simple formula: ",{"type":31,"tag":51,"props":1070,"children":1072},{"className":1071},[],[1073],{"type":36,"value":1074},"(1 - (Modeled \u002F (Total Traffic × Consent Denial Rate))) × 100",{"type":36,"value":1076},". For example:",{"type":31,"tag":98,"props":1078,"children":1079},{},[1080,1085,1090,1095],{"type":31,"tag":102,"props":1081,"children":1082},{},[1083],{"type":36,"value":1084},"Total traffic: 10,000 clicks",{"type":31,"tag":102,"props":1086,"children":1087},{},[1088],{"type":36,"value":1089},"Consent denial rate: 50% (5,000 users denied consent)",{"type":31,"tag":102,"props":1091,"children":1092},{},[1093],{"type":36,"value":1094},"Observed conversions: 150",{"type":31,"tag":102,"props":1096,"children":1097},{},[1098],{"type":36,"value":1099},"Modeled conversions: 60",{"type":31,"tag":32,"props":1101,"children":1102},{},[1103,1105,1111,1113,1119],{"type":36,"value":1104},"Expected conversions (had consent been universal): ",{"type":31,"tag":51,"props":1106,"children":1108},{"className":1107},[],[1109],{"type":36,"value":1110},"150 × 2 = 300",{"type":36,"value":1112}," (because 50% denied). In reality, you have 210 total conversions (150 + 60). Loss: ",{"type":31,"tag":51,"props":1114,"children":1116},{"className":1115},[],[1117],{"type":36,"value":1118},"(1 - (210 \u002F 300)) × 100 = 30%",{"type":36,"value":755},{"type":31,"tag":86,"props":1121,"children":1123},{"id":1122},"tactics-to-improve-modeling",[1124],{"type":36,"value":1125},"Tactics to Improve Modeling",{"type":31,"tag":32,"props":1127,"children":1128},{},[1129],{"type":36,"value":1130},"Optimize these points to strengthen modeling performance:",{"type":31,"tag":523,"props":1132,"children":1133},{},[1134,1144,1154,1164],{"type":31,"tag":102,"props":1135,"children":1136},{},[1137,1142],{"type":31,"tag":106,"props":1138,"children":1139},{},[1140],{"type":36,"value":1141},"Increase consent-granted traffic:",{"type":36,"value":1143}," Make the \"Accept\" button more prominent in your CMP banner. But avoid dark patterns—only improve layout, don't trick users.",{"type":31,"tag":102,"props":1145,"children":1146},{},[1147,1152],{"type":31,"tag":106,"props":1148,"children":1149},{},[1150],{"type":36,"value":1151},"Add funnel events:",{"type":36,"value":1153}," Send not just purchase but also add_to_cart, begin_checkout to Google Ads. The model captures broader intent signals.",{"type":31,"tag":102,"props":1155,"children":1156},{},[1157,1162],{"type":31,"tag":106,"props":1158,"children":1159},{},[1160],{"type":36,"value":1161},"Offline conversion import:",{"type":36,"value":1163}," Import real order data from your backend into Google Ads. This bypasses modeling but has API limits (2,000 conversions\u002Faccount daily).",{"type":31,"tag":102,"props":1165,"children":1166},{},[1167,1172],{"type":31,"tag":106,"props":1168,"children":1169},{},[1170],{"type":36,"value":1171},"Enhanced conversions:",{"type":36,"value":1173}," Send email\u002Fphone hashes with conversion events. This enables first-party matching and improves modeling accuracy.",{"type":31,"tag":32,"props":1175,"children":1176},{},[1177,1179,1185],{"type":36,"value":1178},"Note: Enhanced conversions inhabit a GDPR gray zone. If a user consented, sending hashed email is legal; if they denied consent, sending even hashed data is a violation. So only trigger enhanced conversions when ",{"type":31,"tag":51,"props":1180,"children":1182},{"className":1181},[],[1183],{"type":36,"value":1184},"ad_user_data: granted",{"type":36,"value":755},{"type":31,"tag":39,"props":1187,"children":1189},{"id":1188},"real-world-tradeoffs-compliance-vs-performance",[1190],{"type":36,"value":1191},"Real-World Tradeoffs: Compliance vs. Performance",{"type":31,"tag":32,"props":1193,"children":1194},{},[1195],{"type":36,"value":1196},"Finally, let's see the tradeoffs between three consent strategy approaches:",{"type":31,"tag":584,"props":1198,"children":1199},{},[1200,1231],{"type":31,"tag":588,"props":1201,"children":1202},{},[1203],{"type":31,"tag":592,"props":1204,"children":1205},{},[1206,1211,1216,1221,1226],{"type":31,"tag":596,"props":1207,"children":1208},{},[1209],{"type":36,"value":1210},"Approach",{"type":31,"tag":596,"props":1212,"children":1213},{},[1214],{"type":36,"value":1215},"Consent Denial Rate",{"type":31,"tag":596,"props":1217,"children":1218},{},[1219],{"type":36,"value":1220},"Modeling Recovery",{"type":31,"tag":596,"props":1222,"children":1223},{},[1224],{"type":36,"value":1225},"ROAS Impact",{"type":31,"tag":596,"props":1227,"children":1228},{},[1229],{"type":36,"value":1230},"GDPR Risk",{"type":31,"tag":607,"props":1232,"children":1233},{},[1234,1264,1295],{"type":31,"tag":592,"props":1235,"children":1236},{},[1237,1245,1250,1254,1259],{"type":31,"tag":614,"props":1238,"children":1239},{},[1240],{"type":31,"tag":106,"props":1241,"children":1242},{},[1243],{"type":36,"value":1244},"Strict (no pre-checks)",{"type":31,"tag":614,"props":1246,"children":1247},{},[1248],{"type":36,"value":1249},"60-70%",{"type":31,"tag":614,"props":1251,"children":1252},{},[1253],{"type":36,"value":1249},{"type":31,"tag":614,"props":1255,"children":1256},{},[1257],{"type":36,"value":1258},"−25% ROAS",{"type":31,"tag":614,"props":1260,"children":1261},{},[1262],{"type":36,"value":1263},"Low",{"type":31,"tag":592,"props":1265,"children":1266},{},[1267,1275,1280,1285,1290],{"type":31,"tag":614,"props":1268,"children":1269},{},[1270],{"type":31,"tag":106,"props":1271,"children":1272},{},[1273],{"type":36,"value":1274},"Balanced (legitimate interest)",{"type":31,"tag":614,"props":1276,"children":1277},{},[1278],{"type":36,"value":1279},"40-50%",{"type":31,"tag":614,"props":1281,"children":1282},{},[1283],{"type":36,"value":1284},"70-80%",{"type":31,"tag":614,"props":1286,"children":1287},{},[1288],{"type":36,"value":1289},"−15% ROAS",{"type":31,"tag":614,"props":1291,"children":1292},{},[1293],{"type":36,"value":1294},"Medium (Turkey: unclear)",{"type":31,"tag":592,"props":1296,"children":1297},{},[1298,1306,1311,1316,1321],{"type":31,"tag":614,"props":1299,"children":1300},{},[1301],{"type":31,"tag":106,"props":1302,"children":1303},{},[1304],{"type":36,"value":1305},"Aggressive (pre-checked)",{"type":31,"tag":614,"props":1307,"children":1308},{},[1309],{"type":36,"value":1310},"20-30%",{"type":31,"tag":614,"props":1312,"children":1313},{},[1314],{"type":36,"value":1315},"80-90%",{"type":31,"tag":614,"props":1317,"children":1318},{},[1319],{"type":36,"value":1320},"−5% ROAS",{"type":31,"tag":614,"props":1322,"children":1323},{},[1324],{"type":36,"value":1325},"High (GDPR violation)",{"type":31,"tag":32,"props":1327,"children":1328},{},[1329,1331,1336,1338,1347],{"type":36,"value":1330},"Roibase's recommendation: ",{"type":31,"tag":106,"props":1332,"children":1333},{},[1334],{"type":36,"value":1335},"Balanced approach + sGTM.",{"type":36,"value":1337}," Enable legitimate interest in your CMP, keep Purposes 2-7-9-10 active, but don't pre-check boxes. Relay backend conversion signals to Google via server-side GTM. This keeps consent denial at 40-50%, modeling loss at ~15%, and preserves bidding power for your ",{"type":31,"tag":1339,"props":1340,"children":1344},"a",{"href":1341,"rel":1342},"https:\u002F\u002Fwww.roibase.com.tr\u002Fen\u002Fppc",[1343],"nofollow",[1345],{"type":36,"value":1346},"performance marketing",{"type":36,"value":1348}," campaigns.",{"type":31,"tag":32,"props":1350,"children":1351},{},[1352,1354,1359],{"type":36,"value":1353},"If you have Consent Mode implemented but modeling isn't working, run through the checklist above. In most cases, the issue is either the CMP loading after GTM or the ",{"type":31,"tag":51,"props":1355,"children":1357},{"className":1356},[],[1358],{"type":36,"value":56},{"type":36,"value":1360}," parameter missing entirely. Use Google Tag Assistant and sGTM preview mode to debug—watch consent pings flow in real time.",{"type":31,"tag":1362,"props":1363,"children":1364},"style",{},[1365],{"type":36,"value":1366},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":15,"searchDepth":260,"depth":260,"links":1368},[1369,1372,1375,1378,1381],{"id":41,"depth":238,"text":44,"children":1370},[1371],{"id":88,"depth":260,"text":91},{"id":150,"depth":238,"text":153,"children":1373},[1374],{"id":574,"depth":260,"text":577},{"id":726,"depth":238,"text":729,"children":1376},[1377],{"id":946,"depth":260,"text":949},{"id":1022,"depth":238,"text":1025,"children":1379},[1380],{"id":1122,"depth":260,"text":1125},{"id":1188,"depth":238,"text":1191},"markdown","content:en:marketing:consent-mode-v2-ve-tcf-modeling-loss-minimize.md","content","en\u002Fmarketing\u002Fconsent-mode-v2-ve-tcf-modeling-loss-minimize.md","en\u002Fmarketing\u002Fconsent-mode-v2-ve-tcf-modeling-loss-minimize","md",1785967486926]