Привет! Это вторая, практическая часть истории по настройке расширенной торговли. Первая — тут. Эта часть со скриншотами, нужными буквами и ссылками на первоисточники.


Первоисточники:

Вся настройка основана на статье Netpeak`a, к которому у нас теперь нет доступа

В GA4 переводим за счет скриптов Максима Гапчука, который тоже нас ненавидит

Официальная документация

Готовое ТЗ для разработчика


Содержание для быстрой навигации по странице:

Настройка GTM

Состоит из Тегов, Триггеров и Переменных. По порядку, от меньшего к большему, разбираемся ниже.

Переменные GTM

Первым делом настраиваем все перемененные в GTM:

Нужные нам выделены рамкой.

Переменные типа GTM EE (Event, category, non-interaction) нужны для настройка Analytics Universal, тогда как переменные JS — будет преобразовывать данные в datalayer в читаемый вид и понятный вид для GA4. Но для того, чтобы сделать читаемыми, необходимо объявить переменные типа DL (affiliation, ecommerce, transaction_id, value) — обязательно с корректными названиями.

Далее, по порядку (специально вынес текстом, для твоего удобства. Просто копируй и вставляй, наслаждайся процессом):

EE для UA

GTM EE Event Action
gtm-ee-event-action

GTM EE Event Category
gtm-ee-event-category

GTM EE Event Non-Interaction
gtm-ee-event-non-interaction

EE для GA4 (преобразуем данные)

JS — ga4 ecom events

function() {

  var event;

  var ecom = {{DL - ecommerce}};

  var keys = Object.keys(ecom);

  action = keys[0];



  switch(true) {



    case "detail" in ecom:

        event = "view_item";

        break;

    case "add" in ecom:

        event = "add_to_cart";

        break;

    case "remove" in ecom:

        event = "remove_from_cart";

        break;

    case "checkout" in ecom && ecom.checkout.actionField.step == 1:

        event = "begin_checkout";

        break;

    case "purchase" in ecom:

        event = "purchase";

        break;

    default:

        event = false;

  }

  return event;

}

JS — items

function() {

  var items = [];

  

  var ecom = {{DL - ecommerce}};

  var keys = Object.keys(ecom);

  var action = keys[0];



  

  prod_tr = function(products, list) {

    awProduct = []

products.forEach(function(item, i, products) {

            o = {};

            o.item_name = item.name;

            o.item_id = item.id;

            o.price = item.price;

            o.item_brand = item.brand;

            o.item_category = item.category.split("/")[0];

o.item_category2 = item.category.split("/")[1];

o.item_category3 = item.category.split("/")[2];

o.item_category4 = item.category.split("/")[3];

o.item_category5 = item.category.split("/")[4];

o.item_variant = item.variant;

o.item_list_name = list;

o.quantity = item.quantity;



            awProduct[i] = o;

return awProduct;

        });

return awProduct

  }



  switch(true) {



    case "detail" in ecom:

        list = ecom.detail.actionField ? ecom.detail.actionField.list : "";

        prod = ecom.detail.products;

        items = prod_tr(prod, list);

        break;

    case "add" in ecom:

        list = ecom.add.actionField ? ecom.add.actionField.list : "";

        prod = ecom.add.products;

        items = prod_tr(prod, list);

        break;

    case "remove" in ecom:

        list = ecom.remove.actionField ? ecom.remove.actionField.list : "";

        prod = ecom.remove.products;

        items = prod_tr(prod, list);

        break;

    case "checkout" in ecom && ecom.checkout.actionField.step == 1:

        prod = ecom.checkout.products;

        items = prod_tr(prod);

        break;

    case "purchase" in ecom:

        prod = ecom.purchase.products;

        items = prod_tr(prod);

        break;

  }

  return items;

}

Вытаскиваем данные для GA4

Далее объявляем переменные DL — они нужны для того, чтобы вытянуть из datalayer значения, которые нужны нам для GA4:

DL — affiliation
ecommerce.purchase.actionField.affiliation

DL — ecommerce
ecommerce
здесь надо обратить внимание на то, что Версия Уровня данных Версия 1

DL — transaction_id
ecommerce.purchase.actionField.id

DL — value
ecommerce.purchase.actionField.revenue

На этом заполнение переменных закончено! Переходим к настройкам триггеров.

Триггеры GTM

Триггеров не так много как переменных, может показаться сначала. Однако, мы просто часть триггеров упакуем в регулярное выражение, из-за чего, общее кол-во записей будет всего 3

Триггер для UA

GTM EE Event
gtm-ee-event
Условия активации — все специальные события

Триггеры для GA4

E ecom — excl. purchase
gtm-ee-event

Важно правильно указать условия активации триггера

view_item|add_to_cart|remove_from_cart|begin_checkout

E ecom — purchase
gtm-ee-event

purchase

И на этом все! далее делаем Теги.

Теги GTM

Теги — конечная часть этой настройки. Выглядеть все должно примерно так:

По сути, у нас есть 3 тега для расширенной торговли. Enhanced Ecommerce — тег для Google Analytics, и два GA4 ecom — один специальный для всех событий, кроме покупки, и отдельный, для покупки.

Я специально выделил еще 1 тег GA4 — через него, мы настраиваем поток данных для отдельного ресурса GA4. Этот момент надо учесть) (надеюсь тут ничего сложно, информации по этому поводу куча)

Настройка EE для UA

Enhanced Ecommerce
{{GTM EE Event Category}}
{{GTM EE Event Action}}
{{GTM EE Event Non-Interaction}}
В идентификатор отслеживания — делаем свой UA код, который также должен лежать в переменных
В доп.настройках указываем, что используем функцию расширенной торговли и Используем уровень данных
Триггер — очевидно что GTM EE Event!

Настройка EE для GA4

GA4 ecom purchase
{{JS — ga4 ecom events}}
Триггер: E com — purchase

items{{JS — items}}
transaction_id{{DL — transaction_id}}
affiliation{{DL — affiliation}}
revenue{{DL — value}}
tax0
shipping0
currencyRUB
Параметры события

GA4 ecom excl. purchase
{{JS — ga4 ecom events}}
Триггер: E com — excl.purchase

items{{JS — items}}
Параметры события

GTM сделан, ура! что же дальше?

ТЗ для разработчика

ТЗ для разработчика стараемся делать максимально понятно, чтобы сохранить ему нервы. Вот ссылка на него — ТЫК. Чтобы скопировать, надо нажать Файл -> создать копию. Готово!

Само ТЗ адаптируем под наш сайт. Если сложно, лучше делать частями, и сначала просмотр карточки товара, далее покупка, чекаут, и уже добавить/убрать товар в/из корзины.