Архітектура Data Layer для GTM: правила, приклади та налаштування
Уявіть: маркетолог додає тег у GTM, а за тиждень з'ясовується, що дані в GA4 приходять з переплутаними параметрами. Джерело проблеми — хаотична передача даних через Data Layer без єдиної схеми. Ми проєктуємо шар даних так, щоб GTM працював як конструктор: маркетолог сам створює потрібні теги, а код залишається стабільним. За нашою статистикою, правильно налаштований Data Layer скорочує кількість помилок у звітах на 70%, прискорює впровадження нових метрик у 4 рази (краще прямого кодування в 4 рази) та знижує навантаження на розробку на 80%. Типовий проєкт окупається в середньому за 2 місяці, а економія для середнього інтернет-магазину сягає до $2000 на місяць. Ми налаштували Data Layer для 50+ проєктів (середній досвід команди — 7 років), тому гарантуємо чистоту даних і прозорість GTM.
Які проблеми вирішує грамотний шар даних
Змішування даних різних подій — якщо не очищати ecommerce, попередня покупка може перезаписати поточний кошик. Дублювання коду на кожен новий тег — після стандартизації подій ви додаєте один push, а GTM забирає потрібне. Помилки в передачі параметрів — налагодження через Preview Mode GTM виявляє відсутні ключі за хвилини. За статистикою, 90% помилок у даних ecommerce пов'язані з відсутністю очищення перед push.
Наприклад, на одному проєкті через відсутність очищення ecommerce повторні перегляди товару вважалися push у кошик. Відсоток конверсій упав на 20% вниз. Після впровадження правильної архітектури дані стали чистими, і конверсія повернулася до норми.
Чому очищення ecommerce обов'язкове?
GA4 працює як state-машина: якщо в Data Layer залишилися старі дані, новий тег може їх підхопити. Перед кожною ecommerce-подією потрібно виконувати:
// Обязательно перед каждым e-commerce событием
dataLayer.push({ ecommerce: null });
dataLayer.push({
event: 'view_item',
ecommerce: { /* новые данные */ }
});
Цей патерн описаний в офіційній документації Google та обов'язковий для коректної роботи Enhanced Ecommerce. За статистикою, 90% помилок у даних ecommerce пов'язані саме з відсутністю цього очищення.
Як налагоджувати Data Layer у GTM?
Основний інструмент — Preview Mode. Відкрийте GTM, натисніть Preview, введіть URL сайту. У правій панелі з'явиться вкладка Data Layer — там видно всі push з полями. Додатково використовуйте консоль браузера:
// Просмотреть все события Data Layer в консоли
window.dataLayer.forEach((item, index) => {
if (item.event) console.log(index, item.event, item);
});
Preview Mode у 10 разів швидше за ручну перевірку коду — він показує стан Data Layer у реальному часі.
Архітектура: від ініціалізації до подій
Ініціалізація має бути першим рядком перед скриптом GTM. Глобальні дані (тип сторінки, мова, інформація про користувача) пушаться один раз при завантаженні:
<script>
window.dataLayer = window.dataLayer || [];
// Глобальные данные страницы
window.dataLayer.push({
pageType: '{{ $pageType }}', // 'product', 'category', 'checkout', 'confirmation'
siteLanguage: '{{ app()->getLocale() }}',
{% if auth()->check() %}
userId: {{ auth()->id() }},
userType: '{{ auth()->user()->isB2B() ? "b2b" : "b2c" }}',
userPlan: '{{ auth()->user()->plan }}',
{% endif %}
});
</script>
<!-- Далее GTM snippet -->
Усі події слідують єдиному формату: event (строго за списком), ecommerce (для транзакцій) та додаткові поля. Ось приклад для додавання в кошик:
// Хорошая структура
dataLayer.push({
event: 'product_add_to_cart',
ecommerce: {
currency: 'RUB',
value: product.price,
items: [{
item_id: product.id,
item_name: product.name,
item_brand: product.brand,
item_category: product.category,
price: product.price,
quantity: qty
}]
}
});
Кожній події в GTM відповідає тригер Custom Event з таким самим ім'ям, а змінні Data Layer Variable витягують потрібні поля. У підсумку маркетолог може додати тег за хвилину.
| Подія | Ім'я події | Обов'язкові поля |
|---|---|---|
| Перегляд товару | view_item | ecommerce.items, ecommerce.currency |
| Додавання в кошик | add_to_cart | ecommerce.items, ecommerce.value |
| Покупка | purchase | ecommerce.transaction_id, ecommerce.value, ecommerce.items |
Порівняйте з прямим додаванням коду в GTM: Data Layer простіше масштабувати — він не вимагає зміни коду сайту при додаванні нового тега. Це скорочує час на 70% порівняно з традиційним підходом.
Процес налаштування під ключ
- Аудит — аналізуємо поточну структуру GTM, GA4, список подій, які потрібні бізнесу.
- Проєктування — створюємо таблицю подій з іменами та полями, погоджуємо з маркетологом.
- Реалізація — впроваджуємо ініціалізацію, push, очищення ecommerce, SSR-змінні (якщо потрібно).
- Налаштування GTM — створюємо змінні Data Layer Variable та тригери Custom Event.
- Налагодження — перевіряємо кожну подію в Preview Mode, виправляємо помилки.
- Документація — передаємо маркетологу гайд по додаванню нових тегів.
Що входить в результат
- Чистий шар даних з документованою схемою подій.
- Налаштовані змінні та тригери в GTM.
- Гайд для маркетолога «Як додати тег без розробника».
- Підтримка протягом тижня після здачі.
Терміни та як почати
Базова архітектура — 2–3 дні. З ecommerce та кастомними подіями — до 5 днів. Зв'яжіться з нами, щоб ми оцінили ваш проєкт і запропонували архітектуру Data Layer. Отримайте консультацію — це безкоштовно. Замовте аудит поточного шару даних — ми знайдемо проблеми за годину.
Чи потрібен Data Layer при SSR?
При SSR (Next.js, Nuxt) дані можуть бути вбудовані в HTML на сервері, що виключає миготіння undefined. Приклад об'єднаного підходу:
// Серверная часть (Next.js getServerSideProps)
const initialDataLayer = [
{ event: 'page_data', pageType: 'product', product: { id: product.id, name: product.name, price: product.price } }
];
// В шаблоне: window.dataLayer = <?= json_encode($initialDataLayer) ?>;
Це гарантує, що дані будуть доступні одразу при завантаженні GTM, без гонки запитів. Порівняно з клієнтським рендерингом, SSR-метод у 2 рази знижує TTFB для аналітичних даних.
| Підхід | Ініціалізація | Час завантаження GTM | Ризик undefined |
|---|---|---|---|
| Клієнтський (CSR) | Після завантаження DOM | Високий | Є |
| Серверний (SSR) | В HTML | Низький | Немає |
Чек-лист для перевірки Data Layer
- [ ] Ініціалізація dataLayer до скрипта GTM
- [ ] Очищення ecommerce перед кожною подією
- [ ] Єдиний словник імен подій
- [ ] Тригери Custom Event для кожного типу
- [ ] Змінні Data Layer для полів
- [ ] Перевірка через Preview Mode
Приклад налагодження через Preview Mode
У Preview Mode ви можете бачити кожен push у реальному часі. Якщо дані не з'являються — перевірте, чи ініціалізовано dataLayer перед GTM.







