dataLayer - единый интерфейс между сайтом и GTM. Всё, что не в dataLayer - не существует для аналитики.
#intermediate #technical #block-10
Навигация
← 10.15 - GTM - архитектура и принципы | → 10.17 - GTM - встроенные переменные
Что такое dataLayer
dataLayer - это JavaScript-массив, который служит транспортным слоем между вашим сайтом (или приложением) и Google Tag Manager. Разработчики пушат в него данные, GTM их читает и использует для триггеров и переменных.
Почему не DOM scraping
| Подход | Надёжность | Скорость | Масштабируемость |
|---|---|---|---|
| dataLayer push | ✅ Высокая - данные структурированы | ✅ Мгновенно | ✅ Любые данные |
| DOM scraping (CSS selectors) | ❌ Ломается при редизайне | ❌ Зависит от рендера | ❌ Только видимое |
| Auto-Event Variables | ⚠️ Средняя - зависит от HTML | ⚠️ Event-driven | ⚠️ Ограничено кликами/формами |
Правило: Если данные доступны на бэкенде или в state приложения - всегда используйте dataLayer. DOM scraping - крайний случай, когда у вас нет доступа к коду.
Подробнее: 10.21 - GTM - DOM Scraping vs dataLayer
Источник: Google - Data Layer Developer Guide
Синтаксис
Базовый push
Push с e-commerce данными
Важно: ecommerce clear
Перед каждым e-commerce push нужно очищать предыдущие данные:
Почему: dataLayer делает shallow merge объектов. Если предыдущий push содержал ecommerce.items с 5 товарами, а новый - с 1, без clear вы получите мусор.
Источник: Google - GA4 Ecommerce Developer Guide
Как GTM читает dataLayer
Data Layer Variable (v2)
В GTM создаётся переменная типа Data Layer Variable:
| Настройка | Значение | Пояснение |
|---|---|---|
| Variable Name | ecommerce.items.0.item_name | Dot-notation путь к значению |
| Data Layer Version | Version 2 | Всегда Version 2 |
| Default Value | (not set) | Если значение отсутствует |
Dot-notation - доступ к вложенным объектам
Custom Event Trigger
Триггер срабатывает, когда в dataLayer появляется push с определённым event:
Trigger Type: Custom Event
Event Name: add_to_cart
Этот триггер сработает при:
Паттерны для разных вертикалей
Финтех (BCC, Halyk, Solva)
E-commerce (Kaspi Shop, Arbuz.kz)
Mobile App Web-View (гибридные приложения)
Debugging dataLayer
1. Console
2. GTM Preview Mode
GTM Preview Mode показывает:
- Все dataLayer pushes в хронологическом порядке
- Состояние Data Layer Variables в момент каждого события
- Какие триггеры сработали и не сработали
3. Расширения
- dataLayer Inspector+ (Chrome) - лучший инструмент, показывает real-time pushes
- Omnibug - универсальный дебаггер для всех тегов
- GA Debugger - специфично для GA4
Источник: Analytics Mania - How to Debug dataLayer
Частые ошибки
1. Push до создания массива
2. Overwrite вместо push
3. Типы данных
4. Timing на SPA (React, Vue, Next.js)
На SPA-сайтах dataLayer.push с событием page_view нужно вызывать при каждом route change, а не только при первой загрузке:
В GTM для SPA используйте триггер History Change (см. 10.19 - GTM - триггеры глубоко) или Custom Event page_view.
Архитектура: кто что пушит
Ответственность
| Источник данных | Кто реализует | Пример |
|---|---|---|
| Page-level данные (URL, title) | GTM Built-in Variables | Автоматически |
| User identity (user_id, segment) | Backend → dataLayer на SSR | <script>dataLayer.push({user_id: '...'})</script> |
| E-commerce (items, prices) | Frontend → dataLayer | На событиях: view, add, purchase |
| Form submissions | Frontend → dataLayer | На submit, после валидации |
| Custom interactions | Frontend → dataLayer | Scroll depth, video play, tab switch |
Дополнительные материалы
- Google - Data Layer Reference - официальная документация
- Simo Ahava - Data Layer Best Practices - углублённый разбор
- Analytics Mania - dataLayer Tutorial - пошаговый гайд
- Measure School - dataLayer Video Guide - видео-формат
🔧 Практика
Задание 1: dataLayer для интернет-магазина
Напишите полный набор dataLayer.push() для e-commerce:
page_view(с user data, если авторизован)view_item_list(категория товаров)view_item(карточка товара)add_to_cartbegin_checkoutpurchase
Для каждого: полный код с всеми рекомендованными параметрами GA4.
Задание 2: Debug
- Откройте любой e-commerce сайт (arbuz.kz, kaspi.kz, wildberries.kz)
- В Console:
console.table(dataLayer) - Совершите 5 действий (просмотр, добавление в корзину, поиск)
- Задокументируйте: какие события пушатся, какие параметры, что отсутствует?
Задание 3: SPA dataLayer
Реализуйте dataLayer.push для SPA на React/Vue:
- Virtual pageview при route change
- User properties при авторизации
- Custom event при scroll > 50%