Подключаем Ecommerce в Яндекс.Метрике
Всем привет. На форуме куча полезной информации по разработке магазинов. Я же в свою очередь хочу рассказать про настройку аналитики.
Итак мы будем передавать информацию из магазина miniShop в Яндекс.Метрику для того, чтобы в полном объёме пользоваться отчётами Электронной коммерции .
Сразу скажу, что информация ниже рассчитана на новичков. Я не владею программированием и не нашел пошагового решения в интернете, поэтому потратил немало времени. Надеюсь этот пост пригодится другим юзерам.
Итак мы будем передавать в метрику 3 события:
Передав данные об этом событии, мы сможем строить отчёты по просмотрам товаров, а также применять к ним любые группировки, доступные в Метрики. Легче понять, что больше интересует тех, кто пришел из соц. сетей, а что тех, кто из поиска, например.
Для начала нам нужно на каждую страницу товара (в шаблон карточки товара) добавить код:
Добавление товара в корзину
Здесь всё тоже самое, только используем немного другую конструкцию из документации Яндекса и вешаем её на колбэк успешного добавления товара в корзину:
Покупка
Это, пожалуй, наиболее сложная для новичка часть. Скрипт работает на странице оформления заказа. Проходит по всем товарам в заказе, собирает значения и после успешного оформления заказа отправляет их в dataLayer.
Здесь многое зависит от того как свёрстана ваша корзина. У меня все классы и id стандартные, я их не менял, так что будьте внимательны. Итак, следующий код надо разместить на странице Корзины:
P.S.
Итак мы будем передавать информацию из магазина miniShop в Яндекс.Метрику для того, чтобы в полном объёме пользоваться отчётами Электронной коммерции .
Сразу скажу, что информация ниже рассчитана на новичков. Я не владею программированием и не нашел пошагового решения в интернете, поэтому потратил немало времени. Надеюсь этот пост пригодится другим юзерам.
Итак мы будем передавать в метрику 3 события:
- Просмотр полного описания товара
- Добавление товара в корзину
- Покупка
Передав данные об этом событии, мы сможем строить отчёты по просмотрам товаров, а также применять к ним любые группировки, доступные в Метрики. Легче понять, что больше интересует тех, кто пришел из соц. сетей, а что тех, кто из поиска, например.
Для начала нам нужно на каждую страницу товара (в шаблон карточки товара) добавить код:
var productData = {
"price" : "[[+price]]",
"name" : "[[*pagetitle]]"
}
window.dataLayer = window.dataLayer || [];
// просмотр товара
dataLayer.push({
"ecommerce": {
"detail": {
"products": [
{
"name" : productData.name,
"price": productData.price.replace(/\s+/g, '')
}
]
}
}
});
Суть в том, что мы создаем объект productData, в него передаём значения названия товара и цены и потом эти значения передаём в специальный контейнер window.dataLayer. Тут всё согласно документации Яндекса."price": productData.price.replace(/\s+/g, '')
Этот метод удаляет пробелы из цены 1 500 приводит к виду 1500.Добавление товара в корзину
Здесь всё тоже самое, только используем немного другую конструкцию из документации Яндекса и вешаем её на колбэк успешного добавления товара в корзину:
// добавление товара в Корзину
miniShop2.Callbacks.Cart.add.response.success = function() {
dataLayer.push({
"ecommerce": {
"add": {
"products": [
{
"name": productData.name,
"price": productData.price.replace(/\s+/g, '')
}
]
}
}
});
}
Покупка
Это, пожалуй, наиболее сложная для новичка часть. Скрипт работает на странице оформления заказа. Проходит по всем товарам в заказе, собирает значения и после успешного оформления заказа отправляет их в dataLayer.
Здесь многое зависит от того как свёрстана ваша корзина. У меня все классы и id стандартные, я их не менял, так что будьте внимательны. Итак, следующий код надо разместить на странице Корзины:
window.dataLayer = window.dataLayer || [];
miniShop2.Callbacks.Order.submit.response.success = function () {
var productData = [];
$('.Cart__item').each(function() {
var item = $(this);
productData.push({
name: item.find('.title a').text(), // находим все названия товаров в корзине
price: item.find('.price').text().replace(/\s+/g, '').replace('руб.', ''), // приводим 1 500 руб. к виду 1500
quantity: item.find('input[name="count"]').val() // передаем количество каждого товара
});
})
var orderId = Math.floor(Math.random() * (1000000 - 1) + 1); // генерируем случайное значение
dataLayer.push({
"ecommerce": {
"purchase": {
"actionField": {
"id" : orderId,
"goal_id" : "XXXXXX", // здесь надо указать id цели Заказ.
},
"products": productData
}
}
});
yaCounterXXXXXXX.reachGoal('SUCORD'); // код вашего счётчика и идентификатор цели - успешный заказ.
}
После всех этих действий в метрике появится вся информация о заказах, корзинах и товарах. Вот такая красота P.S.
var orderId = Math.floor(Math.random() * (1000000 - 1) + 1); // генерируем случайное значение
Вот здесь не очень хорошо, потому что мы генерируем случайный номер заказа, а было бы круто, если бы он совпадал с тем, который генерирует miniShop. Но с этим я уже разбираться не стал( Комментарии: 18
Очень полезно, спасибо!
Форум многое мне дал. Пришло время отплатить, ну по мере возможностей и знаний :)
Большое спасибо!
Сделал по вашей статье просмотр товара и добавление в корзину, в метрике пустно.
Дайте ссылку на какой-нибудь товар
Есть возможность отправить лс?
mekirile@gmail.com
Вроде всё уже упростилось, просто события на кнопки вешаются, типа такого
<button type="submit" class="btn" name="ms2_action" value="cart/add" onclick="yaCounterXXXXX.reachGoal('VKORZINU'); return true;">В корзину</button>
Для целей подойдёт
Мой пост немного не об этом :)
Для тех, кто любит, чтобы совсем красиво было — правильный id заказа можно получить так:
miniShop2.Callbacks.Order.submit.response.success = function (response) {
...
var orderId = response.data.msorder;
...
}
Не забудьте дописать response в первой строке.
Спасибо за решение! Помогло, но частично.
Есть одна проблема: складывается ощущение, что передает не все данные. Например из 3-ех заказов до Метрики добрался только 1.
Грешу на то, что вынужден подключать скрипты между /body и /html, так как если я ставлю их ДО /body то callback на Minishop2 не срабатывает, ибо его подключение получается ниже и он его не видит.
Да, есть вот такой коммент от Василия, но не очень понимаю что нужно с этим всем делать...? Пробовал вызывать из разных мест — эффект нулевой.
Кто может подсказать? Заранее спасибо.
Есть одна проблема: складывается ощущение, что передает не все данные. Например из 3-ех заказов до Метрики добрался только 1.
Грешу на то, что вынужден подключать скрипты между /body и /html, так как если я ставлю их ДО /body то callback на Minishop2 не срабатывает, ибо его подключение получается ниже и он его не видит.
Да, есть вот такой коммент от Василия, но не очень понимаю что нужно с этим всем делать...? Пробовал вызывать из разных мест — эффект нулевой.
Кто может подсказать? Заранее спасибо.
Всем добрый день!
У меня возникает следующая ошибка «Uncaught ReferenceError: miniShop2 is not defined» на данной строчке
miniShop2.Callbacks.Order.submit.response.success = function (response) {
Не подскажите как исправить?
У меня возникает следующая ошибка «Uncaught ReferenceError: miniShop2 is not defined» на данной строчке
miniShop2.Callbacks.Order.submit.response.success = function (response) {
Не подскажите как исправить?
У вас minishop видимо подключается после того, как вызывается колбек. Попробуйте подключение скрипта перенести в head.
А лучше использовать компонент готовый – modstore.pro/packages/integration/msyaecommerce там все будет работать из коробки.
А лучше использовать компонент готовый – modstore.pro/packages/integration/msyaecommerce там все будет работать из коробки.
А лучше использовать компонент готовый – modstore.pro/packages/integration/msyaecommerce там все будет работать из коробки.Мы используем этот компонент, но к сожалению, он не обновляется и там старый код Метрики, без вебвизора и автоматических целей.
Добрый день! Под
… и вешаем её на колбэк успешного добавления товара в корзинукак я понял вы имеете в виду, что этот код (ниже) нужно добавить в чанк tpl.msGetOrder, который входит в состав Корзины?
// добавление товара в Корзину
miniShop2.Callbacks.Cart.add.response.success = function() {
dataLayer.push({
"ecommerce": {
"add": {
"products": [
{
"name": productData.name,
"price": productData.price.replace(/\s+/g, '')
}
]
}
}
});
}
Без разницы где вы разместите этот код. Конечно желательно после того как miniShop иницилизируется и вы сможете присвоить коллбек
Спасибо за ответ! Тоже пытаюсь разобраться)), но если честно пока вообще не понимаю что значит «присвоить колбэк».
Пока из вашей схемя я уяснил следующее:
1. Часть кода №1 (Просмотр полного описания товара ) — вешаем на шаблон карточки товара. Здесь вроде все ясно.))
2. Часть кода №2, про которую я и спрашивал (Добавление товара в корзину) — нужно вешать на некий колбэк.))
и
3. Часть кода №3 (Покупка), нужно вешать на шаблон страницы Корзины, понятно с возможными нюансами в случае изменения стилей.
Пока из вашей схемя я уяснил следующее:
1. Часть кода №1 (Просмотр полного описания товара ) — вешаем на шаблон карточки товара. Здесь вроде все ясно.))
2. Часть кода №2, про которую я и спрашивал (Добавление товара в корзину) — нужно вешать на некий колбэк.))
и
3. Часть кода №3 (Покупка), нужно вешать на шаблон страницы Корзины, понятно с возможными нюансами в случае изменения стилей.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.