[{"data":1,"prerenderedAt":2109},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fru\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":11,"_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":2103,"_id":2104,"_source":2105,"_file":2106,"_stem":2107,"_extension":2108},"data",false,"","Server-Side GTM и Conversion API: от нуля до production","Развертывание на Cloud Run\u002FWorkers, шаблон контейнера, стратегии дедубликации. Техническая дорожная карта для перемещения серверной идентификации в 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":2091},"root",[31,39,46,68,179,184,330,340,350,357,392,431,444,450,473,478,573,578,789,802,819,825,844,882,901,957,963,983,995,1044,1049,1370,1390,1424,1430,1449,1454,1547,1559,1576,1582,1587,1674,1682,1734,1759,1765,1795,1800,1831,1870,2085],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","Удаление cookies, ужесточение ITP, обязательность consent mode — браузерные измерения с 2024 года испытывают потерю сигналов на 30-40%. Client-side теги больше не дают полного представления. Серверная идентификация — единственный инженерный способ восстановить потерянные данные. Google Tag Manager Server Container (sGTM) и Meta Conversion API — две основные компоненты этой архитектуры. Но это не просто \"deploy и работай\": размещение контейнера, дедубликация событий, управление timeout'ами, параметрическое обогащение данных — на каждом шаге нужны технические решения. Эта статья охватывает развертывание sGTM на Cloud Run или Cloudflare Workers, интеграцию CAPI, логику дедубликации и production checklist.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"размещение-серверного-контейнера-gtm-cloud-run-vs-workers-vs-app-engine",[44],{"type":37,"value":45},"Размещение серверного контейнера GTM: Cloud Run vs Workers vs App Engine",{"type":32,"tag":33,"props":47,"children":48},{},[49,51,57,59,66],{"type":37,"value":50},"Вы можете запустить sGTM контейнер в Google Cloud, но ",{"type":32,"tag":52,"props":53,"children":54},"strong",{},[55],{"type":37,"value":56},"ручное развертывание обязательно",{"type":37,"value":58},". Если использовать App Engine Automatic Scaling, холодные старты длятся 2-3 секунды; в пиковые нагрузки риск потери событий 15-20%. Рекомендуется Cloud Run: минимум 1 экземпляр \"always warm\", параллелизм 80-100, timeout запроса 10 секунд. Google предоставляет Dockerfile в публичном репозитории — ",{"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},". При развертывании этого образа в вашем проекте требуются 3 переменные окружения:",{"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},"Пример команды развертывания на 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:",{"type":37,"value":339}," если приоритет — глобальная граничная задержка, можно использовать Workers. Потребуется перенести логику контейнера GTM в Workers runtime (не встроено natively). Преимущество: время ответа \u003C50ms, недостаток: экосистема тегов ограничена — может потребоваться писать custom JavaScript теги.",{"type":32,"tag":33,"props":341,"children":342},{},[343,348],{"type":32,"tag":52,"props":344,"children":345},{},[346],{"type":37,"value":347},"Затраты на размещение:",{"type":37,"value":349}," Cloud Run с 1М запросов в месяц ~$40-60 (постоянно работающий экземпляр + autoscale). App Engine Flex ~$150-200. Workers: $5 базовая плата + $0,50 за миллион запросов — намного дешевле, но нет встроенной поддержки sGTM, требуется дополнительное время разработки.",{"type":32,"tag":351,"props":352,"children":354},"h3",{"id":353},"пользовательский-домен-и-ssl-сертификат",[355],{"type":37,"value":356},"Пользовательский домен и SSL-сертификат",{"type":32,"tag":33,"props":358,"children":359},{},[360,362,368,370,375,377,382,384,390],{"type":37,"value":361},"Стандартный домен ",{"type":32,"tag":60,"props":363,"children":365},{"className":364},[],[366],{"type":37,"value":367},"*.run.app",{"type":37,"value":369}," для sGTM ",{"type":32,"tag":52,"props":371,"children":372},{},[373],{"type":37,"value":374},"считается третьей стороной",{"type":37,"value":376}," — Safari ITP удаляет cookies с этого домена через 7 дней. Поэтому требуется ",{"type":32,"tag":52,"props":378,"children":379},{},[380],{"type":37,"value":381},"поддомен first-party",{"type":37,"value":383},", например ",{"type":32,"tag":60,"props":385,"children":387},{"className":386},[],[388],{"type":37,"value":389},"analytics.yoursite.com",{"type":37,"value":391},". Настройка Cloud Load Balancer + управляемый 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},"Добавьте ",{"type":32,"tag":52,"props":403,"children":404},{},[405],{"type":37,"value":406},"NEG (Network Endpoint Group)",{"type":37,"value":408}," к Cloud Run сервису",{"type":32,"tag":397,"props":410,"children":411},{},[412],{"type":37,"value":413},"Создайте HTTPS Load Balancer, привяжите NEG к backend'у",{"type":32,"tag":397,"props":415,"children":416},{},[417,419,424],{"type":37,"value":418},"Получите Google Managed Certificate для ",{"type":32,"tag":60,"props":420,"children":422},{"className":421},[],[423],{"type":37,"value":389},{"type":37,"value":425}," (может занять 48 часов)",{"type":32,"tag":397,"props":427,"children":428},{},[429],{"type":37,"value":430},"На DNS указывает A-запись на IP балансировщика",{"type":32,"tag":33,"props":432,"children":433},{},[434,436,442],{"type":37,"value":435},"Эта конфигурация обязательна для production'а. В тестовой среде можно работать с ",{"type":32,"tag":60,"props":437,"children":439},{"className":438},[],[440],{"type":37,"value":441},"run.app",{"type":37,"value":443}," доменом, но вы не сможете увидеть сценарии ITP.",{"type":32,"tag":40,"props":445,"children":447},{"id":446},"интеграция-meta-conversion-api-стратегия-дедубликации-событий",[448],{"type":37,"value":449},"Интеграция Meta Conversion API: стратегия дедубликации событий",{"type":32,"tag":33,"props":451,"children":452},{},[453,455,460,462,471],{"type":37,"value":454},"Meta CAPI позволяет отправлять события пикселя на серверной стороне через sGTM. Однако ",{"type":32,"tag":52,"props":456,"children":457},{},[458],{"type":37,"value":459},"client-side Meta Pixel",{"type":37,"value":461}," может отправлять то же событие — если оно будет засчитано дважды, атрибуция нарушится. Официальный метод дедубликации Meta: добавьте параметр ",{"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}," к каждому событию и отправляйте одинаковый ID с клиента и сервера. Meta объединяет дубликаты в течение 48 часов.",{"type":32,"tag":33,"props":474,"children":475},{},[476],{"type":37,"value":477},"При настройке CAPI тега в 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)",{"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}," используйте хеш ",{"type":32,"tag":60,"props":526,"children":528},{"className":527},[],[529],{"type":37,"value":530},"fbp",{"type":37,"value":532}," cookie из client-side пикселя + временная метка",{"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}," (хешированная почта), ",{"type":32,"tag":60,"props":551,"children":553},{"className":552},[],[554],{"type":37,"value":555},"ph",{"type":37,"value":557}," (хеширован номер), ",{"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 может автоматически извлечь эти параметры из HTTP-заголовков",{"type":32,"tag":33,"props":574,"children":575},{},[576],{"type":37,"value":577},"Пример генерации Event ID (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],{"type":37,"value":793},"Передайте тот же ",{"type":32,"tag":60,"props":795,"children":797},{"className":796},[],[798],{"type":37,"value":799},"eventId",{"type":37,"value":801}," CAPI тегу в sGTM. Meta объединяет события с одинаковым ID в одну конверсию в течение 48 часов. События, поступившие после этого окна, могут считаться дубликатами.",{"type":32,"tag":33,"props":803,"children":804},{},[805,810,812,817],{"type":32,"tag":52,"props":806,"children":807},{},[808],{"type":37,"value":809},"Протокол тестирования:",{"type":37,"value":811}," используйте вкладку ",{"type":32,"tag":52,"props":813,"children":814},{},[815],{"type":37,"value":816},"Test Events",{"type":37,"value":818}," в Meta Events Manager. Когда вы отправляете событие как с клиента, так и с сервера, должно отобразиться сообщение \"Deduplication Active\", и вы должны увидеть 1 конверсию под одним event_id.",{"type":32,"tag":351,"props":820,"children":822},{"id":821},"обогащение-данных-пользователя-ip-и-user-agent",[823],{"type":37,"value":824},"Обогащение данных пользователя: IP и User-Agent",{"type":32,"tag":33,"props":826,"children":827},{},[828,830,835,837,842],{"type":37,"value":829},"Мощность атрибуции Meta CAPI зависит от ",{"type":32,"tag":52,"props":831,"children":832},{},[833],{"type":37,"value":834},"богатства параметров данных пользователя",{"type":37,"value":836},". Client-side пиксель автоматически собирает эти параметры из браузера, на серверной стороне их нужно отправлять вручную. Используйте переменную ",{"type":32,"tag":52,"props":838,"children":839},{},[840],{"type":37,"value":841},"HTTP Request Headers",{"type":37,"value":843}," в sGTM:",{"type":32,"tag":479,"props":845,"children":846},{},[847,865],{"type":32,"tag":397,"props":848,"children":849},{},[850,855,857,863],{"type":32,"tag":60,"props":851,"children":853},{"className":852},[],[854],{"type":37,"value":563},{"type":37,"value":856}," → ",{"type":32,"tag":60,"props":858,"children":860},{"className":859},[],[861],{"type":37,"value":862},"{{Client IP Address}}",{"type":37,"value":864}," (встроенная переменная sGTM)",{"type":32,"tag":397,"props":866,"children":867},{},[868,873,874,880],{"type":32,"tag":60,"props":869,"children":871},{"className":870},[],[872],{"type":37,"value":570},{"type":37,"value":856},{"type":32,"tag":60,"props":875,"children":877},{"className":876},[],[878],{"type":37,"value":879},"{{User Agent}}",{"type":37,"value":881}," (встроенная переменная)",{"type":32,"tag":33,"props":883,"children":884},{},[885,887,892,894,899],{"type":37,"value":886},"Без этих параметров событие CAPI дает на 40-60% более низкий rate совпадений (внутренние данные Meta). Если добавить хеш электронной почты (",{"type":32,"tag":60,"props":888,"children":890},{"className":889},[],[891],{"type":37,"value":547},{"type":37,"value":893},") и телефона (",{"type":32,"tag":60,"props":895,"children":897},{"className":896},[],[898],{"type":37,"value":555},{"type":37,"value":900},"), rate совпадений поднимается до 80%. Хеширование выполняется SHA-256 с преобразованием в нижний регистр и удалением пробелов:",{"type":32,"tag":69,"props":902,"children":906},{"className":903,"code":904,"language":905,"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",[907],{"type":32,"tag":60,"props":908,"children":909},{"__ignoreMap":16},[910,923,930],{"type":32,"tag":79,"props":911,"children":912},{"class":81,"line":82},[913,918],{"type":32,"tag":79,"props":914,"children":915},{"style":92},[916],{"type":37,"value":917},"import",{"type":32,"tag":79,"props":919,"children":920},{"style":86},[921],{"type":37,"value":922}," hashlib\n",{"type":32,"tag":79,"props":924,"children":925},{"class":81,"line":130},[926],{"type":32,"tag":79,"props":927,"children":928},{"emptyLinePlaceholder":698},[929],{"type":37,"value":701},{"type":32,"tag":79,"props":931,"children":932},{"class":81,"line":163},[933,938,942,947,952],{"type":32,"tag":79,"props":934,"children":935},{"style":86},[936],{"type":37,"value":937},"email_hash ",{"type":32,"tag":79,"props":939,"children":940},{"style":92},[941],{"type":37,"value":141},{"type":32,"tag":79,"props":943,"children":944},{"style":86},[945],{"type":37,"value":946}," hashlib.sha256(",{"type":32,"tag":79,"props":948,"children":949},{"style":98},[950],{"type":37,"value":951},"'user@example.com'",{"type":32,"tag":79,"props":953,"children":954},{"style":86},[955],{"type":37,"value":956},".strip().lower().encode()).hexdigest()\n",{"type":32,"tag":40,"props":958,"children":960},{"id":959},"google-ads-enhanced-conversions-sha-256-хеш-и-сопоставление-gclid",[961],{"type":37,"value":962},"Google Ads Enhanced Conversions: SHA-256 хеш и сопоставление gclid",{"type":32,"tag":33,"props":964,"children":965},{},[966,968,973,975,981],{"type":37,"value":967},"Google Ads Enhanced Conversions требует отправку ",{"type":32,"tag":52,"props":969,"children":970},{},[971],{"type":37,"value":972},"хешированных данных пользователя",{"type":37,"value":974}," через sGTM. Логика аналогична Meta CAPI: хешируйте ПДн (email, телефон, адрес) с помощью SHA-256 и добавьте в тег конверсии. Google сопоставляет эту информацию с ",{"type":32,"tag":60,"props":976,"children":978},{"className":977},[],[979],{"type":37,"value":980},"gclid",{"type":37,"value":982}," и связывает с офлайн-конверсией.",{"type":32,"tag":33,"props":984,"children":985},{},[986,988,993],{"type":37,"value":987},"В теге ",{"type":32,"tag":52,"props":989,"children":990},{},[991],{"type":37,"value":992},"Google Ads Conversion Tracking",{"type":37,"value":994}," sGTM:",{"type":32,"tag":479,"props":996,"children":997},{},[998,1008,1033],{"type":32,"tag":397,"props":999,"children":1000},{},[1001,1003],{"type":37,"value":1002},"Активируйте опцию ",{"type":32,"tag":52,"props":1004,"children":1005},{},[1006],{"type":37,"value":1007},"Enhanced Conversions",{"type":32,"tag":397,"props":1009,"children":1010},{},[1011,1013,1019,1020,1026,1028],{"type":37,"value":1012},"Добавьте переменные ",{"type":32,"tag":60,"props":1014,"children":1016},{"className":1015},[],[1017],{"type":37,"value":1018},"{{Email Hash}}",{"type":37,"value":499},{"type":32,"tag":60,"props":1021,"children":1023},{"className":1022},[],[1024],{"type":37,"value":1025},"{{Phone Hash}}",{"type":37,"value":1027}," в раздел ",{"type":32,"tag":52,"props":1029,"children":1030},{},[1031],{"type":37,"value":1032},"User Data",{"type":32,"tag":397,"props":1034,"children":1035},{},[1036,1038,1042],{"type":37,"value":1037},"Передайте параметр ",{"type":32,"tag":52,"props":1039,"children":1040},{},[1041],{"type":37,"value":980},{"type":37,"value":1043}," с client-side (из строки запроса URL или cookie)",{"type":32,"tag":33,"props":1045,"children":1046},{},[1047],{"type":37,"value":1048},"Функция хеширования в JavaScript:",{"type":32,"tag":69,"props":1050,"children":1052},{"className":580,"code":1051,"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",[1053],{"type":32,"tag":60,"props":1054,"children":1055},{"__ignoreMap":16},[1056,1089,1120,1171,1216,1261,1362],{"type":32,"tag":79,"props":1057,"children":1058},{"class":81,"line":82},[1059,1064,1069,1074,1078,1084],{"type":32,"tag":79,"props":1060,"children":1061},{"style":92},[1062],{"type":37,"value":1063},"async",{"type":32,"tag":79,"props":1065,"children":1066},{"style":92},[1067],{"type":37,"value":1068}," function",{"type":32,"tag":79,"props":1070,"children":1071},{"style":104},[1072],{"type":37,"value":1073}," hashSHA256",{"type":32,"tag":79,"props":1075,"children":1076},{"style":86},[1077],{"type":37,"value":714},{"type":32,"tag":79,"props":1079,"children":1081},{"style":1080},"--shiki-default:#FFAB70",[1082],{"type":37,"value":1083},"value",{"type":32,"tag":79,"props":1085,"children":1086},{"style":86},[1087],{"type":37,"value":1088},") {\n",{"type":32,"tag":79,"props":1090,"children":1091},{"class":81,"line":130},[1092,1097,1102,1106,1111,1116],{"type":32,"tag":79,"props":1093,"children":1094},{"style":92},[1095],{"type":37,"value":1096},"  const",{"type":32,"tag":79,"props":1098,"children":1099},{"style":216},[1100],{"type":37,"value":1101}," encoder",{"type":32,"tag":79,"props":1103,"children":1104},{"style":92},[1105],{"type":37,"value":604},{"type":32,"tag":79,"props":1107,"children":1108},{"style":92},[1109],{"type":37,"value":1110}," new",{"type":32,"tag":79,"props":1112,"children":1113},{"style":104},[1114],{"type":37,"value":1115}," TextEncoder",{"type":32,"tag":79,"props":1117,"children":1118},{"style":86},[1119],{"type":37,"value":692},{"type":32,"tag":79,"props":1121,"children":1122},{"class":81,"line":163},[1123,1127,1132,1136,1141,1146,1151,1156,1161,1166],{"type":32,"tag":79,"props":1124,"children":1125},{"style":92},[1126],{"type":37,"value":1096},{"type":32,"tag":79,"props":1128,"children":1129},{"style":216},[1130],{"type":37,"value":1131}," data",{"type":32,"tag":79,"props":1133,"children":1134},{"style":92},[1135],{"type":37,"value":604},{"type":32,"tag":79,"props":1137,"children":1138},{"style":86},[1139],{"type":37,"value":1140}," encoder.",{"type":32,"tag":79,"props":1142,"children":1143},{"style":104},[1144],{"type":37,"value":1145},"encode",{"type":32,"tag":79,"props":1147,"children":1148},{"style":86},[1149],{"type":37,"value":1150},"(value.",{"type":32,"tag":79,"props":1152,"children":1153},{"style":104},[1154],{"type":37,"value":1155},"trim",{"type":32,"tag":79,"props":1157,"children":1158},{"style":86},[1159],{"type":37,"value":1160},"().",{"type":32,"tag":79,"props":1162,"children":1163},{"style":104},[1164],{"type":37,"value":1165},"toLowerCase",{"type":32,"tag":79,"props":1167,"children":1168},{"style":86},[1169],{"type":37,"value":1170},"());\n",{"type":32,"tag":79,"props":1172,"children":1173},{"class":81,"line":246},[1174,1178,1183,1187,1192,1197,1202,1206,1211],{"type":32,"tag":79,"props":1175,"children":1176},{"style":92},[1177],{"type":37,"value":1096},{"type":32,"tag":79,"props":1179,"children":1180},{"style":216},[1181],{"type":37,"value":1182}," hashBuffer",{"type":32,"tag":79,"props":1184,"children":1185},{"style":92},[1186],{"type":37,"value":604},{"type":32,"tag":79,"props":1188,"children":1189},{"style":92},[1190],{"type":37,"value":1191}," await",{"type":32,"tag":79,"props":1193,"children":1194},{"style":86},[1195],{"type":37,"value":1196}," crypto.subtle.",{"type":32,"tag":79,"props":1198,"children":1199},{"style":104},[1200],{"type":37,"value":1201},"digest",{"type":32,"tag":79,"props":1203,"children":1204},{"style":86},[1205],{"type":37,"value":714},{"type":32,"tag":79,"props":1207,"children":1208},{"style":98},[1209],{"type":37,"value":1210},"'SHA-256'",{"type":32,"tag":79,"props":1212,"children":1213},{"style":86},[1214],{"type":37,"value":1215},", data);\n",{"type":32,"tag":79,"props":1217,"children":1218},{"class":81,"line":259},[1219,1223,1228,1232,1237,1242,1246,1251,1256],{"type":32,"tag":79,"props":1220,"children":1221},{"style":92},[1222],{"type":37,"value":1096},{"type":32,"tag":79,"props":1224,"children":1225},{"style":216},[1226],{"type":37,"value":1227}," hashArray",{"type":32,"tag":79,"props":1229,"children":1230},{"style":92},[1231],{"type":37,"value":604},{"type":32,"tag":79,"props":1233,"children":1234},{"style":86},[1235],{"type":37,"value":1236}," Array.",{"type":32,"tag":79,"props":1238,"children":1239},{"style":104},[1240],{"type":37,"value":1241},"from",{"type":32,"tag":79,"props":1243,"children":1244},{"style":86},[1245],{"type":37,"value":714},{"type":32,"tag":79,"props":1247,"children":1248},{"style":92},[1249],{"type":37,"value":1250},"new",{"type":32,"tag":79,"props":1252,"children":1253},{"style":104},[1254],{"type":37,"value":1255}," Uint8Array",{"type":32,"tag":79,"props":1257,"children":1258},{"style":86},[1259],{"type":37,"value":1260},"(hashBuffer));\n",{"type":32,"tag":79,"props":1262,"children":1263},{"class":81,"line":272},[1264,1269,1274,1279,1283,1288,1293,1298,1302,1306,1311,1315,1320,1324,1329,1333,1338,1343,1348,1352,1357],{"type":32,"tag":79,"props":1265,"children":1266},{"style":92},[1267],{"type":37,"value":1268},"  return",{"type":32,"tag":79,"props":1270,"children":1271},{"style":86},[1272],{"type":37,"value":1273}," hashArray.",{"type":32,"tag":79,"props":1275,"children":1276},{"style":104},[1277],{"type":37,"value":1278},"map",{"type":32,"tag":79,"props":1280,"children":1281},{"style":86},[1282],{"type":37,"value":714},{"type":32,"tag":79,"props":1284,"children":1285},{"style":1080},[1286],{"type":37,"value":1287},"b",{"type":32,"tag":79,"props":1289,"children":1290},{"style":92},[1291],{"type":37,"value":1292}," =>",{"type":32,"tag":79,"props":1294,"children":1295},{"style":86},[1296],{"type":37,"value":1297}," b.",{"type":32,"tag":79,"props":1299,"children":1300},{"style":104},[1301],{"type":37,"value":687},{"type":32,"tag":79,"props":1303,"children":1304},{"style":86},[1305],{"type":37,"value":714},{"type":32,"tag":79,"props":1307,"children":1308},{"style":216},[1309],{"type":37,"value":1310},"16",{"type":32,"tag":79,"props":1312,"children":1313},{"style":86},[1314],{"type":37,"value":682},{"type":32,"tag":79,"props":1316,"children":1317},{"style":104},[1318],{"type":37,"value":1319},"padStart",{"type":32,"tag":79,"props":1321,"children":1322},{"style":86},[1323],{"type":37,"value":714},{"type":32,"tag":79,"props":1325,"children":1326},{"style":216},[1327],{"type":37,"value":1328},"2",{"type":32,"tag":79,"props":1330,"children":1331},{"style":86},[1332],{"type":37,"value":499},{"type":32,"tag":79,"props":1334,"children":1335},{"style":98},[1336],{"type":37,"value":1337},"'0'",{"type":32,"tag":79,"props":1339,"children":1340},{"style":86},[1341],{"type":37,"value":1342},")).",{"type":32,"tag":79,"props":1344,"children":1345},{"style":104},[1346],{"type":37,"value":1347},"join",{"type":32,"tag":79,"props":1349,"children":1350},{"style":86},[1351],{"type":37,"value":714},{"type":32,"tag":79,"props":1353,"children":1354},{"style":98},[1355],{"type":37,"value":1356},"''",{"type":32,"tag":79,"props":1358,"children":1359},{"style":86},[1360],{"type":37,"value":1361},");\n",{"type":32,"tag":79,"props":1363,"children":1364},{"class":81,"line":285},[1365],{"type":32,"tag":79,"props":1366,"children":1367},{"style":86},[1368],{"type":37,"value":1369},"}\n",{"type":32,"tag":33,"props":1371,"children":1372},{},[1373,1375,1381,1383,1388],{"type":37,"value":1374},"Отправьте этот хеш с client-side через ",{"type":32,"tag":60,"props":1376,"children":1378},{"className":1377},[],[1379],{"type":37,"value":1380},"dataLayer.push()",{"type":37,"value":1382},", захватите как переменную в sGTM, передайте в тег Google Ads. ",{"type":32,"tag":52,"props":1384,"children":1385},{},[1386],{"type":37,"value":1387},"Критично:",{"type":37,"value":1389}," хеширование должно выполняться на client-side (конфиденциальность — ПДн не должны отправляться на сервер в открытом виде) ИЛИ выполняться в sGTM с отключенным логированием.",{"type":32,"tag":33,"props":1391,"children":1392},{},[1393,1398,1400,1406,1408,1414,1416,1422],{"type":32,"tag":52,"props":1394,"children":1395},{},[1396],{"type":37,"value":1397},"Связь с Consent Mode v2:",{"type":37,"value":1399}," если не предоставлены согласия ",{"type":32,"tag":60,"props":1401,"children":1403},{"className":1402},[],[1404],{"type":37,"value":1405},"ad_user_data",{"type":37,"value":1407}," и ",{"type":32,"tag":60,"props":1409,"children":1411},{"className":1410},[],[1412],{"type":37,"value":1413},"ad_personalization",{"type":37,"value":1415},", Enhanced Conversions не будут работать. Вам нужно передать сигналы согласия в sGTM через ",{"type":32,"tag":60,"props":1417,"children":1419},{"className":1418},[],[1420],{"type":37,"value":1421},"consent",{"type":37,"value":1423}," событие в dataLayer.",{"type":32,"tag":40,"props":1425,"children":1427},{"id":1426},"дедубликация-событий-параллельная-отправка-с-клиента-и-сервера",[1428],{"type":37,"value":1429},"Дедубликация событий: параллельная отправка с клиента и сервера",{"type":32,"tag":33,"props":1431,"children":1432},{},[1433,1435,1440,1442,1447],{"type":37,"value":1434},"В некоторых сценариях срабатывают оба тега — client-side и server-side. Например, в Safari срабатывает client-side тег, но ITP удаляет cookie через 7 дней, тогда как серверная сторона продолжает работать. Возникает риск дубликата. Решение: использовать ",{"type":32,"tag":52,"props":1436,"children":1437},{},[1438],{"type":37,"value":1439},"уникальный event_id",{"type":37,"value":1441}," (Meta) или ",{"type":32,"tag":52,"props":1443,"children":1444},{},[1445],{"type":37,"value":1446},"transaction_id",{"type":37,"value":1448}," (Google Analytics 4).",{"type":32,"tag":33,"props":1450,"children":1451},{},[1452],{"type":37,"value":1453},"Дедубликация в GA4:",{"type":32,"tag":69,"props":1455,"children":1457},{"className":580,"code":1456,"language":582,"meta":16,"style":16},"gtag('event', 'purchase', {\n  transaction_id: 'ORDER_12345', \u002F\u002F уникален для каждого заказа\n  value: 99.00,\n  currency: 'USD'\n});\n",[1458],{"type":32,"tag":60,"props":1459,"children":1460},{"__ignoreMap":16},[1461,1491,1514,1529,1540],{"type":32,"tag":79,"props":1462,"children":1463},{"class":81,"line":82},[1464,1469,1473,1478,1482,1487],{"type":32,"tag":79,"props":1465,"children":1466},{"style":104},[1467],{"type":37,"value":1468},"gtag",{"type":32,"tag":79,"props":1470,"children":1471},{"style":86},[1472],{"type":37,"value":714},{"type":32,"tag":79,"props":1474,"children":1475},{"style":98},[1476],{"type":37,"value":1477},"'event'",{"type":32,"tag":79,"props":1479,"children":1480},{"style":86},[1481],{"type":37,"value":499},{"type":32,"tag":79,"props":1483,"children":1484},{"style":98},[1485],{"type":37,"value":1486},"'purchase'",{"type":32,"tag":79,"props":1488,"children":1489},{"style":86},[1490],{"type":37,"value":733},{"type":32,"tag":79,"props":1492,"children":1493},{"class":81,"line":130},[1494,1499,1504,1508],{"type":32,"tag":79,"props":1495,"children":1496},{"style":86},[1497],{"type":37,"value":1498},"  transaction_id: ",{"type":32,"tag":79,"props":1500,"children":1501},{"style":98},[1502],{"type":37,"value":1503},"'ORDER_12345'",{"type":32,"tag":79,"props":1505,"children":1506},{"style":86},[1507],{"type":37,"value":499},{"type":32,"tag":79,"props":1509,"children":1511},{"style":1510},"--shiki-default:#6A737D",[1512],{"type":37,"value":1513},"\u002F\u002F уникален для каждого заказа\n",{"type":32,"tag":79,"props":1515,"children":1516},{"class":81,"line":163},[1517,1521,1525],{"type":32,"tag":79,"props":1518,"children":1519},{"style":86},[1520],{"type":37,"value":741},{"type":32,"tag":79,"props":1522,"children":1523},{"style":216},[1524],{"type":37,"value":746},{"type":32,"tag":79,"props":1526,"children":1527},{"style":86},[1528],{"type":37,"value":751},{"type":32,"tag":79,"props":1530,"children":1531},{"class":81,"line":246},[1532,1536],{"type":32,"tag":79,"props":1533,"children":1534},{"style":86},[1535],{"type":37,"value":759},{"type":32,"tag":79,"props":1537,"children":1538},{"style":98},[1539],{"type":37,"value":764},{"type":32,"tag":79,"props":1541,"children":1542},{"class":81,"line":259},[1543],{"type":32,"tag":79,"props":1544,"children":1545},{"style":86},[1546],{"type":37,"value":788},{"type":32,"tag":33,"props":1548,"children":1549},{},[1550,1552,1557],{"type":37,"value":1551},"Если отправить одинаковый ",{"type":32,"tag":60,"props":1553,"children":1555},{"className":1554},[],[1556],{"type":37,"value":1446},{"type":37,"value":1558}," как с client-side gtag.js, так и через sGTM, backend GA4 очистит дубликат (окно 48 часов).",{"type":32,"tag":33,"props":1560,"children":1561},{},[1562,1567,1569,1574],{"type":32,"tag":52,"props":1563,"children":1564},{},[1565],{"type":37,"value":1566},"Управление timeout'ами:",{"type":37,"value":1568}," в теги sGTM встроено значение ",{"type":32,"tag":52,"props":1570,"children":1571},{},[1572],{"type":37,"value":1573},"timeout",{"type":37,"value":1575}," (по умолчанию 2000ms). Если ответ CAPI занимает 3-4 секунды, тег может истечь и событие не будет отправлено. В production'е увеличьте timeout на 5000ms, настройте мониторинг. Timeout запроса Cloud Run (10s) должен быть согласован с timeout'ом тега sGTM.",{"type":32,"tag":40,"props":1577,"children":1579},{"id":1578},"production-checklist-мониторинг-логирование-отладка",[1580],{"type":37,"value":1581},"Production Checklist: мониторинг, логирование, отладка",{"type":32,"tag":33,"props":1583,"children":1584},{},[1585],{"type":37,"value":1586},"Перед отправкой sGTM в production:",{"type":32,"tag":393,"props":1588,"children":1589},{},[1590,1600,1615,1631,1656],{"type":32,"tag":397,"props":1591,"children":1592},{},[1593,1598],{"type":32,"tag":52,"props":1594,"children":1595},{},[1596],{"type":37,"value":1597},"Режим предпросмотра:",{"type":37,"value":1599}," откройте Preview в веб-интерфейсе GTM, подключитесь к URL sGTM контейнера, выполните отладку событий клиента в консоли",{"type":32,"tag":397,"props":1601,"children":1602},{},[1603,1608,1610],{"type":32,"tag":52,"props":1604,"children":1605},{},[1606],{"type":37,"value":1607},"Тест запуска тега:",{"type":37,"value":1609}," для каждого тега (CAPI, Google Ads, GA4) проверьте с помощью ",{"type":32,"tag":52,"props":1611,"children":1612},{},[1613],{"type":37,"value":1614},"Tag Assistant",{"type":32,"tag":397,"props":1616,"children":1617},{},[1618,1623,1625],{"type":32,"tag":52,"props":1619,"children":1620},{},[1621],{"type":37,"value":1622},"Сигналы согласия:",{"type":37,"value":1624}," протестируйте Consent Mode v2 — проверьте, какие теги не запускаются при ",{"type":32,"tag":60,"props":1626,"children":1628},{"className":1627},[],[1629],{"type":37,"value":1630},"ad_storage=denied",{"type":32,"tag":397,"props":1632,"children":1633},{},[1634,1639,1641,1646,1648,1654],{"type":32,"tag":52,"props":1635,"children":1636},{},[1637],{"type":37,"value":1638},"Экспорт логов:",{"type":37,"value":1640}," экспортируйте логи Cloud Run в ",{"type":32,"tag":52,"props":1642,"children":1643},{},[1644],{"type":37,"value":1645},"Cloud Logging",{"type":37,"value":1647},", фильтр: ",{"type":32,"tag":60,"props":1649,"children":1651},{"className":1650},[],[1652],{"type":37,"value":1653},"resource.type=\"cloud_run_revision\"",{"type":37,"value":1655},", просмотрите payload события",{"type":32,"tag":397,"props":1657,"children":1658},{},[1659,1664,1666,1672],{"type":32,"tag":52,"props":1660,"children":1661},{},[1662],{"type":37,"value":1663},"Оповещения об ошибках:",{"type":37,"value":1665}," установите оповещение в Cloud Monitoring: ",{"type":32,"tag":60,"props":1667,"children":1669},{"className":1668},[],[1670],{"type":37,"value":1671},"http_response_code >= 500",{"type":37,"value":1673},", порог 10\u002Fмин",{"type":32,"tag":33,"props":1675,"children":1676},{},[1677],{"type":32,"tag":52,"props":1678,"children":1679},{},[1680],{"type":37,"value":1681},"Инструменты отладки:",{"type":32,"tag":479,"props":1683,"children":1684},{},[1685,1701,1724],{"type":32,"tag":397,"props":1686,"children":1687},{},[1688,1693,1695],{"type":32,"tag":52,"props":1689,"children":1690},{},[1691],{"type":37,"value":1692},"Режим отладки sGTM:",{"type":37,"value":1694}," откройте URL предпросмотра контейнера в браузере, добавьте query string ",{"type":32,"tag":60,"props":1696,"children":1698},{"className":1697},[],[1699],{"type":37,"value":1700},"gtm_debug=x",{"type":32,"tag":397,"props":1702,"children":1703},{},[1704,1709,1711,1717,1718],{"type":32,"tag":52,"props":1705,"children":1706},{},[1707],{"type":37,"value":1708},"Network Tab:",{"type":37,"value":1710}," в DevTools браузера проверьте запросы ",{"type":32,"tag":60,"props":1712,"children":1714},{"className":1713},[],[1715],{"type":37,"value":1716},"\u002Fgtm.js",{"type":37,"value":1407},{"type":32,"tag":60,"props":1719,"children":1721},{"className":1720},[],[1722],{"type":37,"value":1723},"\u002Fr\u002Fcollect",{"type":32,"tag":397,"props":1725,"children":1726},{},[1727,1732],{"type":32,"tag":52,"props":1728,"children":1729},{},[1730],{"type":37,"value":1731},"Meta Event Test:",{"type":37,"value":1733}," Events Manager → Test Events, просмотрите события за последний час",{"type":32,"tag":33,"props":1735,"children":1736},{},[1737,1742,1744,1750,1752,1757],{"type":32,"tag":52,"props":1738,"children":1739},{},[1740],{"type":37,"value":1741},"Распространенная проблема:",{"type":37,"value":1743}," IP-адрес клиента не доходит до sGTM — проверьте заголовок ",{"type":32,"tag":60,"props":1745,"children":1747},{"className":1746},[],[1748],{"type":37,"value":1749},"X-Forwarded-For",{"type":37,"value":1751}," на Cloud Load Balancer, активируйте опцию ",{"type":32,"tag":52,"props":1753,"children":1754},{},[1755],{"type":37,"value":1756},"Preserve Client IP",{"type":37,"value":1758},".",{"type":32,"tag":40,"props":1760,"children":1762},{"id":1761},"связь-архитектуры-данных-sgtm-bigquery-dbt",[1763],{"type":37,"value":1764},"Связь архитектуры данных: sGTM + BigQuery + dbt",{"type":32,"tag":33,"props":1766,"children":1767},{},[1768,1770,1775,1777,1782,1784,1793],{"type":37,"value":1769},"Вы можете транслировать события sGTM прямо в BigQuery — через ",{"type":32,"tag":52,"props":1771,"children":1772},{},[1773],{"type":37,"value":1774},"Firestore",{"type":37,"value":1776}," или ",{"type":32,"tag":52,"props":1778,"children":1779},{},[1780],{"type":37,"value":1781},"Pub\u002FSub",{"type":37,"value":1783},". Экспорт GA4 в BigQuery работает по графику (ежедневно), с sGTM возможна потоковая передача в реальном времени. Эта стратегия критична в контексте ",{"type":32,"tag":1785,"props":1786,"children":1790},"a",{"href":1787,"rel":1788},"https:\u002F\u002Fwww.roibase.com.tr\u002Fru\u002Ffirstparty",[1789],"nofollow",[1791],{"type":37,"value":1792},"архитектуры first-party измерений",{"type":37,"value":1794},": сырые события → модели dbt → семантический слой → dashboard.",{"type":32,"tag":33,"props":1796,"children":1797},{},[1798],{"type":37,"value":1799},"Пример потока:",{"type":32,"tag":393,"props":1801,"children":1802},{},[1803,1808,1813,1826],{"type":32,"tag":397,"props":1804,"children":1805},{},[1806],{"type":37,"value":1807},"Тег sGTM → отправляет JSON событие в Cloud Pub\u002FSub topic",{"type":32,"tag":397,"props":1809,"children":1810},{},[1811],{"type":37,"value":1812},"Dataflow job (или Cloud Function) → пишет из Pub\u002FSub в BigQuery",{"type":32,"tag":397,"props":1814,"children":1815},{},[1816,1818,1824],{"type":37,"value":1817},"Модель dbt → объединяет события по ",{"type":32,"tag":60,"props":1819,"children":1821},{"className":1820},[],[1822],{"type":37,"value":1823},"user_id",{"type":37,"value":1825},", применяет логику сессии",{"type":32,"tag":397,"props":1827,"children":1828},{},[1829],{"type":37,"value":1830},"Looker\u002FMetabase → dashboard'ы на основе представлений dbt",{"type":32,"tag":33,"props":1832,"children":1833},{},[1834,1836,1841,1843,1849,1850,1855,1856,1861,1863,1868],{"type":37,"value":1835},"Эта архитектура критична для ",{"type":32,"tag":52,"props":1837,"children":1838},{},[1839],{"type":37,"value":1840},"resolution идентичности",{"type":37,"value":1842},": вы можете объединить идентификаторы из sGTM (",{"type":32,"tag":60,"props":1844,"children":1846},{"className":1845},[],[1847],{"type":37,"value":1848},"client_id",{"type":37,"value":499},{"type":32,"tag":60,"props":1851,"children":1853},{"className":1852},[],[1854],{"type":37,"value":530},{"type":37,"value":499},{"type":32,"tag":60,"props":1857,"children":1859},{"className":1858},[],[1860],{"type":37,"value":980},{"type":37,"value":1862},") в BigQuery и создать единственный ",{"type":32,"tag":60,"props":1864,"children":1866},{"className":1865},[],[1867],{"type":37,"value":1823},{"type":37,"value":1869},". Пример инкрементальной модели dbt:",{"type":32,"tag":69,"props":1871,"children":1875},{"className":1872,"code":1873,"language":1874,"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{%\n","sql",[1876],{"type":32,"tag":60,"props":1877,"children":1878},{"__ignoreMap":16},[1879,1915,1922,1930,1938,1946,1954,1962,1970,1978,2009,2028,2076],{"type":32,"tag":79,"props":1880,"children":1881},{"class":81,"line":82},[1882,1887,1891,1896,1901,1905,1910],{"type":32,"tag":79,"props":1883,"children":1884},{"style":86},[1885],{"type":37,"value":1886},"{{ config(materialized",{"type":32,"tag":79,"props":1888,"children":1889},{"style":92},[1890],{"type":37,"value":141},{"type":32,"tag":79,"props":1892,"children":1893},{"style":98},[1894],{"type":37,"value":1895},"'incremental'",{"type":32,"tag":79,"props":1897,"children":1898},{"style":86},[1899],{"type":37,"value":1900},", unique_key",{"type":32,"tag":79,"props":1902,"children":1903},{"style":92},[1904],{"type":37,"value":141},{"type":32,"tag":79,"props":1906,"children":1907},{"style":98},[1908],{"type":37,"value":1909},"'event_id'",{"type":32,"tag":79,"props":1911,"children":1912},{"style":86},[1913],{"type":37,"value":1914},") }}\n",{"type":32,"tag":79,"props":1916,"children":1917},{"class":81,"line":130},[1918],{"type":32,"tag":79,"props":1919,"children":1920},{"emptyLinePlaceholder":698},[1921],{"type":37,"value":701},{"type":32,"tag":79,"props":1923,"children":1924},{"class":81,"line":163},[1925],{"type":32,"tag":79,"props":1926,"children":1927},{"style":92},[1928],{"type":37,"value":1929},"SELECT\n",{"type":32,"tag":79,"props":1931,"children":1932},{"class":81,"line":246},[1933],{"type":32,"tag":79,"props":1934,"children":1935},{"style":86},[1936],{"type":37,"value":1937},"  event_id,\n",{"type":32,"tag":79,"props":1939,"children":1940},{"class":81,"line":259},[1941],{"type":32,"tag":79,"props":1942,"children":1943},{"style":86},[1944],{"type":37,"value":1945},"  user_id,\n",{"type":32,"tag":79,"props":1947,"children":1948},{"class":81,"line":272},[1949],{"type":32,"tag":79,"props":1950,"children":1951},{"style":86},[1952],{"type":37,"value":1953},"  client_id,\n",{"type":32,"tag":79,"props":1955,"children":1956},{"class":81,"line":285},[1957],{"type":32,"tag":79,"props":1958,"children":1959},{"style":86},[1960],{"type":37,"value":1961},"  event_timestamp,\n",{"type":32,"tag":79,"props":1963,"children":1964},{"class":81,"line":298},[1965],{"type":32,"tag":79,"props":1966,"children":1967},{"style":86},[1968],{"type":37,"value":1969},"  event_name,\n",{"type":32,"tag":79,"props":1971,"children":1972},{"class":81,"line":26},[1973],{"type":32,"tag":79,"props":1974,"children":1975},{"style":86},[1976],{"type":37,"value":1977},"  event_params\n",{"type":32,"tag":79,"props":1979,"children":1980},{"class":81,"line":323},[1981,1986,1991,1996,2000,2005],{"type":32,"tag":79,"props":1982,"children":1983},{"style":92},[1984],{"type":37,"value":1985},"FROM",{"type":32,"tag":79,"props":1987,"children":1988},{"style":86},[1989],{"type":37,"value":1990}," {{ source(",{"type":32,"tag":79,"props":1992,"children":1993},{"style":98},[1994],{"type":37,"value":1995},"'sgtm_events'",{"type":32,"tag":79,"props":1997,"children":1998},{"style":86},[1999],{"type":37,"value":499},{"type":32,"tag":79,"props":2001,"children":2002},{"style":98},[2003],{"type":37,"value":2004},"'raw_events'",{"type":32,"tag":79,"props":2006,"children":2007},{"style":86},[2008],{"type":37,"value":1914},{"type":32,"tag":79,"props":2010,"children":2012},{"class":81,"line":2011},11,[2013,2018,2023],{"type":32,"tag":79,"props":2014,"children":2015},{"style":86},[2016],{"type":37,"value":2017},"{% ",{"type":32,"tag":79,"props":2019,"children":2020},{"style":92},[2021],{"type":37,"value":2022},"if",{"type":32,"tag":79,"props":2024,"children":2025},{"style":86},[2026],{"type":37,"value":2027}," is_incremental() %}\n",{"type":32,"tag":79,"props":2029,"children":2031},{"class":81,"line":2030},12,[2032,2037,2042,2047,2052,2057,2062,2067,2071],{"type":32,"tag":79,"props":2033,"children":2034},{"style":92},[2035],{"type":37,"value":2036},"WHERE",{"type":32,"tag":79,"props":2038,"children":2039},{"style":86},[2040],{"type":37,"value":2041}," event_timestamp ",{"type":32,"tag":79,"props":2043,"children":2044},{"style":92},[2045],{"type":37,"value":2046},">",{"type":32,"tag":79,"props":2048,"children":2049},{"style":86},[2050],{"type":37,"value":2051}," (",{"type":32,"tag":79,"props":2053,"children":2054},{"style":92},[2055],{"type":37,"value":2056},"SELECT",{"type":32,"tag":79,"props":2058,"children":2059},{"style":216},[2060],{"type":37,"value":2061}," MAX",{"type":32,"tag":79,"props":2063,"children":2064},{"style":86},[2065],{"type":37,"value":2066},"(event_timestamp) ",{"type":32,"tag":79,"props":2068,"children":2069},{"style":92},[2070],{"type":37,"value":1985},{"type":32,"tag":79,"props":2072,"children":2073},{"style":86},[2074],{"type":37,"value":2075}," {{ this }})\n",{"type":32,"tag":79,"props":2077,"children":2079},{"class":81,"line":2078},13,[2080],{"type":32,"tag":79,"props":2081,"children":2082},{"style":86},[2083],{"type":37,"value":2084},"{%\n",{"type":32,"tag":2086,"props":2087,"children":2088},"style",{},[2089],{"type":37,"value":2090},"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":2092},[2093,2096,2099,2100,2101,2102],{"id":42,"depth":130,"text":45,"children":2094},[2095],{"id":353,"depth":163,"text":356},{"id":446,"depth":130,"text":449,"children":2097},[2098],{"id":821,"depth":163,"text":824},{"id":959,"depth":130,"text":962},{"id":1426,"depth":130,"text":1429},{"id":1578,"depth":130,"text":1581},{"id":1761,"depth":130,"text":1764},"markdown","content:ru:data:server-side-gtm-conversion-api-production.md","content","ru\u002Fdata\u002Fserver-side-gtm-conversion-api-production.md","ru\u002Fdata\u002Fserver-side-gtm-conversion-api-production","md",1782050758242]