[{"data":1,"prerenderedAt":2179},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fde\u002Fdata\u002Fserver-side-gtm-conversion-api-production":13},{"i18nKey":4,"paths":5},"data-001-2026-06",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Fdata\u002Fserver-side-gtm-conversion-api-production","\u002Fen\u002Fdata\u002Fserver-side-gtm-conversion-api-production","\u002Fes\u002Fdata\u002Fserver-side-gtm-conversion-api-produccion","\u002Ffr\u002Fdata\u002Fserveur-gtm-conversion-api-production","\u002Fit\u002Fdata\u002Fserver-side-gtm-conversion-api-production","\u002Fru\u002Fdata\u002Fserver-side-gtm-conversion-api-production","\u002Ftr\u002Fdata\u002Fserver-side-gtm-ve-conversion-api-sifirdan-productiona",{"_path":6,"_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":2173,"_id":2174,"_source":2175,"_file":2176,"_stem":2177,"_extension":2178},"data",false,"","Server-Side GTM und Conversion API: Von Null zur Production","Cloud Run\u002FWorkers-Deployment, Container-Template, Deduplizierungsstrategien. Technischer Roadmap zur Überführung von Server-Side-Messung in Production.","2026-06-12",[21,22,23,24,25],"server-side-gtm","conversion-api","cloud-run","event-deduplication","privacy-measurement",9,"Roibase",{"type":29,"children":30,"toc":2161},"root",[31,39,46,68,179,184,330,340,350,357,392,431,444,450,473,478,573,578,789,809,833,839,858,896,915,971,977,997,1009,1060,1065,1386,1406,1439,1445,1473,1478,1571,1583,1600,1606,1611,1700,1708,1762,1787,1793,1823,1828,1859,1898,2113,2139,2143,2155],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","Cookie-Löschungen, verschärftes ITP, obligatorischer Consent Mode — browserbasierte Messung erleidet seit 2024 einen Signalverlust von 30–40 %. Client-Side-Tags bieten keine vollständige Sicht mehr. Server-Side-Messung ist der einzige Weg, diese verlorenen Signale zurückzugewinnen. Google Tag Manager Server Container (sGTM) und Meta Conversion API sind die zwei Säulen dieser Architektur. Aber Deployment ist nicht trivial: Container-Hosting, Event-Deduplizierung, Timeout-Management, parametrische Datenanreicherung — jeder Schritt erfordert technische Entscheidungen. Dieser Artikel behandelt die Überführung von sGTM zu Cloud Run oder Cloudflare Workers, CAPI-Integration, Deduplizierungslogik und Production-Checklisten.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"server-side-gtm-container-hosting-cloud-run-vs-workers-vs-app-engine",[44],{"type":37,"value":45},"Server-Side GTM Container Hosting: Cloud Run vs Workers vs App Engine",{"type":32,"tag":33,"props":47,"children":48},{},[49,51,57,59,66],{"type":37,"value":50},"Du kannst den sGTM-Container auf Google Cloud hosten, aber ",{"type":32,"tag":52,"props":53,"children":54},"strong",{},[55],{"type":37,"value":56},"manuelles Deployment ist erforderlich",{"type":37,"value":58},". Bei Verwendung von App Engine Automatic Scaling entstehen Cold Starts von 2–3 Sekunden; bei Peak-Traffic droht ein Event-Drop von 15–20 %. Cloud Run wird bevorzugt: mindestens 1 Instance „always warm\", Concurrency 80–100, Request-Timeout 10 Sekunden. Google stellt ein Dockerfile-Template im öffentlichen Repo zur Verfügung — ",{"type":32,"tag":60,"props":61,"children":63},"code",{"className":62},[],[64],{"type":37,"value":65},"gcr.io\u002Fcloud-tagging-10302018\u002Fgtm-cloud-image:stable",{"type":37,"value":67},". Beim Deployment dieses Image'S in dein Projekt sind 3 Umgebungsvariablen obligatorisch:",{"type":32,"tag":69,"props":70,"children":74},"pre",{"className":71,"code":72,"language":73,"meta":16,"style":16},"language-bash shiki shiki-themes github-dark","CONTAINER_CONFIG=\u003CGTM server container ID>\nPREVIEW_SERVER_URL=https:\u002F\u002F\u003Cpreview-domain>\nRUN_AS_HTTPS_SERVER=true\n","bash",[75],{"type":32,"tag":60,"props":76,"children":77},{"__ignoreMap":16},[78,128,161],{"type":32,"tag":79,"props":80,"children":83},"span",{"class":81,"line":82},"line",1,[84,90,96,102,108,113,118,123],{"type":32,"tag":79,"props":85,"children":87},{"style":86},"--shiki-default:#E1E4E8",[88],{"type":37,"value":89},"CONTAINER_CONFIG",{"type":32,"tag":79,"props":91,"children":93},{"style":92},"--shiki-default:#F97583",[94],{"type":37,"value":95},"=\u003C",{"type":32,"tag":79,"props":97,"children":99},{"style":98},"--shiki-default:#9ECBFF",[100],{"type":37,"value":101},"GTM",{"type":32,"tag":79,"props":103,"children":105},{"style":104},"--shiki-default:#B392F0",[106],{"type":37,"value":107}," server",{"type":32,"tag":79,"props":109,"children":110},{"style":98},[111],{"type":37,"value":112}," container",{"type":32,"tag":79,"props":114,"children":115},{"style":98},[116],{"type":37,"value":117}," I",{"type":32,"tag":79,"props":119,"children":120},{"style":86},[121],{"type":37,"value":122},"D",{"type":32,"tag":79,"props":124,"children":125},{"style":92},[126],{"type":37,"value":127},">\n",{"type":32,"tag":79,"props":129,"children":131},{"class":81,"line":130},2,[132,137,142,147,152,157],{"type":32,"tag":79,"props":133,"children":134},{"style":86},[135],{"type":37,"value":136},"PREVIEW_SERVER_URL",{"type":32,"tag":79,"props":138,"children":139},{"style":92},[140],{"type":37,"value":141},"=",{"type":32,"tag":79,"props":143,"children":144},{"style":98},[145],{"type":37,"value":146},"https:\u002F\u002F",{"type":32,"tag":79,"props":148,"children":149},{"style":92},[150],{"type":37,"value":151},"\u003C",{"type":32,"tag":79,"props":153,"children":154},{"style":98},[155],{"type":37,"value":156},"preview-domain",{"type":32,"tag":79,"props":158,"children":159},{"style":92},[160],{"type":37,"value":127},{"type":32,"tag":79,"props":162,"children":164},{"class":81,"line":163},3,[165,170,174],{"type":32,"tag":79,"props":166,"children":167},{"style":86},[168],{"type":37,"value":169},"RUN_AS_HTTPS_SERVER",{"type":32,"tag":79,"props":171,"children":172},{"style":92},[173],{"type":37,"value":141},{"type":32,"tag":79,"props":175,"children":176},{"style":98},[177],{"type":37,"value":178},"true\n",{"type":32,"tag":33,"props":180,"children":181},{},[182],{"type":37,"value":183},"Beispiel-Deployment-Befehl für Cloud Run:",{"type":32,"tag":69,"props":185,"children":187},{"className":71,"code":186,"language":73,"meta":16,"style":16},"gcloud run deploy sgtm-prod \\\n  --image=gcr.io\u002Fcloud-tagging-10302018\u002Fgtm-cloud-image:stable \\\n  --platform=managed \\\n  --region=europe-west1 \\\n  --set-env-vars=CONTAINER_CONFIG=GTM-XXXXXX,RUN_AS_HTTPS_SERVER=true \\\n  --min-instances=1 \\\n  --max-instances=10 \\\n  --concurrency=80 \\\n  --timeout=10s \\\n  --memory=512Mi\n",[188],{"type":32,"tag":60,"props":189,"children":190},{"__ignoreMap":16},[191,220,232,244,257,270,283,296,309,321],{"type":32,"tag":79,"props":192,"children":193},{"class":81,"line":82},[194,199,204,209,214],{"type":32,"tag":79,"props":195,"children":196},{"style":104},[197],{"type":37,"value":198},"gcloud",{"type":32,"tag":79,"props":200,"children":201},{"style":98},[202],{"type":37,"value":203}," run",{"type":32,"tag":79,"props":205,"children":206},{"style":98},[207],{"type":37,"value":208}," deploy",{"type":32,"tag":79,"props":210,"children":211},{"style":98},[212],{"type":37,"value":213}," sgtm-prod",{"type":32,"tag":79,"props":215,"children":217},{"style":216},"--shiki-default:#79B8FF",[218],{"type":37,"value":219}," \\\n",{"type":32,"tag":79,"props":221,"children":222},{"class":81,"line":130},[223,228],{"type":32,"tag":79,"props":224,"children":225},{"style":216},[226],{"type":37,"value":227},"  --image=gcr.io\u002Fcloud-tagging-10302018\u002Fgtm-cloud-image:stable",{"type":32,"tag":79,"props":229,"children":230},{"style":216},[231],{"type":37,"value":219},{"type":32,"tag":79,"props":233,"children":234},{"class":81,"line":163},[235,240],{"type":32,"tag":79,"props":236,"children":237},{"style":216},[238],{"type":37,"value":239},"  --platform=managed",{"type":32,"tag":79,"props":241,"children":242},{"style":216},[243],{"type":37,"value":219},{"type":32,"tag":79,"props":245,"children":247},{"class":81,"line":246},4,[248,253],{"type":32,"tag":79,"props":249,"children":250},{"style":216},[251],{"type":37,"value":252},"  --region=europe-west1",{"type":32,"tag":79,"props":254,"children":255},{"style":216},[256],{"type":37,"value":219},{"type":32,"tag":79,"props":258,"children":260},{"class":81,"line":259},5,[261,266],{"type":32,"tag":79,"props":262,"children":263},{"style":216},[264],{"type":37,"value":265},"  --set-env-vars=CONTAINER_CONFIG=GTM-XXXXXX,RUN_AS_HTTPS_SERVER=true",{"type":32,"tag":79,"props":267,"children":268},{"style":216},[269],{"type":37,"value":219},{"type":32,"tag":79,"props":271,"children":273},{"class":81,"line":272},6,[274,279],{"type":32,"tag":79,"props":275,"children":276},{"style":216},[277],{"type":37,"value":278},"  --min-instances=1",{"type":32,"tag":79,"props":280,"children":281},{"style":216},[282],{"type":37,"value":219},{"type":32,"tag":79,"props":284,"children":286},{"class":81,"line":285},7,[287,292],{"type":32,"tag":79,"props":288,"children":289},{"style":216},[290],{"type":37,"value":291},"  --max-instances=10",{"type":32,"tag":79,"props":293,"children":294},{"style":216},[295],{"type":37,"value":219},{"type":32,"tag":79,"props":297,"children":299},{"class":81,"line":298},8,[300,305],{"type":32,"tag":79,"props":301,"children":302},{"style":216},[303],{"type":37,"value":304},"  --concurrency=80",{"type":32,"tag":79,"props":306,"children":307},{"style":216},[308],{"type":37,"value":219},{"type":32,"tag":79,"props":310,"children":311},{"class":81,"line":26},[312,317],{"type":32,"tag":79,"props":313,"children":314},{"style":216},[315],{"type":37,"value":316},"  --timeout=10s",{"type":32,"tag":79,"props":318,"children":319},{"style":216},[320],{"type":37,"value":219},{"type":32,"tag":79,"props":322,"children":324},{"class":81,"line":323},10,[325],{"type":32,"tag":79,"props":326,"children":327},{"style":216},[328],{"type":37,"value":329},"  --memory=512Mi\n",{"type":32,"tag":33,"props":331,"children":332},{},[333,338],{"type":32,"tag":52,"props":334,"children":335},{},[336],{"type":37,"value":337},"Cloudflare Workers als Alternative:",{"type":37,"value":339}," Wenn globale Edge-Latenz Priorität hat, kannst du Workers nutzen. sGTM-Container-Logik muss in die Workers-Runtime portiert werden (nicht nativ unterstützt). Vorteil: Response-Zeiten unter 50ms, Nachteil: eingeschränktes Tag-Template-Ökosystem — du wirst Custom-JavaScript-Tags schreiben müssen.",{"type":32,"tag":33,"props":341,"children":342},{},[343,348],{"type":32,"tag":52,"props":344,"children":345},{},[346],{"type":37,"value":347},"Hosting-Kosten:",{"type":37,"value":349}," Cloud Run kostet bei 1M Requests\u002FMonat ca. 40–60 EUR (1 Instance always-on + Autoscaling). App Engine Flex läuft auf ca. 150–200 EUR. Workers kosten 5 EUR Basis + 0,50 EUR pro Million Requests — deutlich günstiger, aber ohne native sGTM-Unterstützung und zusätzlichem Entwicklungsaufwand.",{"type":32,"tag":351,"props":352,"children":354},"h3",{"id":353},"custom-domain-und-ssl-zertifikat",[355],{"type":37,"value":356},"Custom Domain und SSL-Zertifikat",{"type":32,"tag":33,"props":358,"children":359},{},[360,362,368,370,375,377,382,384,390],{"type":37,"value":361},"Die Standard-Domain von sGTM (",{"type":32,"tag":60,"props":363,"children":365},{"className":364},[],[366],{"type":37,"value":367},"*.run.app",{"type":37,"value":369},") gilt als ",{"type":32,"tag":52,"props":371,"children":372},{},[373],{"type":37,"value":374},"Third-Party",{"type":37,"value":376}," — Safari ITP löscht Cookies von dieser Domain nach 7 Tagen. Daher ist eine ",{"type":32,"tag":52,"props":378,"children":379},{},[380],{"type":37,"value":381},"First-Party-Subdomain",{"type":37,"value":383}," wie ",{"type":32,"tag":60,"props":385,"children":387},{"className":386},[],[388],{"type":37,"value":389},"analytics.yoursite.com",{"type":37,"value":391}," erforderlich. Setup mit Cloud Load Balancer + Managed SSL:",{"type":32,"tag":393,"props":394,"children":395},"ol",{},[396,409,414,426],{"type":32,"tag":397,"props":398,"children":399},"li",{},[400,402,407],{"type":37,"value":401},"Füge dem Cloud Run Service eine ",{"type":32,"tag":52,"props":403,"children":404},{},[405],{"type":37,"value":406},"NEG (Network Endpoint Group)",{"type":37,"value":408}," hinzu",{"type":32,"tag":397,"props":410,"children":411},{},[412],{"type":37,"value":413},"Erstelle einen HTTPS Load Balancer, binde die NEG als Backend ein",{"type":32,"tag":397,"props":415,"children":416},{},[417,419,424],{"type":37,"value":418},"Hol ein Google Managed Certificate für ",{"type":32,"tag":60,"props":420,"children":422},{"className":421},[],[423],{"type":37,"value":389},{"type":37,"value":425}," (48 Stunden möglich)",{"type":32,"tag":397,"props":427,"children":428},{},[429],{"type":37,"value":430},"Richte den A-Record deiner DNS auf die IP des Load Balancer's",{"type":32,"tag":33,"props":432,"children":433},{},[434,436,442],{"type":37,"value":435},"Diese Konfiguration ist auf Production-Level obligatorisch. In Test-Umgebungen kannst du mit ",{"type":32,"tag":60,"props":437,"children":439},{"className":438},[],[440],{"type":37,"value":441},"run.app",{"type":37,"value":443}," arbeiten, aber du wirst ITP-Szenarien nicht erkennen.",{"type":32,"tag":40,"props":445,"children":447},{"id":446},"meta-conversion-api-integration-event-deduplizierungsstrategie",[448],{"type":37,"value":449},"Meta Conversion API Integration: Event-Deduplizierungsstrategie",{"type":32,"tag":33,"props":451,"children":452},{},[453,455,460,462,471],{"type":37,"value":454},"Meta CAPI ermöglicht den servergestützten Versand von Pixel-Events über sGTM. Allerdings sendet bereits das ",{"type":32,"tag":52,"props":456,"children":457},{},[458],{"type":37,"value":459},"client-side Meta Pixel",{"type":37,"value":461}," das gleiche Event — bei doppeltem Versand wird die Attribution verzerrt. Meta's offizielle Deduplizierungsmethode: Füge jedem Event einen ",{"type":32,"tag":52,"props":463,"children":464},{},[465],{"type":32,"tag":60,"props":466,"children":468},{"className":467},[],[469],{"type":37,"value":470},"event_id",{"type":37,"value":472},"-Parameter hinzu und sende die gleiche ID sowohl vom Client als auch vom Server. Meta dedupliziert innerhalb von 48 Stunden.",{"type":32,"tag":33,"props":474,"children":475},{},[476],{"type":37,"value":477},"Bei der Konfiguration des CAPI-Tags in sGTM:",{"type":32,"tag":479,"props":480,"children":481},"ul",{},[482,515,533],{"type":32,"tag":397,"props":483,"children":484},{},[485,490,492,498,500,506,507,513],{"type":32,"tag":52,"props":486,"children":487},{},[488],{"type":37,"value":489},"Event Name:",{"type":37,"value":491}," ",{"type":32,"tag":60,"props":493,"children":495},{"className":494},[],[496],{"type":37,"value":497},"PageView",{"type":37,"value":499},", ",{"type":32,"tag":60,"props":501,"children":503},{"className":502},[],[504],{"type":37,"value":505},"Purchase",{"type":37,"value":499},{"type":32,"tag":60,"props":508,"children":510},{"className":509},[],[511],{"type":37,"value":512},"AddToCart",{"type":37,"value":514}," (Meta Standard Events)",{"type":32,"tag":397,"props":516,"children":517},{},[518,523,525,531],{"type":32,"tag":52,"props":519,"children":520},{},[521],{"type":37,"value":522},"Event ID:",{"type":37,"value":524}," Kombiniere ",{"type":32,"tag":60,"props":526,"children":528},{"className":527},[],[529],{"type":37,"value":530},"fbp",{"type":37,"value":532},"-Cookie vom Client-Side-Pixel mit Timestamp-Hash",{"type":32,"tag":397,"props":534,"children":535},{},[536,541,542,548,550,556,558,564,565,571],{"type":32,"tag":52,"props":537,"children":538},{},[539],{"type":37,"value":540},"User Data:",{"type":37,"value":491},{"type":32,"tag":60,"props":543,"children":545},{"className":544},[],[546],{"type":37,"value":547},"em",{"type":37,"value":549}," (gehashte E-Mail), ",{"type":32,"tag":60,"props":551,"children":553},{"className":552},[],[554],{"type":37,"value":555},"ph",{"type":37,"value":557}," (gehastete Telefonnummer), ",{"type":32,"tag":60,"props":559,"children":561},{"className":560},[],[562],{"type":37,"value":563},"client_ip_address",{"type":37,"value":499},{"type":32,"tag":60,"props":566,"children":568},{"className":567},[],[569],{"type":37,"value":570},"client_user_agent",{"type":37,"value":572}," — sGTM bezieht diese Parameter automatisch aus HTTP-Headern",{"type":32,"tag":33,"props":574,"children":575},{},[576],{"type":37,"value":577},"Beispiel für Event-ID-Generierung (Client-Side):",{"type":32,"tag":69,"props":579,"children":583},{"className":580,"code":581,"language":582,"meta":16,"style":16},"language-javascript shiki shiki-themes github-dark","const eventId = CryptoJS.SHA256(\n  fbp + '_' + eventName + '_' + Date.now()\n).toString();\n\nfbq('track', 'Purchase', {\n  value: 99.00,\n  currency: 'USD'\n}, {\n  eventID: eventId\n});\n","javascript",[584],{"type":32,"tag":60,"props":585,"children":586},{"__ignoreMap":16},[587,620,675,693,702,734,752,765,773,781],{"type":32,"tag":79,"props":588,"children":589},{"class":81,"line":82},[590,595,600,605,610,615],{"type":32,"tag":79,"props":591,"children":592},{"style":92},[593],{"type":37,"value":594},"const",{"type":32,"tag":79,"props":596,"children":597},{"style":216},[598],{"type":37,"value":599}," eventId",{"type":32,"tag":79,"props":601,"children":602},{"style":92},[603],{"type":37,"value":604}," =",{"type":32,"tag":79,"props":606,"children":607},{"style":86},[608],{"type":37,"value":609}," CryptoJS.",{"type":32,"tag":79,"props":611,"children":612},{"style":104},[613],{"type":37,"value":614},"SHA256",{"type":32,"tag":79,"props":616,"children":617},{"style":86},[618],{"type":37,"value":619},"(\n",{"type":32,"tag":79,"props":621,"children":622},{"class":81,"line":130},[623,628,633,638,643,648,652,656,660,665,670],{"type":32,"tag":79,"props":624,"children":625},{"style":86},[626],{"type":37,"value":627},"  fbp ",{"type":32,"tag":79,"props":629,"children":630},{"style":92},[631],{"type":37,"value":632},"+",{"type":32,"tag":79,"props":634,"children":635},{"style":98},[636],{"type":37,"value":637}," '_'",{"type":32,"tag":79,"props":639,"children":640},{"style":92},[641],{"type":37,"value":642}," +",{"type":32,"tag":79,"props":644,"children":645},{"style":86},[646],{"type":37,"value":647}," eventName ",{"type":32,"tag":79,"props":649,"children":650},{"style":92},[651],{"type":37,"value":632},{"type":32,"tag":79,"props":653,"children":654},{"style":98},[655],{"type":37,"value":637},{"type":32,"tag":79,"props":657,"children":658},{"style":92},[659],{"type":37,"value":642},{"type":32,"tag":79,"props":661,"children":662},{"style":86},[663],{"type":37,"value":664}," Date.",{"type":32,"tag":79,"props":666,"children":667},{"style":104},[668],{"type":37,"value":669},"now",{"type":32,"tag":79,"props":671,"children":672},{"style":86},[673],{"type":37,"value":674},"()\n",{"type":32,"tag":79,"props":676,"children":677},{"class":81,"line":163},[678,683,688],{"type":32,"tag":79,"props":679,"children":680},{"style":86},[681],{"type":37,"value":682},").",{"type":32,"tag":79,"props":684,"children":685},{"style":104},[686],{"type":37,"value":687},"toString",{"type":32,"tag":79,"props":689,"children":690},{"style":86},[691],{"type":37,"value":692},"();\n",{"type":32,"tag":79,"props":694,"children":695},{"class":81,"line":246},[696],{"type":32,"tag":79,"props":697,"children":699},{"emptyLinePlaceholder":698},true,[700],{"type":37,"value":701},"\n",{"type":32,"tag":79,"props":703,"children":704},{"class":81,"line":259},[705,710,715,720,724,729],{"type":32,"tag":79,"props":706,"children":707},{"style":104},[708],{"type":37,"value":709},"fbq",{"type":32,"tag":79,"props":711,"children":712},{"style":86},[713],{"type":37,"value":714},"(",{"type":32,"tag":79,"props":716,"children":717},{"style":98},[718],{"type":37,"value":719},"'track'",{"type":32,"tag":79,"props":721,"children":722},{"style":86},[723],{"type":37,"value":499},{"type":32,"tag":79,"props":725,"children":726},{"style":98},[727],{"type":37,"value":728},"'Purchase'",{"type":32,"tag":79,"props":730,"children":731},{"style":86},[732],{"type":37,"value":733},", {\n",{"type":32,"tag":79,"props":735,"children":736},{"class":81,"line":272},[737,742,747],{"type":32,"tag":79,"props":738,"children":739},{"style":86},[740],{"type":37,"value":741},"  value: ",{"type":32,"tag":79,"props":743,"children":744},{"style":216},[745],{"type":37,"value":746},"99.00",{"type":32,"tag":79,"props":748,"children":749},{"style":86},[750],{"type":37,"value":751},",\n",{"type":32,"tag":79,"props":753,"children":754},{"class":81,"line":285},[755,760],{"type":32,"tag":79,"props":756,"children":757},{"style":86},[758],{"type":37,"value":759},"  currency: ",{"type":32,"tag":79,"props":761,"children":762},{"style":98},[763],{"type":37,"value":764},"'USD'\n",{"type":32,"tag":79,"props":766,"children":767},{"class":81,"line":298},[768],{"type":32,"tag":79,"props":769,"children":770},{"style":86},[771],{"type":37,"value":772},"}, {\n",{"type":32,"tag":79,"props":774,"children":775},{"class":81,"line":26},[776],{"type":32,"tag":79,"props":777,"children":778},{"style":86},[779],{"type":37,"value":780},"  eventID: eventId\n",{"type":32,"tag":79,"props":782,"children":783},{"class":81,"line":323},[784],{"type":32,"tag":79,"props":785,"children":786},{"style":86},[787],{"type":37,"value":788},"});\n",{"type":32,"tag":33,"props":790,"children":791},{},[792,794,800,802,807],{"type":37,"value":793},"Gib die gleiche ",{"type":32,"tag":60,"props":795,"children":797},{"className":796},[],[798],{"type":37,"value":799},"eventId",{"type":37,"value":801}," an den CAPI-Tag in sGTM weiter. Meta dedupliziert Events mit derselben ID innerhalb von ",{"type":32,"tag":52,"props":803,"children":804},{},[805],{"type":37,"value":806},"48 Stunden",{"type":37,"value":808},". Verspätete Events außerhalb dieses Fensters können als Duplikate gezählt werden.",{"type":32,"tag":33,"props":810,"children":811},{},[812,817,819,824,826,831],{"type":32,"tag":52,"props":813,"children":814},{},[815],{"type":37,"value":816},"Test-Protokoll:",{"type":37,"value":818}," Nutze Meta Events Manager → ",{"type":32,"tag":52,"props":820,"children":821},{},[822],{"type":37,"value":823},"Test Events",{"type":37,"value":825},"-Tab. Wenn du sowohl Client- als auch Server-Event sendest, solltest du die Meldung „Deduplication Active\" sehen und unter derselben ",{"type":32,"tag":60,"props":827,"children":829},{"className":828},[],[830],{"type":37,"value":470},{"type":37,"value":832}," genau 1 Conversion zählen.",{"type":32,"tag":351,"props":834,"children":836},{"id":835},"user-data-enrichment-ip-und-user-agent",[837],{"type":37,"value":838},"User Data Enrichment: IP und User-Agent",{"type":32,"tag":33,"props":840,"children":841},{},[842,844,849,851,856],{"type":37,"value":843},"Die Attribution'Skraft der Meta CAPI hängt von der ",{"type":32,"tag":52,"props":845,"children":846},{},[847],{"type":37,"value":848},"Reichhaltigkeit der User-Data-Parameter",{"type":37,"value":850}," ab. Das Client-Side-Pixel erfasst diese automatisch vom Browser, Server-Side muss du sie manuell senden. Nutze die ",{"type":32,"tag":52,"props":852,"children":853},{},[854],{"type":37,"value":855},"HTTP Request Headers",{"type":37,"value":857},"-Variable von sGTM:",{"type":32,"tag":479,"props":859,"children":860},{},[861,879],{"type":32,"tag":397,"props":862,"children":863},{},[864,869,871,877],{"type":32,"tag":60,"props":865,"children":867},{"className":866},[],[868],{"type":37,"value":563},{"type":37,"value":870}," → ",{"type":32,"tag":60,"props":872,"children":874},{"className":873},[],[875],{"type":37,"value":876},"{{Client IP Address}}",{"type":37,"value":878}," (sGTM Built-in Variable)",{"type":32,"tag":397,"props":880,"children":881},{},[882,887,888,894],{"type":32,"tag":60,"props":883,"children":885},{"className":884},[],[886],{"type":37,"value":570},{"type":37,"value":870},{"type":32,"tag":60,"props":889,"children":891},{"className":890},[],[892],{"type":37,"value":893},"{{User Agent}}",{"type":37,"value":895}," (Built-in Variable)",{"type":32,"tag":33,"props":897,"children":898},{},[899,901,906,908,913],{"type":37,"value":900},"Ohne diese Parameter liefert das CAPI-Event 40–60 % niedrigere Match-Rate (Meta interne Daten). Mit Email-Hash (",{"type":32,"tag":60,"props":902,"children":904},{"className":903},[],[905],{"type":37,"value":547},{"type":37,"value":907},") und Phone-Hash (",{"type":32,"tag":60,"props":909,"children":911},{"className":910},[],[912],{"type":37,"value":555},{"type":37,"value":914},") erhöht sich die Match-Rate auf über 80 %. Das Hashing muss mit SHA-256 erfolgen, mit Lowercase + Trim:",{"type":32,"tag":69,"props":916,"children":920},{"className":917,"code":918,"language":919,"meta":16,"style":16},"language-python shiki shiki-themes github-dark","import hashlib\n\nemail_hash = hashlib.sha256('user@example.com'.strip().lower().encode()).hexdigest()\n","python",[921],{"type":32,"tag":60,"props":922,"children":923},{"__ignoreMap":16},[924,937,944],{"type":32,"tag":79,"props":925,"children":926},{"class":81,"line":82},[927,932],{"type":32,"tag":79,"props":928,"children":929},{"style":92},[930],{"type":37,"value":931},"import",{"type":32,"tag":79,"props":933,"children":934},{"style":86},[935],{"type":37,"value":936}," hashlib\n",{"type":32,"tag":79,"props":938,"children":939},{"class":81,"line":130},[940],{"type":32,"tag":79,"props":941,"children":942},{"emptyLinePlaceholder":698},[943],{"type":37,"value":701},{"type":32,"tag":79,"props":945,"children":946},{"class":81,"line":163},[947,952,956,961,966],{"type":32,"tag":79,"props":948,"children":949},{"style":86},[950],{"type":37,"value":951},"email_hash ",{"type":32,"tag":79,"props":953,"children":954},{"style":92},[955],{"type":37,"value":141},{"type":32,"tag":79,"props":957,"children":958},{"style":86},[959],{"type":37,"value":960}," hashlib.sha256(",{"type":32,"tag":79,"props":962,"children":963},{"style":98},[964],{"type":37,"value":965},"'user@example.com'",{"type":32,"tag":79,"props":967,"children":968},{"style":86},[969],{"type":37,"value":970},".strip().lower().encode()).hexdigest()\n",{"type":32,"tag":40,"props":972,"children":974},{"id":973},"google-ads-enhanced-conversions-sha-256-hash-und-gclid-matching",[975],{"type":37,"value":976},"Google Ads Enhanced Conversions: SHA-256-Hash und gclid-Matching",{"type":32,"tag":33,"props":978,"children":979},{},[980,982,987,989,995],{"type":37,"value":981},"Google Ads Enhanced Conversions erfordert den Versand von ",{"type":32,"tag":52,"props":983,"children":984},{},[985],{"type":37,"value":986},"gehashten User-Daten",{"type":37,"value":988}," über sGTM. Die Logik ähnelt Meta CAPI: Hash PII wie E-Mail, Telefon, Adresse mit SHA-256 und füge es dem Conversion-Tag hinzu. Google matching diese Daten mit ",{"type":32,"tag":60,"props":990,"children":992},{"className":991},[],[993],{"type":37,"value":994},"gclid",{"type":37,"value":996}," und verknüpft die Offline-Conversion.",{"type":32,"tag":33,"props":998,"children":999},{},[1000,1002,1007],{"type":37,"value":1001},"Im ",{"type":32,"tag":52,"props":1003,"children":1004},{},[1005],{"type":37,"value":1006},"Google Ads Conversion Tracking",{"type":37,"value":1008},"-Tag in sGTM:",{"type":32,"tag":479,"props":1010,"children":1011},{},[1012,1022,1049],{"type":32,"tag":397,"props":1013,"children":1014},{},[1015,1017],{"type":37,"value":1016},"Aktiviere die Option ",{"type":32,"tag":52,"props":1018,"children":1019},{},[1020],{"type":37,"value":1021},"Enhanced Conversions",{"type":32,"tag":397,"props":1023,"children":1024},{},[1025,1027,1032,1034,1040,1042,1048],{"type":37,"value":1026},"Füge unter ",{"type":32,"tag":52,"props":1028,"children":1029},{},[1030],{"type":37,"value":1031},"User Data",{"type":37,"value":1033}," die Variablen ",{"type":32,"tag":60,"props":1035,"children":1037},{"className":1036},[],[1038],{"type":37,"value":1039},"{{Email Hash}}",{"type":37,"value":1041}," und ",{"type":32,"tag":60,"props":1043,"children":1045},{"className":1044},[],[1046],{"type":37,"value":1047},"{{Phone Hash}}",{"type":37,"value":408},{"type":32,"tag":397,"props":1050,"children":1051},{},[1052,1054,1058],{"type":37,"value":1053},"Übergib den ",{"type":32,"tag":52,"props":1055,"children":1056},{},[1057],{"type":37,"value":994},{"type":37,"value":1059},"-Parameter vom Client-Side (aus URL-Query oder Cookie)",{"type":32,"tag":33,"props":1061,"children":1062},{},[1063],{"type":37,"value":1064},"Hash-Funktion in JavaScript:",{"type":32,"tag":69,"props":1066,"children":1068},{"className":580,"code":1067,"language":582,"meta":16,"style":16},"async function hashSHA256(value) {\n  const encoder = new TextEncoder();\n  const data = encoder.encode(value.trim().toLowerCase());\n  const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n  const hashArray = Array.from(new Uint8Array(hashBuffer));\n  return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n}\n",[1069],{"type":32,"tag":60,"props":1070,"children":1071},{"__ignoreMap":16},[1072,1105,1136,1187,1232,1277,1378],{"type":32,"tag":79,"props":1073,"children":1074},{"class":81,"line":82},[1075,1080,1085,1090,1094,1100],{"type":32,"tag":79,"props":1076,"children":1077},{"style":92},[1078],{"type":37,"value":1079},"async",{"type":32,"tag":79,"props":1081,"children":1082},{"style":92},[1083],{"type":37,"value":1084}," function",{"type":32,"tag":79,"props":1086,"children":1087},{"style":104},[1088],{"type":37,"value":1089}," hashSHA256",{"type":32,"tag":79,"props":1091,"children":1092},{"style":86},[1093],{"type":37,"value":714},{"type":32,"tag":79,"props":1095,"children":1097},{"style":1096},"--shiki-default:#FFAB70",[1098],{"type":37,"value":1099},"value",{"type":32,"tag":79,"props":1101,"children":1102},{"style":86},[1103],{"type":37,"value":1104},") {\n",{"type":32,"tag":79,"props":1106,"children":1107},{"class":81,"line":130},[1108,1113,1118,1122,1127,1132],{"type":32,"tag":79,"props":1109,"children":1110},{"style":92},[1111],{"type":37,"value":1112},"  const",{"type":32,"tag":79,"props":1114,"children":1115},{"style":216},[1116],{"type":37,"value":1117}," encoder",{"type":32,"tag":79,"props":1119,"children":1120},{"style":92},[1121],{"type":37,"value":604},{"type":32,"tag":79,"props":1123,"children":1124},{"style":92},[1125],{"type":37,"value":1126}," new",{"type":32,"tag":79,"props":1128,"children":1129},{"style":104},[1130],{"type":37,"value":1131}," TextEncoder",{"type":32,"tag":79,"props":1133,"children":1134},{"style":86},[1135],{"type":37,"value":692},{"type":32,"tag":79,"props":1137,"children":1138},{"class":81,"line":163},[1139,1143,1148,1152,1157,1162,1167,1172,1177,1182],{"type":32,"tag":79,"props":1140,"children":1141},{"style":92},[1142],{"type":37,"value":1112},{"type":32,"tag":79,"props":1144,"children":1145},{"style":216},[1146],{"type":37,"value":1147}," data",{"type":32,"tag":79,"props":1149,"children":1150},{"style":92},[1151],{"type":37,"value":604},{"type":32,"tag":79,"props":1153,"children":1154},{"style":86},[1155],{"type":37,"value":1156}," encoder.",{"type":32,"tag":79,"props":1158,"children":1159},{"style":104},[1160],{"type":37,"value":1161},"encode",{"type":32,"tag":79,"props":1163,"children":1164},{"style":86},[1165],{"type":37,"value":1166},"(value.",{"type":32,"tag":79,"props":1168,"children":1169},{"style":104},[1170],{"type":37,"value":1171},"trim",{"type":32,"tag":79,"props":1173,"children":1174},{"style":86},[1175],{"type":37,"value":1176},"().",{"type":32,"tag":79,"props":1178,"children":1179},{"style":104},[1180],{"type":37,"value":1181},"toLowerCase",{"type":32,"tag":79,"props":1183,"children":1184},{"style":86},[1185],{"type":37,"value":1186},"());\n",{"type":32,"tag":79,"props":1188,"children":1189},{"class":81,"line":246},[1190,1194,1199,1203,1208,1213,1218,1222,1227],{"type":32,"tag":79,"props":1191,"children":1192},{"style":92},[1193],{"type":37,"value":1112},{"type":32,"tag":79,"props":1195,"children":1196},{"style":216},[1197],{"type":37,"value":1198}," hashBuffer",{"type":32,"tag":79,"props":1200,"children":1201},{"style":92},[1202],{"type":37,"value":604},{"type":32,"tag":79,"props":1204,"children":1205},{"style":92},[1206],{"type":37,"value":1207}," await",{"type":32,"tag":79,"props":1209,"children":1210},{"style":86},[1211],{"type":37,"value":1212}," crypto.subtle.",{"type":32,"tag":79,"props":1214,"children":1215},{"style":104},[1216],{"type":37,"value":1217},"digest",{"type":32,"tag":79,"props":1219,"children":1220},{"style":86},[1221],{"type":37,"value":714},{"type":32,"tag":79,"props":1223,"children":1224},{"style":98},[1225],{"type":37,"value":1226},"'SHA-256'",{"type":32,"tag":79,"props":1228,"children":1229},{"style":86},[1230],{"type":37,"value":1231},", data);\n",{"type":32,"tag":79,"props":1233,"children":1234},{"class":81,"line":259},[1235,1239,1244,1248,1253,1258,1262,1267,1272],{"type":32,"tag":79,"props":1236,"children":1237},{"style":92},[1238],{"type":37,"value":1112},{"type":32,"tag":79,"props":1240,"children":1241},{"style":216},[1242],{"type":37,"value":1243}," hashArray",{"type":32,"tag":79,"props":1245,"children":1246},{"style":92},[1247],{"type":37,"value":604},{"type":32,"tag":79,"props":1249,"children":1250},{"style":86},[1251],{"type":37,"value":1252}," Array.",{"type":32,"tag":79,"props":1254,"children":1255},{"style":104},[1256],{"type":37,"value":1257},"from",{"type":32,"tag":79,"props":1259,"children":1260},{"style":86},[1261],{"type":37,"value":714},{"type":32,"tag":79,"props":1263,"children":1264},{"style":92},[1265],{"type":37,"value":1266},"new",{"type":32,"tag":79,"props":1268,"children":1269},{"style":104},[1270],{"type":37,"value":1271}," Uint8Array",{"type":32,"tag":79,"props":1273,"children":1274},{"style":86},[1275],{"type":37,"value":1276},"(hashBuffer));\n",{"type":32,"tag":79,"props":1278,"children":1279},{"class":81,"line":272},[1280,1285,1290,1295,1299,1304,1309,1314,1318,1322,1327,1331,1336,1340,1345,1349,1354,1359,1364,1368,1373],{"type":32,"tag":79,"props":1281,"children":1282},{"style":92},[1283],{"type":37,"value":1284},"  return",{"type":32,"tag":79,"props":1286,"children":1287},{"style":86},[1288],{"type":37,"value":1289}," hashArray.",{"type":32,"tag":79,"props":1291,"children":1292},{"style":104},[1293],{"type":37,"value":1294},"map",{"type":32,"tag":79,"props":1296,"children":1297},{"style":86},[1298],{"type":37,"value":714},{"type":32,"tag":79,"props":1300,"children":1301},{"style":1096},[1302],{"type":37,"value":1303},"b",{"type":32,"tag":79,"props":1305,"children":1306},{"style":92},[1307],{"type":37,"value":1308}," =>",{"type":32,"tag":79,"props":1310,"children":1311},{"style":86},[1312],{"type":37,"value":1313}," b.",{"type":32,"tag":79,"props":1315,"children":1316},{"style":104},[1317],{"type":37,"value":687},{"type":32,"tag":79,"props":1319,"children":1320},{"style":86},[1321],{"type":37,"value":714},{"type":32,"tag":79,"props":1323,"children":1324},{"style":216},[1325],{"type":37,"value":1326},"16",{"type":32,"tag":79,"props":1328,"children":1329},{"style":86},[1330],{"type":37,"value":682},{"type":32,"tag":79,"props":1332,"children":1333},{"style":104},[1334],{"type":37,"value":1335},"padStart",{"type":32,"tag":79,"props":1337,"children":1338},{"style":86},[1339],{"type":37,"value":714},{"type":32,"tag":79,"props":1341,"children":1342},{"style":216},[1343],{"type":37,"value":1344},"2",{"type":32,"tag":79,"props":1346,"children":1347},{"style":86},[1348],{"type":37,"value":499},{"type":32,"tag":79,"props":1350,"children":1351},{"style":98},[1352],{"type":37,"value":1353},"'0'",{"type":32,"tag":79,"props":1355,"children":1356},{"style":86},[1357],{"type":37,"value":1358},")).",{"type":32,"tag":79,"props":1360,"children":1361},{"style":104},[1362],{"type":37,"value":1363},"join",{"type":32,"tag":79,"props":1365,"children":1366},{"style":86},[1367],{"type":37,"value":714},{"type":32,"tag":79,"props":1369,"children":1370},{"style":98},[1371],{"type":37,"value":1372},"''",{"type":32,"tag":79,"props":1374,"children":1375},{"style":86},[1376],{"type":37,"value":1377},");\n",{"type":32,"tag":79,"props":1379,"children":1380},{"class":81,"line":285},[1381],{"type":32,"tag":79,"props":1382,"children":1383},{"style":86},[1384],{"type":37,"value":1385},"}\n",{"type":32,"tag":33,"props":1387,"children":1388},{},[1389,1391,1397,1399,1404],{"type":37,"value":1390},"Sende diesen Hash vom Client-Side via ",{"type":32,"tag":60,"props":1392,"children":1394},{"className":1393},[],[1395],{"type":37,"value":1396},"dataLayer.push()",{"type":37,"value":1398},", erfasse ihn als sGTM-Variable und leite ihn an den Google Ads-Tag weiter. ",{"type":32,"tag":52,"props":1400,"children":1401},{},[1402],{"type":37,"value":1403},"Kritisch:",{"type":37,"value":1405}," Das Hashing muss Client-Side erfolgen (Datenschutz — PII sollte nicht als Plain Text zum Server), oder es wird Server-Side durchgeführt und die Protokollierung deaktiviert.",{"type":32,"tag":33,"props":1407,"children":1408},{},[1409,1414,1416,1422,1423,1429,1431,1437],{"type":32,"tag":52,"props":1410,"children":1411},{},[1412],{"type":37,"value":1413},"Consent Mode v2 Verbindung:",{"type":37,"value":1415}," Ohne ",{"type":32,"tag":60,"props":1417,"children":1419},{"className":1418},[],[1420],{"type":37,"value":1421},"ad_user_data",{"type":37,"value":1041},{"type":32,"tag":60,"props":1424,"children":1426},{"className":1425},[],[1427],{"type":37,"value":1428},"ad_personalization",{"type":37,"value":1430}," Consent funktionieren sogar Enhanced Conversions nicht. Übermittle Consent-Signale via ",{"type":32,"tag":60,"props":1432,"children":1434},{"className":1433},[],[1435],{"type":37,"value":1436},"consent",{"type":37,"value":1438}," dataLayer Event an sGTM.",{"type":32,"tag":40,"props":1440,"children":1442},{"id":1441},"event-deduplizierung-paralleles-client-und-server-side-versenden",[1443],{"type":37,"value":1444},"Event-Deduplizierung: Paralleles Client- und Server-Side Versenden",{"type":32,"tag":33,"props":1446,"children":1447},{},[1448,1450,1460,1462,1471],{"type":37,"value":1449},"In manchen Szenarien werden sowohl Client-Side als auch Server-Side Tags ausgelöst — beispielsweise auf Safari funktioniert das Client-Side-Tag, aber ITP löscht das Cookie nach 7 Tagen, während der Server-Side weiterläuft. Duplikat-Risiko entsteht. Lösung: ",{"type":32,"tag":52,"props":1451,"children":1452},{},[1453,1455],{"type":37,"value":1454},"eindeutige ",{"type":32,"tag":60,"props":1456,"children":1458},{"className":1457},[],[1459],{"type":37,"value":470},{"type":37,"value":1461}," (Meta) oder ",{"type":32,"tag":52,"props":1463,"children":1464},{},[1465],{"type":32,"tag":60,"props":1466,"children":1468},{"className":1467},[],[1469],{"type":37,"value":1470},"transaction_id",{"type":37,"value":1472}," (Google Analytics 4) verwenden.",{"type":32,"tag":33,"props":1474,"children":1475},{},[1476],{"type":37,"value":1477},"Deduplizierung in GA4:",{"type":32,"tag":69,"props":1479,"children":1481},{"className":580,"code":1480,"language":582,"meta":16,"style":16},"gtag('event', 'purchase', {\n  transaction_id: 'ORDER_12345', \u002F\u002F eindeutig pro Bestellung\n  value: 99.00,\n  currency: 'USD'\n});\n",[1482],{"type":32,"tag":60,"props":1483,"children":1484},{"__ignoreMap":16},[1485,1515,1538,1553,1564],{"type":32,"tag":79,"props":1486,"children":1487},{"class":81,"line":82},[1488,1493,1497,1502,1506,1511],{"type":32,"tag":79,"props":1489,"children":1490},{"style":104},[1491],{"type":37,"value":1492},"gtag",{"type":32,"tag":79,"props":1494,"children":1495},{"style":86},[1496],{"type":37,"value":714},{"type":32,"tag":79,"props":1498,"children":1499},{"style":98},[1500],{"type":37,"value":1501},"'event'",{"type":32,"tag":79,"props":1503,"children":1504},{"style":86},[1505],{"type":37,"value":499},{"type":32,"tag":79,"props":1507,"children":1508},{"style":98},[1509],{"type":37,"value":1510},"'purchase'",{"type":32,"tag":79,"props":1512,"children":1513},{"style":86},[1514],{"type":37,"value":733},{"type":32,"tag":79,"props":1516,"children":1517},{"class":81,"line":130},[1518,1523,1528,1532],{"type":32,"tag":79,"props":1519,"children":1520},{"style":86},[1521],{"type":37,"value":1522},"  transaction_id: ",{"type":32,"tag":79,"props":1524,"children":1525},{"style":98},[1526],{"type":37,"value":1527},"'ORDER_12345'",{"type":32,"tag":79,"props":1529,"children":1530},{"style":86},[1531],{"type":37,"value":499},{"type":32,"tag":79,"props":1533,"children":1535},{"style":1534},"--shiki-default:#6A737D",[1536],{"type":37,"value":1537},"\u002F\u002F eindeutig pro Bestellung\n",{"type":32,"tag":79,"props":1539,"children":1540},{"class":81,"line":163},[1541,1545,1549],{"type":32,"tag":79,"props":1542,"children":1543},{"style":86},[1544],{"type":37,"value":741},{"type":32,"tag":79,"props":1546,"children":1547},{"style":216},[1548],{"type":37,"value":746},{"type":32,"tag":79,"props":1550,"children":1551},{"style":86},[1552],{"type":37,"value":751},{"type":32,"tag":79,"props":1554,"children":1555},{"class":81,"line":246},[1556,1560],{"type":32,"tag":79,"props":1557,"children":1558},{"style":86},[1559],{"type":37,"value":759},{"type":32,"tag":79,"props":1561,"children":1562},{"style":98},[1563],{"type":37,"value":764},{"type":32,"tag":79,"props":1565,"children":1566},{"class":81,"line":259},[1567],{"type":32,"tag":79,"props":1568,"children":1569},{"style":86},[1570],{"type":37,"value":788},{"type":32,"tag":33,"props":1572,"children":1573},{},[1574,1576,1581],{"type":37,"value":1575},"Wenn du die gleiche ",{"type":32,"tag":60,"props":1577,"children":1579},{"className":1578},[],[1580],{"type":37,"value":1470},{"type":37,"value":1582}," sowohl vom Client-Side gtag.js als auch von sGTM sendest, bereinigt GA4 das Backend Duplikate (48-Stunden-Fenster).",{"type":32,"tag":33,"props":1584,"children":1585},{},[1586,1591,1593,1598],{"type":32,"tag":52,"props":1587,"children":1588},{},[1589],{"type":37,"value":1590},"Timeout-Management:",{"type":37,"value":1592}," sGTM-Tags haben eine ",{"type":32,"tag":52,"props":1594,"children":1595},{},[1596],{"type":37,"value":1597},"Timeout",{"type":37,"value":1599},"-Einstellung (Standard 2000ms). Dauert die CAPI-Response 3–4 Sekunden, läuft das Tag in Timeout, das Event wird nicht versendet. In Production erhöhe das Timeout auf 5000ms und richte Monitoring ein. Der Cloud Run Request-Timeout (10s) muss mit dem sGTM-Tag-Timeout abgestimmt sein.",{"type":32,"tag":40,"props":1601,"children":1603},{"id":1602},"production-checklist-monitoring-logging-debugging",[1604],{"type":37,"value":1605},"Production Checklist: Monitoring, Logging, Debugging",{"type":32,"tag":33,"props":1607,"children":1608},{},[1609],{"type":37,"value":1610},"Vor der Überführung von sGTM in Production:",{"type":32,"tag":393,"props":1612,"children":1613},{},[1614,1624,1639,1657,1682],{"type":32,"tag":397,"props":1615,"children":1616},{},[1617,1622],{"type":32,"tag":52,"props":1618,"children":1619},{},[1620],{"type":37,"value":1621},"Preview Mode:",{"type":37,"value":1623}," Öffne Preview in der GTM Web-Oberfläche, verbinde dich mit der sGTM-Container-URL, debug Client-Events in der Konsole",{"type":32,"tag":397,"props":1625,"children":1626},{},[1627,1632,1634],{"type":32,"tag":52,"props":1628,"children":1629},{},[1630],{"type":37,"value":1631},"Tag Firing Test:",{"type":37,"value":1633}," Validiere jeden Tag (CAPI, Google Ads, GA4) mit ",{"type":32,"tag":52,"props":1635,"children":1636},{},[1637],{"type":37,"value":1638},"Tag Assistant",{"type":32,"tag":397,"props":1640,"children":1641},{},[1642,1647,1649,1655],{"type":32,"tag":52,"props":1643,"children":1644},{},[1645],{"type":37,"value":1646},"Consent Signal:",{"type":37,"value":1648}," Teste Consent Mode v2 Signale — überprüfe, welche Tags bei ",{"type":32,"tag":60,"props":1650,"children":1652},{"className":1651},[],[1653],{"type":37,"value":1654},"ad_storage=denied",{"type":37,"value":1656}," nicht ausgelöst werden",{"type":32,"tag":397,"props":1658,"children":1659},{},[1660,1665,1667,1672,1674,1680],{"type":32,"tag":52,"props":1661,"children":1662},{},[1663],{"type":37,"value":1664},"Log Export:",{"type":37,"value":1666}," Streame Cloud Run Logs zu ",{"type":32,"tag":52,"props":1668,"children":1669},{},[1670],{"type":37,"value":1671},"Cloud Logging",{"type":37,"value":1673},", Filter: ",{"type":32,"tag":60,"props":1675,"children":1677},{"className":1676},[],[1678],{"type":37,"value":1679},"resource.type=\"cloud_run_revision\"",{"type":37,"value":1681},", visualisiere Event-Payloads",{"type":32,"tag":397,"props":1683,"children":1684},{},[1685,1690,1692,1698],{"type":32,"tag":52,"props":1686,"children":1687},{},[1688],{"type":37,"value":1689},"Error Alerting:",{"type":37,"value":1691}," Richte Cloud Monitoring Alert ein: ",{"type":32,"tag":60,"props":1693,"children":1695},{"className":1694},[],[1696],{"type":37,"value":1697},"http_response_code >= 500",{"type":37,"value":1699},", Threshold 10\u002Fmin",{"type":32,"tag":33,"props":1701,"children":1702},{},[1703],{"type":32,"tag":52,"props":1704,"children":1705},{},[1706],{"type":37,"value":1707},"Debugging-Tools:",{"type":32,"tag":479,"props":1709,"children":1710},{},[1711,1729,1752],{"type":32,"tag":397,"props":1712,"children":1713},{},[1714,1719,1721,1727],{"type":32,"tag":52,"props":1715,"children":1716},{},[1717],{"type":37,"value":1718},"sGTM Debug Mode:",{"type":37,"value":1720}," Öffne die Container-Preview-URL im Browser, füge ",{"type":32,"tag":60,"props":1722,"children":1724},{"className":1723},[],[1725],{"type":37,"value":1726},"gtm_debug=x",{"type":37,"value":1728}," Query String hinzu",{"type":32,"tag":397,"props":1730,"children":1731},{},[1732,1737,1739,1745,1746],{"type":32,"tag":52,"props":1733,"children":1734},{},[1735],{"type":37,"value":1736},"Network Tab:",{"type":37,"value":1738}," Überprüfe in Browser DevTools die Requests zu ",{"type":32,"tag":60,"props":1740,"children":1742},{"className":1741},[],[1743],{"type":37,"value":1744},"\u002Fgtm.js",{"type":37,"value":1041},{"type":32,"tag":60,"props":1747,"children":1749},{"className":1748},[],[1750],{"type":37,"value":1751},"\u002Fr\u002Fcollect",{"type":32,"tag":397,"props":1753,"children":1754},{},[1755,1760],{"type":32,"tag":52,"props":1756,"children":1757},{},[1758],{"type":37,"value":1759},"Meta Event Test:",{"type":37,"value":1761}," Events Manager → Test Events, zeige Events der letzten Stunde",{"type":32,"tag":33,"props":1763,"children":1764},{},[1765,1770,1772,1778,1780,1785],{"type":32,"tag":52,"props":1766,"children":1767},{},[1768],{"type":37,"value":1769},"Häufiges Problem:",{"type":37,"value":1771}," Client-IP-Adresse erreicht sGTM nicht — überprüfe Cloud Load Balancer auf ",{"type":32,"tag":60,"props":1773,"children":1775},{"className":1774},[],[1776],{"type":37,"value":1777},"X-Forwarded-For",{"type":37,"value":1779}," Header, aktiviere ",{"type":32,"tag":52,"props":1781,"children":1782},{},[1783],{"type":37,"value":1784},"Preserve Client IP",{"type":37,"value":1786},".",{"type":32,"tag":40,"props":1788,"children":1790},{"id":1789},"datenarchitektur-integration-sgtm-bigquery-dbt",[1791],{"type":37,"value":1792},"Datenarchitektur-Integration: sGTM + BigQuery + dbt",{"type":32,"tag":33,"props":1794,"children":1795},{},[1796,1798,1803,1805,1810,1812,1821],{"type":37,"value":1797},"Du kannst sGTM-Events direkt zu BigQuery streamen — über ",{"type":32,"tag":52,"props":1799,"children":1800},{},[1801],{"type":37,"value":1802},"Firestore",{"type":37,"value":1804}," oder ",{"type":32,"tag":52,"props":1806,"children":1807},{},[1808],{"type":37,"value":1809},"Pub\u002FSub",{"type":37,"value":1811},". Während GA4 BigQuery Export täglich erfolgt, ist Echtzeit-Streaming mit sGTM möglich. Diese Strategie ist zentral für ",{"type":32,"tag":1813,"props":1814,"children":1818},"a",{"href":1815,"rel":1816},"https:\u002F\u002Fwww.roibase.com.tr\u002Fde\u002Ffirstparty",[1817],"nofollow",[1819],{"type":37,"value":1820},"First-Party Data & Measurement Architecture",{"type":37,"value":1822},": Raw Events → dbt Models → Semantic Layer → Dashboard.",{"type":32,"tag":33,"props":1824,"children":1825},{},[1826],{"type":37,"value":1827},"Beispiel-Workflow:",{"type":32,"tag":393,"props":1829,"children":1830},{},[1831,1836,1841,1854],{"type":32,"tag":397,"props":1832,"children":1833},{},[1834],{"type":37,"value":1835},"sGTM Tag → sendet JSON Event an Cloud Pub\u002FSub Topic",{"type":32,"tag":397,"props":1837,"children":1838},{},[1839],{"type":37,"value":1840},"Dataflow Job (oder Cloud Function) → schreibt Pub\u002FSub zu BigQuery",{"type":32,"tag":397,"props":1842,"children":1843},{},[1844,1846,1852],{"type":37,"value":1845},"dbt Model → aggregiert Events nach ",{"type":32,"tag":60,"props":1847,"children":1849},{"className":1848},[],[1850],{"type":37,"value":1851},"user_id",{"type":37,"value":1853},", wendet Session-Logik an",{"type":32,"tag":397,"props":1855,"children":1856},{},[1857],{"type":37,"value":1858},"Looker\u002FMetabase → Dashboard über dbt Views",{"type":32,"tag":33,"props":1860,"children":1861},{},[1862,1864,1869,1871,1877,1878,1883,1884,1889,1891,1896],{"type":37,"value":1863},"Diese Architektur ist auch für ",{"type":32,"tag":52,"props":1865,"children":1866},{},[1867],{"type":37,"value":1868},"Identity Resolution",{"type":37,"value":1870}," entscheidend: Merge ",{"type":32,"tag":60,"props":1872,"children":1874},{"className":1873},[],[1875],{"type":37,"value":1876},"client_id",{"type":37,"value":499},{"type":32,"tag":60,"props":1879,"children":1881},{"className":1880},[],[1882],{"type":37,"value":530},{"type":37,"value":499},{"type":32,"tag":60,"props":1885,"children":1887},{"className":1886},[],[1888],{"type":37,"value":994},{"type":37,"value":1890}," von sGTM Events in BigQuery und erstelle eine einzige ",{"type":32,"tag":60,"props":1892,"children":1894},{"className":1893},[],[1895],{"type":37,"value":1851},{"type":37,"value":1897},". dbt Incremental Model Beispiel:",{"type":32,"tag":69,"props":1899,"children":1903},{"className":1900,"code":1901,"language":1902,"meta":16,"style":16},"language-sql shiki shiki-themes github-dark","{{ config(materialized='incremental', unique_key='event_id') }}\n\nSELECT\n  event_id,\n  user_id,\n  client_id,\n  event_timestamp,\n  event_name,\n  event_params\nFROM {{ source('sgtm_events', 'raw_events') }}\n{% if is_incremental() %}\nWHERE event_timestamp > (SELECT MAX(event_timestamp) FROM {{ this }})\n{% endif %}\n","sql",[1904],{"type":32,"tag":60,"props":1905,"children":1906},{"__ignoreMap":16},[1907,1943,1950,1958,1966,1974,1982,1990,1998,2006,2037,2056,2104],{"type":32,"tag":79,"props":1908,"children":1909},{"class":81,"line":82},[1910,1915,1919,1924,1929,1933,1938],{"type":32,"tag":79,"props":1911,"children":1912},{"style":86},[1913],{"type":37,"value":1914},"{{ config(materialized",{"type":32,"tag":79,"props":1916,"children":1917},{"style":92},[1918],{"type":37,"value":141},{"type":32,"tag":79,"props":1920,"children":1921},{"style":98},[1922],{"type":37,"value":1923},"'incremental'",{"type":32,"tag":79,"props":1925,"children":1926},{"style":86},[1927],{"type":37,"value":1928},", unique_key",{"type":32,"tag":79,"props":1930,"children":1931},{"style":92},[1932],{"type":37,"value":141},{"type":32,"tag":79,"props":1934,"children":1935},{"style":98},[1936],{"type":37,"value":1937},"'event_id'",{"type":32,"tag":79,"props":1939,"children":1940},{"style":86},[1941],{"type":37,"value":1942},") }}\n",{"type":32,"tag":79,"props":1944,"children":1945},{"class":81,"line":130},[1946],{"type":32,"tag":79,"props":1947,"children":1948},{"emptyLinePlaceholder":698},[1949],{"type":37,"value":701},{"type":32,"tag":79,"props":1951,"children":1952},{"class":81,"line":163},[1953],{"type":32,"tag":79,"props":1954,"children":1955},{"style":92},[1956],{"type":37,"value":1957},"SELECT\n",{"type":32,"tag":79,"props":1959,"children":1960},{"class":81,"line":246},[1961],{"type":32,"tag":79,"props":1962,"children":1963},{"style":86},[1964],{"type":37,"value":1965},"  event_id,\n",{"type":32,"tag":79,"props":1967,"children":1968},{"class":81,"line":259},[1969],{"type":32,"tag":79,"props":1970,"children":1971},{"style":86},[1972],{"type":37,"value":1973},"  user_id,\n",{"type":32,"tag":79,"props":1975,"children":1976},{"class":81,"line":272},[1977],{"type":32,"tag":79,"props":1978,"children":1979},{"style":86},[1980],{"type":37,"value":1981},"  client_id,\n",{"type":32,"tag":79,"props":1983,"children":1984},{"class":81,"line":285},[1985],{"type":32,"tag":79,"props":1986,"children":1987},{"style":86},[1988],{"type":37,"value":1989},"  event_timestamp,\n",{"type":32,"tag":79,"props":1991,"children":1992},{"class":81,"line":298},[1993],{"type":32,"tag":79,"props":1994,"children":1995},{"style":86},[1996],{"type":37,"value":1997},"  event_name,\n",{"type":32,"tag":79,"props":1999,"children":2000},{"class":81,"line":26},[2001],{"type":32,"tag":79,"props":2002,"children":2003},{"style":86},[2004],{"type":37,"value":2005},"  event_params\n",{"type":32,"tag":79,"props":2007,"children":2008},{"class":81,"line":323},[2009,2014,2019,2024,2028,2033],{"type":32,"tag":79,"props":2010,"children":2011},{"style":92},[2012],{"type":37,"value":2013},"FROM",{"type":32,"tag":79,"props":2015,"children":2016},{"style":86},[2017],{"type":37,"value":2018}," {{ source(",{"type":32,"tag":79,"props":2020,"children":2021},{"style":98},[2022],{"type":37,"value":2023},"'sgtm_events'",{"type":32,"tag":79,"props":2025,"children":2026},{"style":86},[2027],{"type":37,"value":499},{"type":32,"tag":79,"props":2029,"children":2030},{"style":98},[2031],{"type":37,"value":2032},"'raw_events'",{"type":32,"tag":79,"props":2034,"children":2035},{"style":86},[2036],{"type":37,"value":1942},{"type":32,"tag":79,"props":2038,"children":2040},{"class":81,"line":2039},11,[2041,2046,2051],{"type":32,"tag":79,"props":2042,"children":2043},{"style":86},[2044],{"type":37,"value":2045},"{% ",{"type":32,"tag":79,"props":2047,"children":2048},{"style":92},[2049],{"type":37,"value":2050},"if",{"type":32,"tag":79,"props":2052,"children":2053},{"style":86},[2054],{"type":37,"value":2055}," is_incremental() %}\n",{"type":32,"tag":79,"props":2057,"children":2059},{"class":81,"line":2058},12,[2060,2065,2070,2075,2080,2085,2090,2095,2099],{"type":32,"tag":79,"props":2061,"children":2062},{"style":92},[2063],{"type":37,"value":2064},"WHERE",{"type":32,"tag":79,"props":2066,"children":2067},{"style":86},[2068],{"type":37,"value":2069}," event_timestamp ",{"type":32,"tag":79,"props":2071,"children":2072},{"style":92},[2073],{"type":37,"value":2074},">",{"type":32,"tag":79,"props":2076,"children":2077},{"style":86},[2078],{"type":37,"value":2079}," (",{"type":32,"tag":79,"props":2081,"children":2082},{"style":92},[2083],{"type":37,"value":2084},"SELECT",{"type":32,"tag":79,"props":2086,"children":2087},{"style":216},[2088],{"type":37,"value":2089}," MAX",{"type":32,"tag":79,"props":2091,"children":2092},{"style":86},[2093],{"type":37,"value":2094},"(event_timestamp) ",{"type":32,"tag":79,"props":2096,"children":2097},{"style":92},[2098],{"type":37,"value":2013},{"type":32,"tag":79,"props":2100,"children":2101},{"style":86},[2102],{"type":37,"value":2103}," {{ this }})\n",{"type":32,"tag":79,"props":2105,"children":2107},{"class":81,"line":2106},13,[2108],{"type":32,"tag":79,"props":2109,"children":2110},{"style":86},[2111],{"type":37,"value":2112},"{% endif %}\n",{"type":32,"tag":33,"props":2114,"children":2115},{},[2116,2118,2123,2125,2130,2131,2137],{"type":37,"value":2117},"Diese Struktur unterstützt auch ",{"type":32,"tag":52,"props":2119,"children":2120},{},[2121],{"type":37,"value":2122},"Attribution Models",{"type":37,"value":2124},": JOIN sGTM Events in BigQuery mit ",{"type":32,"tag":60,"props":2126,"children":2128},{"className":2127},[],[2129],{"type":37,"value":994},{"type":37,"value":499},{"type":32,"tag":60,"props":2132,"children":2134},{"className":2133},[],[2135],{"type":37,"value":2136},"fbclid",{"type":37,"value":2138}," und berechne Multi-Touch-Attribution.",{"type":32,"tag":2140,"props":2141,"children":2142},"hr",{},[],{"type":32,"tag":33,"props":2144,"children":2145},{},[2146,2148,2153],{"type":37,"value":2147},"Server-Side-Messung ist nicht mehr „optionale Optimierung\", sondern in einer Privacy-First-Welt notwendige Infrastruktur. Cloud Run Deployment, CAPI-Deduplizierung, Enhanced Conversions Hashing, BigQuery Streaming — jeder Schritt verlangt technische Entscheidungen. Beginne in Test-Umgebung mit ",{"type":32,"tag":60,"props":2149,"children":2151},{"className":2150},[],[2152],{"type":37,"value":441},{"type":37,"value":2154},"-Domain, richte vor Production-Überführung Custom Domain + SSL ein, validiere Consent-Signale, aktiviere Monitoring. sGTM ist nicht die alleinige Lösung — es muss parallel mit Client-Side-Tags arbeiten, die Deduplizierungslogik muss robust sein. Um Attribution zu retten, ist die Umstellung auf Server-Side-Messung unvermeidlich, aber der Weg von Null zu Production erfordert 4–6 Wochen Entwicklungsaufwand.",{"type":32,"tag":2156,"props":2157,"children":2158},"style",{},[2159],{"type":37,"value":2160},"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":163,"depth":163,"links":2162},[2163,2166,2169,2170,2171,2172],{"id":42,"depth":130,"text":45,"children":2164},[2165],{"id":353,"depth":163,"text":356},{"id":446,"depth":130,"text":449,"children":2167},[2168],{"id":835,"depth":163,"text":838},{"id":973,"depth":130,"text":976},{"id":1441,"depth":130,"text":1444},{"id":1602,"depth":130,"text":1605},{"id":1789,"depth":130,"text":1792},"markdown","content:de:data:server-side-gtm-conversion-api-production.md","content","de\u002Fdata\u002Fserver-side-gtm-conversion-api-production.md","de\u002Fdata\u002Fserver-side-gtm-conversion-api-production","md",1782050752167]