Электронная торговля в GA4 через dataLayer: полная настройка
Продвинутое3 минРедакция Innovialabs
Коротко
Сайт отправляет в dataLayer рекомендуемые события GA4 (view_item, add_to_cart, begin_checkout, purchase и другие) с массивом items, а GTM передаёт их в GA4 одним тегом. Главное — единая структура товаров во всех событиях, уникальный transaction_id и регулярная сверка выручки с бэкендом.
Как это устроено
GA4 строит отчёты по электронной торговле только из рекомендуемых событий с фиксированными названиями и параметрами. Схема работы:
- Код сайта при действии пользователя делает
dataLayer.pushс событием и объектомecommerce. - В Google Tag Manager триггер ловит событие.
- Тег события GA4 отправляет его вместе с данными электронной торговли.
Разработчик отвечает за правильный dataLayer, маркетолог — за GTM и отчёты. Договоритесь о структуре заранее и зафиксируйте её в документе.
Какие события нужны
| Этап | Событие | Когда отправлять |
|---|---|---|
| Каталог | view_item_list | показан список товаров |
select_item | клик по товару в списке | |
| Карточка | view_item | открыта карточка товара |
| Корзина | add_to_cart, remove_from_cart | товар добавлен или удалён |
view_cart | открыта корзина | |
| Оформление | begin_checkout | начало оформления |
add_shipping_info | выбран способ доставки | |
add_payment_info | выбран способ оплаты | |
| Покупка | purchase | заказ успешно создан |
| Возврат | refund | заказ возвращён полностью или частично |
Есть также view_promotion и select_promotion для баннеров и add_to_wishlist. Минимальный набор для работающей воронки: view_item, add_to_cart, begin_checkout, purchase.
Параметры товаров и событий
Каждое событие содержит массив items. У товара обязателен item_id или item_name, остальное — по возможности:
item_id,item_name— артикул и название, одинаковые во всех событиях;price— цена за единицу числом, не строкой;quantity— количество;item_brand,item_category…item_category5,item_variant;item_list_id,item_list_name,index— в каком списке и на какой позиции был товар;discount,coupon.
На уровне события: currency в формате ISO 4217 (например, UZS или USD) и value. Без currency выручка не будет учтена. Для purchase обязателен transaction_id, по желанию — tax, shipping, coupon.
Пример dataLayer
Перед каждым e-commerce событием очищайте объект ecommerce, иначе данные предыдущего события могут «прилипнуть» к следующему.
window.dataLayer = window.dataLayer || [];
dataLayer.push({ ecommerce: null });
dataLayer.push({
event: 'purchase',
ecommerce: {
transaction_id: 'ORD-10452',
currency: 'UZS',
value: 450000,
shipping: 30000,
items: [{
item_id: 'SKU-201',
item_name: 'Термокружка',
item_category: 'Посуда',
price: 150000,
quantity: 3
}]
}
});
Заранее решите, входят ли в value доставка и налоги, и применяйте правило одинаково везде.
Настройка в GTM
- Создайте триггер «Пользовательское событие» с регулярным выражением, например
view_item|add_to_cart|begin_checkout|purchase|refund. - Создайте тег «Google Analytics: событие GA4» с названием события
{{Event}}. - В дополнительных настройках тега включите «Отправлять данные электронной торговли» с источником Data Layer.
- Привяжите тег к триггеру и опубликуйте контейнер после проверки.
Одного тега хватает на все события, если структура dataLayer соответствует рекомендациям Google.
Возвраты
- Полный возврат: событие
refundсtransaction_idисходного заказа,currencyиvalue. - Частичный: то же плюс массив
itemsс возвращёнными товарами и количеством.
Возвраты обычно происходят в админке или CRM, а не на сайте у покупателя. Поэтому их удобнее отправлять с сервера через Measurement Protocol или загружать через импорт данных, а не через dataLayer.
Как проверить данные
- Предварительный просмотр GTM: событие сработало, во вкладке Data Layer правильная структура.
- DebugView в GA4: событие пришло с параметрами и товарами.
- Сверка с бэкендом: раз в неделю сравнивайте число заказов и выручку в GA4 с базой. Небольшие расхождения нормальны (блокировщики, отказ от cookie), большие указывают на ошибку.
Частые ошибки:
- Дубли
purchaseпри перезагрузке страницы «Спасибо». Отправляйте событие один раз — например, по флагу на сервере. - Цена строкой или с пробелами и символом валюты.
- Разные
item_idв карточке и в покупке — отчёты по товарам распадаются. - Нет
currency— выручка равна нулю. - Оплата на стороннем шлюзе обрывает сессию: добавьте домен шлюза в исключения рефералов.