Привет! Меня зовут Владимир Демидов. Я работаю аналитиком в digital-агентстве Registratura.
Сегодня хочу рассказать о том как с помощью Google Tag Manager (или другого менеджера тегов) можно гибко настроить отправку параметров визитов, посетителей, событий или целей в Яндекс Метрику.
Введение
Коротко о том что такое параметры (на примере посетителей) и зачем их передавать. Параметры позволяют анализировать любые дополнительные данные о пользователях. Вот пример из официальной документации Яндекс Метрики как с помощью метода userParams передать в произвольный момент времени следующую информацию о пользователе:
ym(XXXXXX, 'userParams', { status: "Gold", // Статус посетителя: “Золотой” child: 1, // Количество детей: 1 child_age: 13, // Возраст ребенка: 13 UserID: 12345 // Произвольный идентификатор пользователя });
Т.е. параметры посетителя передаются в Метрику в виде JSON-объекта, который имеет характерную key: value структуру (ключ: значение).
Теперь рассмотрим реальный пример аналитической задачи. Допустим у нас есть интернет-магазин demobook.ru. На странице оформления заказа из корзины пользователь может рассчитать стоимость доставки:
Мы хотим собирать статистику по этой форме: какие регионы, города и почтовые индексы чаще всего используются для доставки. Это можно сделать с помощью параметров, которые будут отправляться в Яндекс Метрику в момент когда посетитель производит расчет стоимости доставки (заполняет форму и нажимает кнопку Обновить).
В простейшем случае тег для отправки этих данных будет выглядеть так:
Сам код:
<script> ym(104040475, 'userParams', { "delieveryRegion": "{{Delivery Region}}", "delieveryCity": "{{Delivery City}}", "Postcode": "{{Postcode}}" }); </script>
Через отладчик видим, что параметры передались:
Вот так это будет выглядеть в Метрике:
Все параметры находятся на одном уровне вложенности и имеют key-значения в отчетах. Но это кажется неудобным с точки зрения модели анализа. Вот так будет намного удобнее, не правда ли?
Таким образом мы получаем:
- Логичную с точки зрения модели анализа структуру вложенности: в каждом регионе может быть несколько городов, в городе может быть несколько почтовых отделений каждое из которых имеет свой почтовый индекс
- Value-значения параметра верхнего уровня применяются в качестве key-значений для параметра уровнем ниже. Общие key-значения вроде delieveryRegion только мешают и засоряют отчет — мы и без них понимаем что есть что.
Давайте рассмотрим как такого добиться.
Шаг 1. Создаем переменные
Для начала достанем значения из каждого поля формы и присвоим их переменным в GTM. Так это выглядит в консоли:
Сейчас поля позволяют внести любые данные, но в реальности это можно ограничить выпадающими списками, чтобы пользователи не отправляли всякую дичь 🙂
Создаем отдельные переменные типа Собственный код javaScript для региона, города и индекса.
Регион:
Код переменной:
function () { var deliveryRegion = document.querySelector('input#calc_shipping_state').value // Достаем значение элемента и присваиваем переменной deliveryRegion return deliveryRegion; // Возвращаем значение переменной }
Аналогично для города и почтового индекса.
Город:
Код переменной:
function () {
var deliveryCity = document.querySelector('input#calc_shipping_city').value
return deliveryCity;
}
Почтовый индекс:
Код переменной:
function() { var postcode = document.querySelector('input#calc_shipping_postcode').value return postcode; }
Здесь мы используем JavaScript для извлечения значений из элементов DOM. Как корректно определять селекторы элементов и извлекать их значения можно подробно почитать у Якова Осипенкова.
- CSS-селекторы в Google Tag Manager. Часть I
- Селекторы в jQuery. Часть II
- Регулярные выражения в CSS-селекторах и GTM
- CSS Selector Tester и его аналоги
- Google Tag Manager и jQuery
Шаг 2. Создаем триггер
Триггером будет служить отправка формы. Форма имеет класс woocommerce-shipping-calculator.
Поэтому типом триггера в нашем случае будет отправка формы, описываемой условием {{Form Classes}} = woocommerce-shipping-calculator:
Шаг 3. Создаем теги для отправки параметров события, визита и посетителя
Создаем 3 отдельных тега типа Пользовательский HTML для событий, визитов и посетителей.
Отправка параметров события:
<script> var deliveryParams = {}; var deliveryRegionKey = {{Delivery Region}}; var deliveryCityKey = {{Delivery City}}; var postcodeKey = {{Postcode}}; // Пошагово определяем структуру JSON "сверху вниз" deliveryParams[deliveryRegionKey] = {}; // Создаем объект региона deliveryParams[deliveryRegionKey][deliveryCityKey] = {}; // Создаем объект города внутри региона deliveryParams[deliveryRegionKey][deliveryCityKey][postcodeKey] = {}; // Создаем объект почтового индекса внутри города var eventParams = { deliveryParams: deliveryParams }; ym(104040475, 'reachGoal', 'shippingCalc', eventParams) // Передаем переменную с вызовом метода reachGoal </script>
Отправка параметров визита:
<script> var deliveryParams = {}; var deliveryRegionKey = {{Delivery Region}}; var deliveryCityKey = {{Delivery City}}; var postcodeKey = {{Postcode}}; // Пошагово определяем структуру JSON "сверху вниз" deliveryParams[deliveryRegionKey] = {}; // Создаем объект региона deliveryParams[deliveryRegionKey][deliveryCityKey] = {}; // Создаем объект города внутри региона deliveryParams[deliveryRegionKey][deliveryCityKey][postcodeKey] = {}; // Создаем объект почтового индекса внутри города var visitParams = { deliveryParams: deliveryParams }; ym(104040475, 'params', visitParams) // Передаем переменную с вызовом метода params </script>
Отправка параметров посетителя:
<script> var deliveryParams = {}; var deliveryRegionKey = {{Delivery Region}}; var deliveryCityKey = {{Delivery City}}; var postcodeKey = {{Postcode}}; // Пошагово определяем структуру JSON "сверху вниз" deliveryParams[deliveryRegionKey] = {}; // Создаем объект региона deliveryParams[deliveryRegionKey][deliveryCityKey] = {}; // Создаем объект города внутри региона deliveryParams[deliveryRegionKey][deliveryCityKey][postcodeKey] = {}; // Создаем объект почтового индекса внутри города var userParams = { deliveryParams: deliveryParams }; ym(104040475, 'userParams', userParams) // Передаем переменную с вызовом метода userParams </script>
Так выглядит отправка параметров события, визита и посетителя в консоли и отладчике при расчете доставки:
А так это отображается в веб-интерфейсе Метрики:
Параметры события:
Параметры визита:
Параметры посетителя:
В параметры целей тоже загружается с такой же структурой:
Таким образом мы получили верхнеуровневую запись deliveryParams, в которой логично и без лишней информации описаны параметры доставки событий, визитов и посетителей.
Спасибо за внимание! Буду рад ответить на вопросы в комментариях. Так же вы можете написать мне в Telegram @in_ads_we_trust















