Передача событий из dataLayer в Яндекс.Метрику без GTM

Иван Никитин и партнерыНовостиАналитикаПередача событий из dataLayer в Яндекс.Метрику без GTM

Сейчас на фоне политический событий в мире и в России наблюдается мощный тренд на импортозамещение, отказ от западных сервисов и программных продуктов и переход на отечественные разработки. В частности, отказ от продуктов Google в пользу Яндекс.

Более того, такой переход может быть инициирован и выполнен одномоментно, по указанию руководства свыше, особенно в государственных учреждениях. Буквально на прошлой неделе мы столкнулись с такой ситуацией: на запланированном созвоне на тему «Импортозамещение» представители крупной компании сообщили что три часа назад со всех сайтов компании были полностью убраны все без исключения продукты компании Google, включая Google Аналитику, GTM, шрифты и т. п. И далее Заказчики выразили надежду, что мы сможем очень оперативно перестроить всю аналитику на рельсы Яндекс.Метрики.

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

Хорошо, — подумали мы —  GTM у нас больше нет, но ведь dataLayer никуда не делся, нам нужно просто поймать все передачи в dataLayer и отправить их в Метрику. Но помимо событий в dataLayer могут передаваться и значения переменных, которые нужно где-то сохранять для будущего использования. При этом dataLayer не должен терять своей обычной функциональности, например, если GTM всё же включится…

На помощь нам приходят Proxy-объекты из ES6. Да, мы теперь не ограничены слабой поддержкой ES6 в GTM! Поэтому используем всю мощь ES6. Итак, Proxy. Эти объекты позволяют перехватывать любые обращения к любым другим объектам и выполнять свои действия.

Не вдаваясь в технические подробности, мы реализовали скрипт dataLayer2Ym, который ставит Proxy на dataLayer, ловит любое обращение к методу push(), и в зависимости от того, что в него передано, выполняет следующие действия:

  • Если это было событие, то он передает его в Яндекс.Метрику как reachGoal со всеми параметрами, которые были переданы. Сами параметры сохраняются как переменные dataLayer в специальном глобальном объекте dataLayerVars.
  • Если это была просто установка переменных, то есть, отсутствует параметр event, то в этом случае все переданные параметры сохраняются в глобальном объекте dataLayerVars для дальнейшего использования.

Как пользоваться скриптом передачи событий в Яндекс.Метрику без GTM

  1. Возьмите последнюю версию скрипта dataLayer2Ym из репозитария Github.
  2. Найдите в самом начале скрипта строку const YM_ID = 123456789; и замените в ней код счетчика Яндекс.Метрики на свой.
  3. Разместите ее на всех страницах своего сайта в любом месте кода HTML.

Всё! С этого момента любые события, передаваемые в dataLayer, уходят в Яндекс.Метрику.

Как пользоваться переменными dataLayer

Если в событии передаются любые параметры, например так:

dataLayer.push({
    'event' : 'login', 
    'user_id' : 'U-XXXXXXXX'
});

Или просто устанавливаются переменные, например, так:

dataLayer.push({
    'user_id' : 'U-XXXXXXXX'
});

То все эти параметры (переменные dataLayer) доступны для дальнейшего использования в любое время, например, так:

let userId = dataLayerVars.user_id;

Или так

let userId = dataLayerVars['user_id'];

Отладка скрипта передачи событий в Яндекс.Метрику

Режим отладки скрипта включается автоматически вместе с отладкой Яндекс.Метрики. В режиме отладки все свои действия скрипт выводит в консоль браузера. Чтобы включить режим отладки, просто добавьте в URL своего сайта параметр _ym_debug=1, например

https://example.com/?_ym_debug=1

Вместо заключения

Возможно, мы будем развивать этот скрипт и дальше и сделаем свой вариант GTM в итоге. В любом случае будем благодарны за любые комментарии и предложения.

Добавить комментарий