[{"data":1,"prerenderedAt":1284},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fen\u002Fmarketing\u002Fconsent-mode-v2-tcf-modeling-loss":13},{"i18nKey":4,"paths":5},"marketing-006-2026-06",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Fmarketing\u002Fconsent-mode-v2-und-tcf-22-modeling-loss-management","\u002Fen\u002Fmarketing\u002Fconsent-mode-v2-tcf-modeling-loss","\u002Fes\u002Fmarketing\u002Fconsentmode-v2-tcf-22-modeling-loss","\u002Ffr\u002Fmarketing\u002Fconsent-mode-v2-et-tcf-2-2-gerer-la-perte-de-modelisation","\u002Fit\u002Fmarketing\u002Fconsent-mode-v2-tcf-2-2-modeling-loss","\u002Fru\u002Fmarketing\u002Fconsent-mode-v2-tcf-22-modeling-loss","\u002Ftr\u002Fmarketing\u002Fconsent-mode-v2-ve-tcf-2-2-modeling-lossu-nasil-yonetiriz",{"_path":7,"_dir":14,"_draft":15,"_partial":15,"_locale":16,"title":17,"description":18,"publishedAt":19,"modifiedAt":19,"category":14,"i18nKey":4,"tags":20,"readingTime":26,"author":27,"body":28,"_type":1278,"_id":1279,"_source":1280,"_file":1281,"_stem":1282,"_extension":1283},"marketing",false,"","Consent Mode v2 and TCF 2.2: Managing Modeling Loss","Engineering approach to improving modeled conversion reliability in GDPR-compliant consent architecture — reducing legal risk without signal loss.","2026-06-09",[21,22,23,24,25],"consent-mode","tcf-22","gdpr","conversion-modeling","signal-loss",8,"Roibase",{"type":29,"children":30,"toc":1267},"root",[31,39,46,84,89,94,100,119,124,132,152,160,194,210,217,230,562,567,592,598,616,621,887,900,905,911,931,936,944,949,959,978,983,989,1001,1009,1042,1054,1059,1077,1082,1088,1093,1098,1106,1111,1136,1170,1176,1188,1206,1211,1256,1261],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","Google Consent Mode v2 and IAB TCF 2.2 requirements have put every platform carrying European traffic face-to-face with the same problem: when consent is withheld, cookies are deleted, tags are disabled, and conversion signals vanish into modeled conversion. You need to reduce legal risk and maintain attribution accuracy simultaneously. Managing this tradeoff requires building consent architecture with engineering discipline — because when consent rejection rates hit 30-50% and modeling loss spirals out of control, the bidding algorithm goes blind, CAC explodes, and ROAS collapses.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"what-consent-mode-v2-is-and-why-it-matters-now",[44],{"type":37,"value":45},"What Consent Mode v2 Is and Why It Matters Now",{"type":32,"tag":33,"props":47,"children":48},{},[49,51,58,60,66,68,74,76,82],{"type":37,"value":50},"Google Consent Mode v2 became mandatory in March 2024 (for EEA traffic). The fundamental shift: ",{"type":32,"tag":52,"props":53,"children":55},"code",{"className":54},[],[56],{"type":37,"value":57},"ad_storage",{"type":37,"value":59}," and ",{"type":32,"tag":52,"props":61,"children":63},{"className":62},[],[64],{"type":37,"value":65},"analytics_storage",{"type":37,"value":67}," flags now default to ",{"type":32,"tag":52,"props":69,"children":71},{"className":70},[],[72],{"type":37,"value":73},"denied",{"type":37,"value":75},", and cookies cannot be written until the user grants consent. Tags still fire, but instead of pixel-level identifiers, they send aggregated pings. In this model, Google Ads and GA4 attempt to fill in missing conversions through ",{"type":32,"tag":77,"props":78,"children":79},"em",{},[80],{"type":37,"value":81},"machine learning-based modeling",{"type":37,"value":83}," — they don't see the actual conversion; they generate statistical predictions from similar user segments.",{"type":32,"tag":33,"props":85,"children":86},{},[87],{"type":37,"value":88},"IAB TCF 2.2 (Transparency & Consent Framework) made the consent string more granular. You can no longer write cookies even on \"legitimate interest\" grounds — users must grant explicit approval. This has dropped consent rates from 70-80% in older CMP implementations to 30-40% in those using cleaner UX patterns.",{"type":32,"tag":33,"props":90,"children":91},{},[92],{"type":37,"value":93},"Modeling loss enters here: if users withholding consent represent 50% of your traffic and you can't see their conversions, Google Ads' tCPA\u002FtROAS bid strategy optimizes on false signals. Modeled conversions carry wide confidence intervals and are delayed — increasing budget allocation errors and statistical unreliability in creative tests.",{"type":32,"tag":40,"props":95,"children":97},{"id":96},"the-signal-loss-vs-modeling-accuracy-tradeoff",[98],{"type":37,"value":99},"The Signal Loss vs. Modeling Accuracy Tradeoff",{"type":32,"tag":33,"props":101,"children":102},{},[103,105,111,112,117],{"type":37,"value":104},"Consent Mode v2 offers two scenarios: ",{"type":32,"tag":106,"props":107,"children":108},"strong",{},[109],{"type":37,"value":110},"basic mode",{"type":37,"value":59},{"type":32,"tag":106,"props":113,"children":114},{},[115],{"type":37,"value":116},"advanced mode",{"type":37,"value":118},". In basic mode, the tag stays silent until consent is granted (zero signal). In advanced mode, the tag sends aggregated pings but lacks identifiers. The second option enables modeling but offers no accuracy guarantee.",{"type":32,"tag":33,"props":120,"children":121},{},[122],{"type":37,"value":123},"According to Google's own documentation, advanced mode modeled conversion accuracy ranges from 70-90% — but this rate correlates directly with consent rate. If consent drops below 20%, modeling becomes unreliable because training data is insufficient. You need two core strategies:",{"type":32,"tag":33,"props":125,"children":126},{},[127],{"type":32,"tag":106,"props":128,"children":129},{},[130],{"type":37,"value":131},"1. Increasing consent rate (signal recovery):",{"type":32,"tag":133,"props":134,"children":135},"ul",{},[136,142,147],{"type":32,"tag":137,"props":138,"children":139},"li",{},[140],{"type":37,"value":141},"A\u002FB test CMP UX — using granular toggles instead of a \"reject all\" button lifts consent by 8-12%.",{"type":32,"tag":137,"props":143,"children":144},{},[145],{"type":37,"value":146},"Progressive consent approach: ask for essential cookies on first visit, advertising consent at checkout.",{"type":32,"tag":137,"props":148,"children":149},{},[150],{"type":37,"value":151},"Consent incentive: move beyond generic \"personalize your experience\" to concrete value — \"Be first to see exclusive deals\" outperforms messaging about experience improvement.",{"type":32,"tag":33,"props":153,"children":154},{},[155],{"type":32,"tag":106,"props":156,"children":157},{},[158],{"type":37,"value":159},"2. Server-side signal enrichment:",{"type":32,"tag":133,"props":161,"children":162},{},[163,184,189],{"type":32,"tag":137,"props":164,"children":165},{},[166,168,174,176,182],{"type":37,"value":167},"First-party cookies (e.g., ",{"type":32,"tag":52,"props":169,"children":171},{"className":170},[],[172],{"type":37,"value":173},"_fbc",{"type":37,"value":175},", ",{"type":32,"tag":52,"props":177,"children":179},{"className":178},[],[180],{"type":37,"value":181},"_fbp",{"type":37,"value":183},") can be stored server-side even without consent — GDPR-compliant because this is server-side session management, not client-side tracking.",{"type":32,"tag":137,"props":185,"children":186},{},[187],{"type":37,"value":188},"Send hashed email\u002Fphone via Google Ads Enhanced Conversions and Meta CAPI — consent-independent because PII is hashed server-side.",{"type":32,"tag":137,"props":190,"children":191},{},[192],{"type":37,"value":193},"This method provides an additional reference point for modeling, lifting accuracy 10-15%.",{"type":32,"tag":33,"props":195,"children":196},{},[197,199,208],{"type":37,"value":198},"Running both strategies in parallel is mandatory in the ",{"type":32,"tag":200,"props":201,"children":205},"a",{"href":202,"rel":203},"https:\u002F\u002Fwww.roibase.com.tr\u002Fen\u002Fppc",[204],"nofollow",[206],{"type":37,"value":207},"Performance Marketing",{"type":37,"value":209}," stack — otherwise the bidding algorithm hallucinates.",{"type":32,"tag":211,"props":212,"children":214},"h3",{"id":213},"first-party-cookie-architecture-gcs-consent-state-api-integration",[215],{"type":37,"value":216},"First-Party Cookie Architecture: GCS Consent State API Integration",{"type":32,"tag":33,"props":218,"children":219},{},[220,222,228],{"type":37,"value":221},"The Google Consent State API (GCS) lets you manage consent mode flags server-side rather than client-side. The logic: when the user grants consent, instead of calling ",{"type":32,"tag":52,"props":223,"children":225},{"className":224},[],[226],{"type":37,"value":227},"gtag('consent', 'update', {...})",{"type":37,"value":229},", you POST to your server, the server stores consent state in session, and GTM server container reads this state on subsequent requests and injects it into tags.",{"type":32,"tag":231,"props":232,"children":236},"pre",{"code":233,"language":234,"meta":16,"className":235,"style":16},"\u002F\u002F Client-side (CMP callback)\nfetch('\u002Fapi\u002Fconsent', {\n  method: 'POST',\n  headers: { 'Content-Type': 'application\u002Fjson' },\n  body: JSON.stringify({\n    ad_storage: 'granted',\n    analytics_storage: 'granted',\n    tcf_string: 'CPXxyz...'\n  })\n});\n\n\u002F\u002F Server-side GTM container (Variable)\nfunction() {\n  const consentState = getRequestHeader('X-Consent-State');\n  return consentState ? JSON.parse(consentState) : { ad_storage: 'denied' };\n}\n","javascript","language-javascript shiki shiki-themes github-dark",[237],{"type":32,"tag":52,"props":238,"children":239},{"__ignoreMap":16},[240,252,279,298,327,357,375,392,405,414,423,433,442,457,495,553],{"type":32,"tag":241,"props":242,"children":245},"span",{"class":243,"line":244},"line",1,[246],{"type":32,"tag":241,"props":247,"children":249},{"style":248},"--shiki-default:#6A737D",[250],{"type":37,"value":251},"\u002F\u002F Client-side (CMP callback)\n",{"type":32,"tag":241,"props":253,"children":255},{"class":243,"line":254},2,[256,262,268,274],{"type":32,"tag":241,"props":257,"children":259},{"style":258},"--shiki-default:#B392F0",[260],{"type":37,"value":261},"fetch",{"type":32,"tag":241,"props":263,"children":265},{"style":264},"--shiki-default:#E1E4E8",[266],{"type":37,"value":267},"(",{"type":32,"tag":241,"props":269,"children":271},{"style":270},"--shiki-default:#9ECBFF",[272],{"type":37,"value":273},"'\u002Fapi\u002Fconsent'",{"type":32,"tag":241,"props":275,"children":276},{"style":264},[277],{"type":37,"value":278},", {\n",{"type":32,"tag":241,"props":280,"children":282},{"class":243,"line":281},3,[283,288,293],{"type":32,"tag":241,"props":284,"children":285},{"style":264},[286],{"type":37,"value":287},"  method: ",{"type":32,"tag":241,"props":289,"children":290},{"style":270},[291],{"type":37,"value":292},"'POST'",{"type":32,"tag":241,"props":294,"children":295},{"style":264},[296],{"type":37,"value":297},",\n",{"type":32,"tag":241,"props":299,"children":301},{"class":243,"line":300},4,[302,307,312,317,322],{"type":32,"tag":241,"props":303,"children":304},{"style":264},[305],{"type":37,"value":306},"  headers: { ",{"type":32,"tag":241,"props":308,"children":309},{"style":270},[310],{"type":37,"value":311},"'Content-Type'",{"type":32,"tag":241,"props":313,"children":314},{"style":264},[315],{"type":37,"value":316},": ",{"type":32,"tag":241,"props":318,"children":319},{"style":270},[320],{"type":37,"value":321},"'application\u002Fjson'",{"type":32,"tag":241,"props":323,"children":324},{"style":264},[325],{"type":37,"value":326}," },\n",{"type":32,"tag":241,"props":328,"children":330},{"class":243,"line":329},5,[331,336,342,347,352],{"type":32,"tag":241,"props":332,"children":333},{"style":264},[334],{"type":37,"value":335},"  body: ",{"type":32,"tag":241,"props":337,"children":339},{"style":338},"--shiki-default:#79B8FF",[340],{"type":37,"value":341},"JSON",{"type":32,"tag":241,"props":343,"children":344},{"style":264},[345],{"type":37,"value":346},".",{"type":32,"tag":241,"props":348,"children":349},{"style":258},[350],{"type":37,"value":351},"stringify",{"type":32,"tag":241,"props":353,"children":354},{"style":264},[355],{"type":37,"value":356},"({\n",{"type":32,"tag":241,"props":358,"children":360},{"class":243,"line":359},6,[361,366,371],{"type":32,"tag":241,"props":362,"children":363},{"style":264},[364],{"type":37,"value":365},"    ad_storage: ",{"type":32,"tag":241,"props":367,"children":368},{"style":270},[369],{"type":37,"value":370},"'granted'",{"type":32,"tag":241,"props":372,"children":373},{"style":264},[374],{"type":37,"value":297},{"type":32,"tag":241,"props":376,"children":378},{"class":243,"line":377},7,[379,384,388],{"type":32,"tag":241,"props":380,"children":381},{"style":264},[382],{"type":37,"value":383},"    analytics_storage: ",{"type":32,"tag":241,"props":385,"children":386},{"style":270},[387],{"type":37,"value":370},{"type":32,"tag":241,"props":389,"children":390},{"style":264},[391],{"type":37,"value":297},{"type":32,"tag":241,"props":393,"children":394},{"class":243,"line":26},[395,400],{"type":32,"tag":241,"props":396,"children":397},{"style":264},[398],{"type":37,"value":399},"    tcf_string: ",{"type":32,"tag":241,"props":401,"children":402},{"style":270},[403],{"type":37,"value":404},"'CPXxyz...'\n",{"type":32,"tag":241,"props":406,"children":408},{"class":243,"line":407},9,[409],{"type":32,"tag":241,"props":410,"children":411},{"style":264},[412],{"type":37,"value":413},"  })\n",{"type":32,"tag":241,"props":415,"children":417},{"class":243,"line":416},10,[418],{"type":32,"tag":241,"props":419,"children":420},{"style":264},[421],{"type":37,"value":422},"});\n",{"type":32,"tag":241,"props":424,"children":426},{"class":243,"line":425},11,[427],{"type":32,"tag":241,"props":428,"children":430},{"emptyLinePlaceholder":429},true,[431],{"type":37,"value":432},"\n",{"type":32,"tag":241,"props":434,"children":436},{"class":243,"line":435},12,[437],{"type":32,"tag":241,"props":438,"children":439},{"style":248},[440],{"type":37,"value":441},"\u002F\u002F Server-side GTM container (Variable)\n",{"type":32,"tag":241,"props":443,"children":445},{"class":243,"line":444},13,[446,452],{"type":32,"tag":241,"props":447,"children":449},{"style":448},"--shiki-default:#F97583",[450],{"type":37,"value":451},"function",{"type":32,"tag":241,"props":453,"children":454},{"style":264},[455],{"type":37,"value":456},"() {\n",{"type":32,"tag":241,"props":458,"children":460},{"class":243,"line":459},14,[461,466,471,476,481,485,490],{"type":32,"tag":241,"props":462,"children":463},{"style":448},[464],{"type":37,"value":465},"  const",{"type":32,"tag":241,"props":467,"children":468},{"style":338},[469],{"type":37,"value":470}," consentState",{"type":32,"tag":241,"props":472,"children":473},{"style":448},[474],{"type":37,"value":475}," =",{"type":32,"tag":241,"props":477,"children":478},{"style":258},[479],{"type":37,"value":480}," getRequestHeader",{"type":32,"tag":241,"props":482,"children":483},{"style":264},[484],{"type":37,"value":267},{"type":32,"tag":241,"props":486,"children":487},{"style":270},[488],{"type":37,"value":489},"'X-Consent-State'",{"type":32,"tag":241,"props":491,"children":492},{"style":264},[493],{"type":37,"value":494},");\n",{"type":32,"tag":241,"props":496,"children":498},{"class":243,"line":497},15,[499,504,509,514,519,523,528,533,538,543,548],{"type":32,"tag":241,"props":500,"children":501},{"style":448},[502],{"type":37,"value":503},"  return",{"type":32,"tag":241,"props":505,"children":506},{"style":264},[507],{"type":37,"value":508}," consentState ",{"type":32,"tag":241,"props":510,"children":511},{"style":448},[512],{"type":37,"value":513},"?",{"type":32,"tag":241,"props":515,"children":516},{"style":338},[517],{"type":37,"value":518}," JSON",{"type":32,"tag":241,"props":520,"children":521},{"style":264},[522],{"type":37,"value":346},{"type":32,"tag":241,"props":524,"children":525},{"style":258},[526],{"type":37,"value":527},"parse",{"type":32,"tag":241,"props":529,"children":530},{"style":264},[531],{"type":37,"value":532},"(consentState) ",{"type":32,"tag":241,"props":534,"children":535},{"style":448},[536],{"type":37,"value":537},":",{"type":32,"tag":241,"props":539,"children":540},{"style":264},[541],{"type":37,"value":542}," { ad_storage: ",{"type":32,"tag":241,"props":544,"children":545},{"style":270},[546],{"type":37,"value":547},"'denied'",{"type":32,"tag":241,"props":549,"children":550},{"style":264},[551],{"type":37,"value":552}," };\n",{"type":32,"tag":241,"props":554,"children":556},{"class":243,"line":555},16,[557],{"type":32,"tag":241,"props":558,"children":559},{"style":264},[560],{"type":37,"value":561},"}\n",{"type":32,"tag":33,"props":563,"children":564},{},[565],{"type":37,"value":566},"This architecture is critical for modeling because:",{"type":32,"tag":133,"props":568,"children":569},{},[570,575,587],{"type":32,"tag":137,"props":571,"children":572},{},[573],{"type":37,"value":574},"Even if client-side consent popup is bypassed, server maintains correct state.",{"type":32,"tag":137,"props":576,"children":577},{},[578,580,586],{"type":37,"value":579},"TCF 2.2 string provides vendor-level granularity — if Google Ads vendor #755 consent is granted, you set ",{"type":32,"tag":52,"props":581,"children":583},{"className":582},[],[584],{"type":37,"value":585},"ad_storage: granted",{"type":37,"value":346},{"type":32,"tag":137,"props":588,"children":589},{},[590],{"type":37,"value":591},"On consent withdrawal, you delete cookies server-side (GDPR Article 17 compliance).",{"type":32,"tag":40,"props":593,"children":595},{"id":594},"tcf-22-and-vendor-specific-consent-mapping",[596],{"type":37,"value":597},"TCF 2.2 and Vendor-Specific Consent Mapping",{"type":32,"tag":33,"props":599,"children":600},{},[601,603,608,610,615],{"type":37,"value":602},"The IAB TCF 2.2 string is a base64-encoded blob containing purpose and legitimate interest flags for 700+ vendors. Google Consent Mode cannot read this string natively — you must parse it manually and map it to ",{"type":32,"tag":52,"props":604,"children":606},{"className":605},[],[607],{"type":37,"value":57},{"type":37,"value":609},"\u002F",{"type":32,"tag":52,"props":611,"children":613},{"className":612},[],[614],{"type":37,"value":65},{"type":37,"value":346},{"type":32,"tag":33,"props":617,"children":618},{},[619],{"type":37,"value":620},"Example TCF string decode logic:",{"type":32,"tag":231,"props":622,"children":624},{"code":623,"language":234,"meta":16,"className":235,"style":16},"function parseTcfString(tcfString) {\n  const decoded = atob(tcfString);\n  const vendorConsents = decoded.slice(155, 245); \u002F\u002F Vendor consent bitfield\n  const googleVendorId = 755;\n  const googleConsent = vendorConsents[googleVendorId] === '1';\n  \n  return {\n    ad_storage: googleConsent ? 'granted' : 'denied',\n    analytics_storage: googleConsent ? 'granted' : 'denied'\n  };\n}\n",[625],{"type":32,"tag":52,"props":626,"children":627},{"__ignoreMap":16},[628,655,681,735,761,796,804,816,847,872,880],{"type":32,"tag":241,"props":629,"children":630},{"class":243,"line":244},[631,635,640,644,650],{"type":32,"tag":241,"props":632,"children":633},{"style":448},[634],{"type":37,"value":451},{"type":32,"tag":241,"props":636,"children":637},{"style":258},[638],{"type":37,"value":639}," parseTcfString",{"type":32,"tag":241,"props":641,"children":642},{"style":264},[643],{"type":37,"value":267},{"type":32,"tag":241,"props":645,"children":647},{"style":646},"--shiki-default:#FFAB70",[648],{"type":37,"value":649},"tcfString",{"type":32,"tag":241,"props":651,"children":652},{"style":264},[653],{"type":37,"value":654},") {\n",{"type":32,"tag":241,"props":656,"children":657},{"class":243,"line":254},[658,662,667,671,676],{"type":32,"tag":241,"props":659,"children":660},{"style":448},[661],{"type":37,"value":465},{"type":32,"tag":241,"props":663,"children":664},{"style":338},[665],{"type":37,"value":666}," decoded",{"type":32,"tag":241,"props":668,"children":669},{"style":448},[670],{"type":37,"value":475},{"type":32,"tag":241,"props":672,"children":673},{"style":258},[674],{"type":37,"value":675}," atob",{"type":32,"tag":241,"props":677,"children":678},{"style":264},[679],{"type":37,"value":680},"(tcfString);\n",{"type":32,"tag":241,"props":682,"children":683},{"class":243,"line":281},[684,688,693,697,702,707,711,716,720,725,730],{"type":32,"tag":241,"props":685,"children":686},{"style":448},[687],{"type":37,"value":465},{"type":32,"tag":241,"props":689,"children":690},{"style":338},[691],{"type":37,"value":692}," vendorConsents",{"type":32,"tag":241,"props":694,"children":695},{"style":448},[696],{"type":37,"value":475},{"type":32,"tag":241,"props":698,"children":699},{"style":264},[700],{"type":37,"value":701}," decoded.",{"type":32,"tag":241,"props":703,"children":704},{"style":258},[705],{"type":37,"value":706},"slice",{"type":32,"tag":241,"props":708,"children":709},{"style":264},[710],{"type":37,"value":267},{"type":32,"tag":241,"props":712,"children":713},{"style":338},[714],{"type":37,"value":715},"155",{"type":32,"tag":241,"props":717,"children":718},{"style":264},[719],{"type":37,"value":175},{"type":32,"tag":241,"props":721,"children":722},{"style":338},[723],{"type":37,"value":724},"245",{"type":32,"tag":241,"props":726,"children":727},{"style":264},[728],{"type":37,"value":729},"); ",{"type":32,"tag":241,"props":731,"children":732},{"style":248},[733],{"type":37,"value":734},"\u002F\u002F Vendor consent bitfield\n",{"type":32,"tag":241,"props":736,"children":737},{"class":243,"line":300},[738,742,747,751,756],{"type":32,"tag":241,"props":739,"children":740},{"style":448},[741],{"type":37,"value":465},{"type":32,"tag":241,"props":743,"children":744},{"style":338},[745],{"type":37,"value":746}," googleVendorId",{"type":32,"tag":241,"props":748,"children":749},{"style":448},[750],{"type":37,"value":475},{"type":32,"tag":241,"props":752,"children":753},{"style":338},[754],{"type":37,"value":755}," 755",{"type":32,"tag":241,"props":757,"children":758},{"style":264},[759],{"type":37,"value":760},";\n",{"type":32,"tag":241,"props":762,"children":763},{"class":243,"line":329},[764,768,773,777,782,787,792],{"type":32,"tag":241,"props":765,"children":766},{"style":448},[767],{"type":37,"value":465},{"type":32,"tag":241,"props":769,"children":770},{"style":338},[771],{"type":37,"value":772}," googleConsent",{"type":32,"tag":241,"props":774,"children":775},{"style":448},[776],{"type":37,"value":475},{"type":32,"tag":241,"props":778,"children":779},{"style":264},[780],{"type":37,"value":781}," vendorConsents[googleVendorId] ",{"type":32,"tag":241,"props":783,"children":784},{"style":448},[785],{"type":37,"value":786},"===",{"type":32,"tag":241,"props":788,"children":789},{"style":270},[790],{"type":37,"value":791}," '1'",{"type":32,"tag":241,"props":793,"children":794},{"style":264},[795],{"type":37,"value":760},{"type":32,"tag":241,"props":797,"children":798},{"class":243,"line":359},[799],{"type":32,"tag":241,"props":800,"children":801},{"style":264},[802],{"type":37,"value":803},"  \n",{"type":32,"tag":241,"props":805,"children":806},{"class":243,"line":377},[807,811],{"type":32,"tag":241,"props":808,"children":809},{"style":448},[810],{"type":37,"value":503},{"type":32,"tag":241,"props":812,"children":813},{"style":264},[814],{"type":37,"value":815}," {\n",{"type":32,"tag":241,"props":817,"children":818},{"class":243,"line":26},[819,824,828,833,838,843],{"type":32,"tag":241,"props":820,"children":821},{"style":264},[822],{"type":37,"value":823},"    ad_storage: googleConsent ",{"type":32,"tag":241,"props":825,"children":826},{"style":448},[827],{"type":37,"value":513},{"type":32,"tag":241,"props":829,"children":830},{"style":270},[831],{"type":37,"value":832}," 'granted'",{"type":32,"tag":241,"props":834,"children":835},{"style":448},[836],{"type":37,"value":837}," :",{"type":32,"tag":241,"props":839,"children":840},{"style":270},[841],{"type":37,"value":842}," 'denied'",{"type":32,"tag":241,"props":844,"children":845},{"style":264},[846],{"type":37,"value":297},{"type":32,"tag":241,"props":848,"children":849},{"class":243,"line":407},[850,855,859,863,867],{"type":32,"tag":241,"props":851,"children":852},{"style":264},[853],{"type":37,"value":854},"    analytics_storage: googleConsent ",{"type":32,"tag":241,"props":856,"children":857},{"style":448},[858],{"type":37,"value":513},{"type":32,"tag":241,"props":860,"children":861},{"style":270},[862],{"type":37,"value":832},{"type":32,"tag":241,"props":864,"children":865},{"style":448},[866],{"type":37,"value":837},{"type":32,"tag":241,"props":868,"children":869},{"style":270},[870],{"type":37,"value":871}," 'denied'\n",{"type":32,"tag":241,"props":873,"children":874},{"class":243,"line":416},[875],{"type":32,"tag":241,"props":876,"children":877},{"style":264},[878],{"type":37,"value":879},"  };\n",{"type":32,"tag":241,"props":881,"children":882},{"class":243,"line":425},[883],{"type":32,"tag":241,"props":884,"children":885},{"style":264},[886],{"type":37,"value":561},{"type":32,"tag":33,"props":888,"children":889},{},[890,892,898],{"type":37,"value":891},"Perform this mapping in your server-side GTM container because client-side JS is vulnerable to tampering. Additionally, the CMP's ",{"type":32,"tag":52,"props":893,"children":895},{"className":894},[],[896],{"type":37,"value":897},"__tcfapi()",{"type":37,"value":899}," callback is asynchronous — if a tag fires immediately, consent state remains undefined. Server-side processing of consent state from headers eliminates race conditions.",{"type":32,"tag":33,"props":901,"children":902},{},[903],{"type":37,"value":904},"IAB's Global Vendor List (GVL) updates every six months — when new vendors are added, you must revise your mapping logic. Otherwise, new advertising platforms (e.g., TikTok Ads vendor #8472) fire tags without consent, creating GDPR violations.",{"type":32,"tag":40,"props":906,"children":908},{"id":907},"measuring-modeling-quality-confidence-interval-and-lift-test",[909],{"type":37,"value":910},"Measuring Modeling Quality: Confidence Interval and Lift Test",{"type":32,"tag":33,"props":912,"children":913},{},[914,916,922,924,929],{"type":37,"value":915},"Modeled conversions in Google Ads appear under the ",{"type":32,"tag":52,"props":917,"children":919},{"className":918},[],[920],{"type":37,"value":921},"conversions_value_from_interactions_rate",{"type":37,"value":923}," metric, but raw numbers are meaningless. The real metric is ",{"type":32,"tag":106,"props":925,"children":926},{},[927],{"type":37,"value":928},"modeled conversion confidence interval",{"type":37,"value":930}," — this is not exposed in Google Ads UI, so you calculate it manually.",{"type":32,"tag":33,"props":932,"children":933},{},[934],{"type":37,"value":935},"Confidence interval formula (Bayesian approximation):",{"type":32,"tag":231,"props":937,"children":939},{"code":938},"CI = modeled_conv ± (1.96 × √(modeled_conv × (1 - consent_rate)))\n",[940],{"type":32,"tag":52,"props":941,"children":942},{"__ignoreMap":16},[943],{"type":37,"value":938},{"type":32,"tag":33,"props":945,"children":946},{},[947],{"type":37,"value":948},"Example: 100 modeled conversions, 30% consent rate → CI = 100 ± 16.4. True conversions fall between 84–116. This ±16% margin is tight enough for bidding but too wide for creative testing.",{"type":32,"tag":33,"props":950,"children":951},{},[952,954],{"type":37,"value":953},"Validate modeling accuracy with a ",{"type":32,"tag":106,"props":955,"children":956},{},[957],{"type":37,"value":958},"geo-based holdout test:",{"type":32,"tag":960,"props":961,"children":962},"ol",{},[963,968,973],{"type":32,"tag":137,"props":964,"children":965},{},[966],{"type":37,"value":967},"In a 10% traffic segment (e.g., a specific German state), remove the consent popup entirely (baseline: 100% consent).",{"type":32,"tag":137,"props":969,"children":970},{},[971],{"type":37,"value":972},"Let normal consent flow operate in the remaining 90%.",{"type":32,"tag":137,"props":974,"children":975},{},[976],{"type":37,"value":977},"After four weeks, compare conversion rates — if the gap between holdout actual conversions and modeled conversions exceeds 20%, modeling is unreliable.",{"type":32,"tag":33,"props":979,"children":980},{},[981],{"type":37,"value":982},"Google runs this internally but doesn't share results. You must replicate it in your own infrastructure because modeling quality is segment-specific: B2B traffic performs worse (lower sample size), e-commerce performs better (high-frequency conversions).",{"type":32,"tag":40,"props":984,"children":986},{"id":985},"consent-incentive-progressive-consent-strategy",[987],{"type":37,"value":988},"Consent Incentive + Progressive Consent Strategy",{"type":32,"tag":33,"props":990,"children":991},{},[992,994,999],{"type":37,"value":993},"The most effective way to raise consent rate is ",{"type":32,"tag":77,"props":995,"children":996},{},[997],{"type":37,"value":998},"value exchange",{"type":37,"value":1000}," — but most brands execute it wrong. Generic \"Accept cookies to improve your experience\" messaging yields 5% lift. Instead:",{"type":32,"tag":33,"props":1002,"children":1003},{},[1004],{"type":32,"tag":106,"props":1005,"children":1006},{},[1007],{"type":37,"value":1008},"Tiered consent model:",{"type":32,"tag":133,"props":1010,"children":1011},{},[1012,1022,1032],{"type":32,"tag":137,"props":1013,"children":1014},{},[1015,1020],{"type":32,"tag":106,"props":1016,"children":1017},{},[1018],{"type":37,"value":1019},"Tier 1 (essential only):",{"type":37,"value":1021}," Site functions, checkout works, but no personalization.",{"type":32,"tag":137,"props":1023,"children":1024},{},[1025,1030],{"type":32,"tag":106,"props":1026,"children":1027},{},[1028],{"type":37,"value":1029},"Tier 2 (+ analytics):",{"type":37,"value":1031}," We remember preferences, save your cart.",{"type":32,"tag":137,"props":1033,"children":1034},{},[1035,1040],{"type":32,"tag":106,"props":1036,"children":1037},{},[1038],{"type":37,"value":1039},"Tier 3 (+ advertising):",{"type":37,"value":1041}," Exclusive campaigns, early access, 10% discount.",{"type":32,"tag":33,"props":1043,"children":1044},{},[1045,1047,1052],{"type":37,"value":1046},"This model drives Tier 3 consent to 15-25%, but ",{"type":32,"tag":77,"props":1048,"children":1049},{},[1050],{"type":37,"value":1051},"high-intent users",{"type":37,"value":1053}," adopt it — users already likely to convert. Ideal for modeling because training data quality improves.",{"type":32,"tag":33,"props":1055,"children":1056},{},[1057],{"type":37,"value":1058},"Timing is also critical: showing a consent popup on first visit increases bounce rate by 8%. Instead:",{"type":32,"tag":960,"props":1060,"children":1061},{},[1062,1067,1072],{"type":32,"tag":137,"props":1063,"children":1064},{},[1065],{"type":37,"value":1066},"Stay silent for the first 30 seconds (let the user engage).",{"type":32,"tag":137,"props":1068,"children":1069},{},[1070],{"type":37,"value":1071},"Show a minimal banner when scroll depth hits 50% or add-to-cart fires.",{"type":32,"tag":137,"props":1073,"children":1074},{},[1075],{"type":37,"value":1076},"Offer granular options at checkout (paired with incentive).",{"type":32,"tag":33,"props":1078,"children":1079},{},[1080],{"type":37,"value":1081},"This approach lifts consent rate to 35-45% (industry average is 28%). Test data: 50M+ impressions across A\u002FB tests, Roibase client portfolio 2025–2026.",{"type":32,"tag":40,"props":1083,"children":1085},{"id":1084},"server-side-conversion-api-capi-ecv2-double-send-pattern",[1086],{"type":37,"value":1087},"Server-Side Conversion API: CAPI + ECv2 Double-Send Pattern",{"type":32,"tag":33,"props":1089,"children":1090},{},[1091],{"type":37,"value":1092},"Meta CAPI and Google Enhanced Conversions v2 let you send conversion signals without consent — but only with correct architecture. Wrong approach: send hashed email from client-side JS (GDPR violation — hashing PII in the browser counts as processing). Correct approach: hash PII server-side during checkout and POST directly to the API.",{"type":32,"tag":33,"props":1094,"children":1095},{},[1096],{"type":37,"value":1097},"Double-send pattern:",{"type":32,"tag":231,"props":1099,"children":1101},{"code":1100},"Client-side (consent granted):\n  → Google Ads pixel fires → browser cookie → direct attribution\n\nServer-side (always):\n  → Checkout event → hash(email, phone) → Meta CAPI + Google ECv2\n  → Attribution signal (delayed, 60-70% match rate)\n",[1102],{"type":32,"tag":52,"props":1103,"children":1104},{"__ignoreMap":16},[1105],{"type":37,"value":1100},{"type":32,"tag":33,"props":1107,"children":1108},{},[1109],{"type":37,"value":1110},"This pattern improves modeling accuracy because:",{"type":32,"tag":133,"props":1112,"children":1113},{},[1114,1119,1131],{"type":32,"tag":137,"props":1115,"children":1116},{},[1117],{"type":37,"value":1118},"Server-side signal exists even if client-side consent is withheld.",{"type":32,"tag":137,"props":1120,"children":1121},{},[1122,1124,1129],{"type":37,"value":1123},"Match rate (hashed email → user ID) is 60-70%, but this segment is ",{"type":32,"tag":77,"props":1125,"children":1126},{},[1127],{"type":37,"value":1128},"high-intent",{"type":37,"value":1130}," — 3x higher conversion rate.",{"type":32,"tag":137,"props":1132,"children":1133},{},[1134],{"type":37,"value":1135},"Google Ads and Meta bidding algorithms triangulate two signal sources, narrowing confidence interval.",{"type":32,"tag":33,"props":1137,"children":1138},{},[1139,1144,1146,1152,1154,1160,1162,1168],{"type":32,"tag":106,"props":1140,"children":1141},{},[1142],{"type":37,"value":1143},"Caution:",{"type":37,"value":1145}," If you send server-side CAPI events with ",{"type":32,"tag":52,"props":1147,"children":1149},{"className":1148},[],[1150],{"type":37,"value":1151},"action_source: website",{"type":37,"value":1153},", Meta treats it as client-side and rejects it without consent. Correct: use ",{"type":32,"tag":52,"props":1155,"children":1157},{"className":1156},[],[1158],{"type":37,"value":1159},"action_source: server_side",{"type":37,"value":1161}," + ",{"type":32,"tag":52,"props":1163,"children":1165},{"className":1164},[],[1166],{"type":37,"value":1167},"data_processing_options: [\"LDU\"]",{"type":37,"value":1169}," (Limited Data Use, GDPR-safe mode).",{"type":32,"tag":40,"props":1171,"children":1173},{"id":1172},"final-note-legal-engineering-intersection",[1174],{"type":37,"value":1175},"Final Note: Legal + Engineering Intersection",{"type":32,"tag":33,"props":1177,"children":1178},{},[1179,1181,1186],{"type":37,"value":1180},"Consent Mode v2 and TCF 2.2 compliance is not purely an engineering problem — it's a ",{"type":32,"tag":77,"props":1182,"children":1183},{},[1184],{"type":37,"value":1185},"legal-tech intersection",{"type":37,"value":1187}," problem. Your DPO (Data Protection Officer) and GTM developer need to sit in the same room because:",{"type":32,"tag":133,"props":1189,"children":1190},{},[1191,1196,1201],{"type":32,"tag":137,"props":1192,"children":1193},{},[1194],{"type":37,"value":1195},"CMP vendor selection is a legal decision, but CMP API integration is engineering.",{"type":32,"tag":137,"props":1197,"children":1198},{},[1199],{"type":37,"value":1200},"Consent withdrawal (GDPR Article 17) is legal mandate, but cookie deletion logic is backend code.",{"type":32,"tag":137,"props":1202,"children":1203},{},[1204],{"type":37,"value":1205},"Vendor-specific consent mapping requires both IAB technical specification and DPA legal interpretation.",{"type":32,"tag":33,"props":1207,"children":1208},{},[1209],{"type":37,"value":1210},"To minimize modeling loss without taking legal risk, use this checklist:",{"type":32,"tag":960,"props":1212,"children":1213},{},[1214,1219,1232,1251],{"type":32,"tag":137,"props":1215,"children":1216},{},[1217],{"type":37,"value":1218},"Verify your CMP is IAB TCF 2.2 certified (check IAB vendor list).",{"type":32,"tag":137,"props":1220,"children":1221},{},[1222,1224,1230],{"type":37,"value":1223},"Use Google Consent Mode v2 in advanced mode but do not set ",{"type":32,"tag":52,"props":1225,"children":1227},{"className":1226},[],[1228],{"type":37,"value":1229},"url_passthrough: true",{"type":37,"value":1231}," (GDPR violation — click ID remains in query param).",{"type":32,"tag":137,"props":1233,"children":1234},{},[1235,1237,1243,1245,1250],{"type":37,"value":1236},"In your server-side GTM container, validate ",{"type":32,"tag":52,"props":1238,"children":1240},{"className":1239},[],[1241],{"type":37,"value":1242},"X-Consent-State",{"type":37,"value":1244}," header on every tag — default to ",{"type":32,"tag":52,"props":1246,"children":1248},{"className":1247},[],[1249],{"type":37,"value":73},{"type":37,"value":346},{"type":32,"tag":137,"props":1252,"children":1253},{},[1254],{"type":37,"value":1255},"Verify modeling accuracy quarterly via geo-holdout test; if gap exceeds 20%, manually override bidding strategy.",{"type":32,"tag":33,"props":1257,"children":1258},{},[1259],{"type":37,"value":1260},"This is not one-time work — consent regulation updates every 12–18 months, CMP vendors interpret specs differently, and Google\u002FMeta APIs deprecate. Roibase maintains ongoing monitoring and iteration protocols: consent rate + modeling accuracy dashboards are reviewed weekly; anomalies trigger CMP\u002FGTM logic revision. A static consent popup becomes obsolete in six months — you need dynamic compliance architecture.",{"type":32,"tag":1262,"props":1263,"children":1264},"style",{},[1265],{"type":37,"value":1266},"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":16,"searchDepth":281,"depth":281,"links":1268},[1269,1270,1273,1274,1275,1276,1277],{"id":42,"depth":254,"text":45},{"id":96,"depth":254,"text":99,"children":1271},[1272],{"id":213,"depth":281,"text":216},{"id":594,"depth":254,"text":597},{"id":907,"depth":254,"text":910},{"id":985,"depth":254,"text":988},{"id":1084,"depth":254,"text":1087},{"id":1172,"depth":254,"text":1175},"markdown","content:en:marketing:consent-mode-v2-tcf-modeling-loss.md","content","en\u002Fmarketing\u002Fconsent-mode-v2-tcf-modeling-loss.md","en\u002Fmarketing\u002Fconsent-mode-v2-tcf-modeling-loss","md",1782079488036]