TL;DR
dataLayer- это не "куда-то пушнуть событие для GTM". Это контракт между продуктом, фронтендом, аналитикой, CRM и рекламными системами.- Нормальный контракт позволяет один раз описать событие и дальше маппить его в Google Ads, Meta CAPI, TikTok Events API, Yandex Metrica, GA4, BI и CRM.
- Главное поле - стабильный идентификатор события или заявки. Без него не будет дедупликации, offline postback, value-based bidding и нормального QA.
- PII нельзя разбрасывать по фронтенду. Email, phone, ИИН и клиентские ID должны жить в понятном consent-safe процессе, с нормализацией, хешированием и ограничением доступа.
1. Что это такое
dataLayer - это JavaScript-массив, через который сайт передает события в Google Tag Manager:
Сам по себе этот пуш ничего не решает. Ценность появляется, когда команда заранее договорилась, что означает каждое поле, кто его генерирует, где оно хранится и как уходит в рекламные платформы.
Плохой dataLayer: каждый подрядчик добавляет свои поля, фронтенд пушит form_submit, submitForm, lead_success, send_form, аналитик в GTM пишет Custom JS, а через месяц никто не понимает, какое событие реально означает заявку.
Хороший dataLayer выглядит как API-контракт: единая модель события, обязательные поля, дедупликация и QA-чеклист. Новый продукт добавляет product_id, а не новую аналитику.
2. Как работает механика
В банковском маркетинге событие редко заканчивается на сайте. Пользователь может увидеть рекламу, оставить телефон, пройти OTP и только через несколько дней открыть продукт.
Если dataLayer сохраняет только факт формы, рекламная система учится искать дешевые формы. Если dataLayer передает lead_id, click IDs, value и user matching fields, этот лид можно связать с CRM-результатом и отправить обратно в Google, Meta или TikTok как качественное событие.
Минимальная логика такая:
Visual brief
- Asset:
10.15-datalayer-contract-schema.png - Type: process schema
- Learning goal: показать, что dataLayer - это мост между рекламным кликом, сайтом, GTM, CRM и postback.
- Layout: вертикальная схема сверху вниз: реклама, лендинг, dataLayer, три ветки в Web GTM, sGTM/backend и CRM, затем offline postback и возврат value в рекламные платформы.
- Text labels: "click context", "event_id", "lead_id", "user_data", "consent", "offline value".
- Style: Goodlabs typography-first, clean flat UI, off-white background, no glow, no stock metaphors.
- Alt text: путь банковского события от рекламного клика до CRM-выдачи и обратной передачи value в рекламные системы.
3. Базовая схема события
Для BCC-подобного банка я бы не начинал с платформенных полей Meta или Google. Сначала нужен нейтральный внутренний контракт.
Ключевой момент: event_id и lead_id - не одно и то же.
event_id уникален для события. Он нужен для дедупликации: браузерный пиксель и серверный CAPI должны отправить один и тот же event_id.
lead_id живет дольше. Он связывает все шаги одной заявки: форма, OTP, approval, выдача, отмена.
4. Как это маппится в платформы
| Внутреннее поле | Google Ads / GA4 | Meta CAPI | TikTok Events API | Yandex Metrica |
|---|---|---|---|---|
event | conversion event / GA4 event name | event_name | event | goal / ecommerce action |
event_id | order ID / event parameter | event_id | event_id | custom parameter |
identity.transaction_id | transaction/order ID | custom data / dedupe helper | properties | ecommerce order id |
value.amount | conversion value | custom_data.value | properties value | ecommerce revenue |
value.currency | currency | custom_data.currency | currency | currency |
user_data.email | enhanced conversions user-provided data | user_data.em after hashing | advanced matching email after hashing | usually not needed |
user_data.phone | enhanced conversions user-provided data | user_data.ph after hashing | advanced matching phone after hashing | usually not needed |
traffic.gclid | click matching | not used | not used | not used |
traffic.fbclid, _fbc, _fbp | not used | match keys | not used | not used |
traffic.ttclid | not used | not used | click matching | not used |
Не надо заставлять фронтенд знать, как Meta называет email или как TikTok принимает phone. Фронтенд отправляет внутреннюю модель, а GTM, sGTM или backend переводят ее в конкретный API.
5. Примеры по банковской воронке
Lead: заявка создана
Это слабый, но полезный сигнал для базовой оптимизации и диагностики объема.
CompleteRegistration: OTP пройден
OTP - сильнее обычной формы: пользователь подтвердил телефон, а банк получил более чистый лид.
Purchase / Issue: продукт открыт или кредит выдан
Финальное событие лучше отправлять с backend или CRM. Фронт должен заранее передать lead_id, чтобы CRM outcome было к чему привязать.
Для банка value - это не всегда сумма кредита. Если передать 5 000 000 KZT как ценность, алгоритм может оптимизироваться на большой principal, а не на прибыль. Чаще правильнее передавать expected margin, комиссию, риск-скорректированную ценность или lead quality score.
6. Ошибки и диагностика
Самые частые поломки:
| Симптом | Вероятная причина | Как чинить |
|---|---|---|
| Meta показывает дубли событий | Pixel и CAPI отправляют разные event_id | Генерировать event_id один раз и прокидывать в обе стороны |
| Google Enhanced Conversions не проходит диагностику | email/phone отсутствует на conversion event или не включен user-provided data flow | Проверить GTM variable, consent и страницу, где доступны данные |
| TikTok не дедуплицирует browser и server события | event_id есть только в Events API или только в Pixel | Отправлять один и тот же event_id через оба канала |
| CRM не может вернуть offline conversion | в форме не сохранили lead_id, gclid, _fbc, ttclid | Создать click context и сохранять его вместе с заявкой |
| ROAS выглядит красиво, но продажи не растут | в value передается лимит, сумма кредита или мусорный proxy | Перейти на expected margin или validated status |
| Юристы блокируют запуск | PII передается без понятного consent и ownership | Разделить analytics consent, ads consent, PII hashing и backend ownership |
Диагностика начинается не с GTM Preview, а с вопроса: "Можно ли по одной заявке пройти путь от клика до CRM-статуса и обратно?" Если нет, теги не спасут.
7. Локальный контекст РК и СНГ
В Казахстане банковская воронка часто смешанная: сайт, приложение, WhatsApp, отделение и call center. Поэтому dataLayer должен быть не просто web-аналитикой, а мостом к CRM.
Есть несколько локальных особенностей:
- Телефон важнее email. Для matching и CRM phone обычно надежнее, но его нужно нормализовать:
8701...переводить в7701..., убрать пробелы, скобки и плюс. - Kaspi-поведение изменило ожидания пользователей. Люди ждут быстрый статус, понятный next step и минимум полей. Если форма просит лишнее, CR падает.
- WhatsApp и Telegram часто становятся продолжением воронки. Если переход в мессенджер не сохраняет
lead_id, attribution ломается. - Банк может иметь сильный внутренний ID, включая ИИН, но это не значит, что его можно отправлять наружу. В рекламные платформы лучше отправлять разрешенные phone/email/click IDs и держать внутренние ключи внутри банка.
8. Кейс BCC: зачем нужен единый payload
В B2B-банке типичная боль такая: рекламные кампании дают заявки, но качество неизвестно. CPL выглядит дешевым, менеджеры жалуются на мусор, скоринг отсекает большую часть лидов, а рекламный кабинет продолжает оптимизироваться на форму.
Единый dataLayer решает первый слой проблемы:
- На первом визите сохраняются
gclid,fbclid,ttclid, UTM иanonymous_id. - При отправке формы создается
lead_id. - Все последующие web-события несут тот же
lead_id. - CRM получает
lead_idи click context. - Когда заявка проходит скоринг, одобрение или выдачу, backend отправляет offline event с ценностью.
- Рекламные платформы начинают получать не только лиды, но и quality feedback.
После этого маркетолог сравнивает не "Google дал 500 лидов, Meta дала 700", а "Google дал 80 одобренных заявок с expected margin X, Meta дала 60 с expected margin Y". Это разговор про P&L, а не про красивый dashboard.
9. Чеклист внедрения
- Описаны все ключевые события воронки: view, lead, OTP, approval, issue, reject.
- Для каждого события есть owner: frontend, backend, CRM или analytics.
-
event_idгенерируется один раз на событие и используется для browser/server дедупликации. -
lead_idсохраняется в CRM и проходит через все статусы заявки. - Click IDs сохраняются до гидратации SPA и до перехода в мессенджер/приложение.
- Phone/email нормализуются до хеширования.
- Consent status передается вместе с событием.
- В GTM есть Data Layer Variables для всех обязательных полей.
- Есть тестовая заявка, по которой можно показать путь от рекламы до CRM outcome.
- В документации есть mapping table для Google, Meta, TikTok и Yandex.
Видео к теме
Базовый разбор событий и key events в GA4. Подходит как видео-подложка к части про event, event_id и conversion mapping.
Полезно, если dataLayer дальше уходит в sGTM, Meta CAPI, TikTok Events API или backend postback.
Главный совет
Не начинайте с вопроса "какой тег поставить в GTM". Начинайте с контракта события. Если у события нет стабильного ID, owner, бизнес-смысла и связи с CRM, это шум. Хороший dataLayer должен пережить смену подрядчика, новый рекламный кабинет, переезд на sGTM и появление нового продукта. Тогда маркетинг перестает покупать лиды вслепую.
Sources / Notes
- Google Ads Help: Enhanced conversions for web using Google Tag Manager - https://support.google.com/google-ads/answer/10172785
- TikTok Ads Help: Event deduplication - https://ads.tiktok.com/help/article?aid=10012410
- Yandex Metrica Help: Ecommerce data through
window.dataLayer- https://yandex.ru/support/metrica/ru/ecommerce/data - Internal Goodlabs notes:
cases/bcc-digital-strategy-2026.md,cases/halyk-datalayer-nuxt-spa.md,wiki/articles/banking-offline-branch-attribution/index.md