Яндекс Метрика позволяет собирать расширенные данные, относящиеся к электронной торговле. С их помощью можно более детально проанализировать поведение пользователей на сайте.
Фиксируются следующие действия:
- просмотр карточки товара
- добавление/удаление товара из корзины
- покупка товара
Интегрировать электронную коммерцию для Метрики на сайт можно с помощью готовых плагинов. Это быстрый, но платный вариант. Цель статьи - показать как можно самостоятельно добавить отслеживание всех действий (кроме удаления товара из корзины).
Более подробно прочитать о работе технологии можно в документации от Яндекса.
Подключение счетчика Яндекс Метрики
Если Метрика на сайте уже подключена, то проверьте чтобы в коде был параметр
1 |
ecommerce:"dataLayer" |
Если его нет, то нужно изменить настройки счетчика и заменить его код на сайте.
Код метрики должен быть подключен на всех страницах сайта. Если шаблон сайте сделан на фреймворке, то почти наверняка код можно добавить в настройках шаблона в админке. Код должен быть добавлен перед закрывающим тегом body.
Просмотр карточки товара
Для фиксации просмотра товара в шаблон /components/com_virtuemart/views/productdetails/tmpl/default.php в самый конец нужно добавить следующий код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<script> window.dataLayer = window.dataLayer || []; </script> <script> dataLayer.push({ 'ecommerce' : { 'detail' : { 'products' : [ { 'name' : '<?php echo $this->product->product_name; ?>', 'id' : <?php echo $this->product->virtuemart_product_id; ?>, 'price' : <?php echo $this->product->prices['salesPrice']; ?>, 'brand' : '<?php echo $this->product->mf_name; ?>', 'category' : '<?php echo $this->product->category_name; ?>' } ] } } }); </script> |
Здесь и далее будут указаны стандартные пути до шаблонов. На вашем сайте данные шаблоны могут быть переопределены в папке /templates/имя_шаблона/html/com_virtuemart/. Если файл переопределен, то правки нужно вносить именно в переопределенный файл.
Чтобы правки сохранились после обновления virtuemart, все отредактированные шаблоны нужно переопределить в папке /templates/имя_шаблона/html/com_virtuemart/.
Добавление товара в корзину
Метод ниже подойдет, если при добавлении в корзину показывается всплывающее окно с информацией о товаре.
В конец файла /components/com_virtuemart/views/cart/tmpl/padded.php добавьте
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<script> window.dataLayer = window.dataLayer || []; </script> <script> dataLayer.push({ 'ecommerce': { 'add': { 'products': [ { 'id': <?php echo $this->products[0]->virtuemart_product_id ?>, 'name': '<?php echo $this->products[0]->product_name; ?>', 'price': <?php echo round($this->products[0]->prices['product_price']); ?>, 'brand': '<?php echo $this->products[0]->mf_name; ?>', 'category': '<?php echo $this->products[0]->category_name; ?>', 'quantity': <?php echo $this->products[0]->quantity; ?> } ] } } }); </script> |
Покупка товара
Для отслеживания покупки в шаблон /components/com_virtuemart/views/cart/tmpl/orderdone.php с благодарностью о заказе нужно добавить код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?php $orderItems = $this->cart->orderDetails['items']; $orderNumber = $this->cart->orderDetails['details']['BT']->order_number; ?> <script type="text/javascript"> window.dataLayer = window.dataLayer || []; </script> <script type="text/javascript"> dataLayer.push({ 'ecommerce': { 'purchase': { 'actionField': { 'id' : '<?php echo $orderNumber; ?>' }, 'products': [ <?php $count = count($orderItems); foreach($orderItems as $k => $orderItem) { ?> { 'id': '<?php echo $orderItem->virtuemart_product_id; ?>', 'name': '<?php echo $orderItem->order_item_name; ?>', 'price': <?php echo round($orderItem->product_final_price); ?>, 'brand': '<?php echo $orderItem->mf_name; ?>', 'category': '<?php echo $orderItem->category_name; ?>', 'quantity': <?php echo $orderItem->product_quantity; ?> }<?php if($count - $k > 1) echo ','; ?> <?php } ?> ] } } }); </script> |
Просмотр отчета в Метрике
Данные в Метрике появляются не сразу, а в течение 3-5 минут. Просмотреть всю статистику можно в списке всех отчетов.
Сам отчет выглядит следующим образом
Если по прошествии 5 минут данные в Метрике не появились или возникли какие-то другие вопросы, то пишите в комментах, постараюсь со всем помочь.
JediG
Круто! Надо будет попробовать. Думал об этом, но показалось слишком сложным.
JediG
Вроде все сделал по согласно описанному выше. Через какое-то время заработало. Товар в Корзину кладут, а вот Заказов в отчетах так и нет. Вероятно, что-то не так с
/components/com_virtuemart/views/cart/tmpl/orderdone.php
Но что не так не пойму. Скрипт добавил вот сюда:
.../mi55.ru/docs/templates/t3_bs3_blank/html/com_virtuemart/views/cart/tmpl/orderdone.php
Может это не тот orderdone.php?
JediG
будто выше обрезало путь
шаблон mobillife
admin
На странице после покупки не формируется нужный код, поэтому данные не передаются.
Пришлите архив с отредактированным файлом orderdone.php и попробуйте дополнительно добавить код в файл /components/com_virtuemart/views/cart/tmpl/order_done.php.
JediG
Архив отправил. Рекомендованное дополнение эффекта не дало.
admin
На admin@virtuemart.su ничего не пришло. Пожалуйста, продублируйте.
JediG
После того как мы с вами заставил работать коммерцию у меня из Метрики пропала цель "Заказ". Я ее как-то привязывал к кнопке "Подтвердить заказ" в Корзине. Только вот заметил сейчас.
JediG
В общем в файле /components/com_virtuemart/views/cart/tmpl/order_done.php
ранее у меня был вот такой скрипт:
Он четко прописывал цель в метрике. Я попробовал его вернуть на место. Цель не пишется и коммерция похоже с ним тоже дуркует. Хотя может не в этом дело. Надо бы понаблюдать. Может мои похождения Метрика исключает из отчета.
admin
Точно не скажу в чем проблема, нужно потестировать на реальных заказах.
yrygvay
В ваших шаблонах уже интегрированно?
yrygvay
разобобрался, нет, добавил в шаблон. Спасибо большое Владимир.
admin
В шаблонах этого нет, нужно добавлять.
Владимир
Здравствуйте, сделал все как написано, поменял счетчик на сайте, подождал более 15 минут, но отчет так и не появился
admin
Здравствуйте!
Проблема еще актуальна?
Владимир
Больше часа прошло и все стало хорошо, уже пользуюсь, но не работает влкадка заказы
admin
В конце страницы с заказами показывается таблица с количеством покупок?
В отчете с популярными товарами показывается количество купленных?
sportmag52-shop
Здравствуйте, проблема осталась, раньше не так нужно было но теперь это важно,
Когда открываешь вкладку Заказы то там показывается диаграмма с визитами а ниже источник трафика откуда переходы.
В отчете с популярными товарами показывается товары количество просмотров добавлений в корзину и тд. вроде норм, только заказы не встали, зашел проверить код перекопировал его заново и получилось так
https://prnt.sc/qm8y39
admin
Попробуйте найти в исходном коде страницы благодарности за заказ данный код, в него правильно передаются все переменные?
sportmag52-shop
Я удалил первую строку <?php
но все равно не показывает(,
admin
В исходном коде страницы скрипт отрабатывает?
Оформите заказ и посмотрите исходный код, там должен быть скрипт.
sportmag52-shop
оформил заказ, открыл код в поиск ввел, но показывает https://prnt.sc/qocpsj
или я не то смотрю?
admin
Лучше просмотреть не весь исходный код на новой вкладке, а прямо на странице с помощью клавиши F12.
На картинке увидел ссылку на googletagmanager, Вы его используете или решение от яндекса?
sportmag52-shop
функция в шаблоне была включена и не настроена, сейчас выключил, использую яндекс
admin
Код появился?
Если нет, то протестируйте правильный ли шаблон редактируется.
sportmag52-shop
Здравствуйте, у меня установлен
VP One Page Checkout, зашел добавил код о покупке товара туда
вот консоль
https://prnt.sc/r8byev
"[{"0":"js","1":"2020-02-27T07:36:12.913Z"},{"0":"config","1":"UA-43170852-1"},{"ecommerce":{"purchase":{"actionField":{"id":"022700194"},"products":[{"id":"257945","name":"Шапочка фэши 3628 женская","price":510,"brand":"","category":"Шапочка для плавания","quantity":1}]}}},{"event":"gtm.dom","gtm.uniqueEventId":2},{"event":"gtm.load","gtm.uniqueEventId":3}]"
admin
Сама ошибка не должна мешать.
Внутри объекта dataLayer данные о покупки присутствуют (в свойстве purchase).
Возможно, мешает ошибка в scrollReveal.js
Если на сайте включено сжатие скриптов, то отключите, чтобы понять в каком файле проблема.
sportmag52-shop
выключил оптимизатор
https://prnt.sc/r8l4uo
yrygvay
попробуйте через браузере где не режется реклама, я сам ждал пол дня когда пробовал откывать с блокировщиками и небыло данных в метрике.
Алексей
Возможна ситуация, когда заказ будет сделан, но страница благодарности не выведена. Например, оплата через Робокассу (или аналогичные сервисы): заказ отправили, перешли в Робокассу, оплатили, но к нам не вернулись.
Как думаете, как в таких случаях отследить отправить в Метрику сигнал о заказе?
Клик по кнопке отправить заказ - пожалуй, не лучший вариант, т.к. могу кликать с невалидными введёнными данными.
admin
Если нужно сделать быстро, то можно использовать готовый плагин, который отслеживает все события.
Я плагином не пользовался, но думаю, что он отслеживает стандартные события virtuemart, полный список можно посмотреть здесь.
Алексей
Спасибо за наводку! Обязательно рассмотрю.
KeshaK
Подскажите, плиз, правильно ли добавил в карточку товара скрипт в самый конец /.../public_html/templates/..../html/com_virtuemart/productdetails
Вставил после последнего div, првильно?
KeshaK
Извиняюсь, обрезало перед window.dataLayer два закрывающих div-a
admin
В комментариях html код не всегда корректно обрабатывается.
Если к отчетах информация о товарах появилась, значит код вставлен правильно.
Также можно протестировать код на ошибки, открыв консоль браузера и выполнив команду
После этого должен быть показ объект в формате json с товарами.
KeshaK
Добавил для отслеживания покупок товара код по инструкции выше в
.../public_html/templates/..../html/com_virtuemart/cart/order_done.php
После Подтверждения заказа на странице с Благодарностью за покупку вылетает ошибка
syntax error, unexpected '<', expecting end of file
order_done.php выглядит так
Где тут ошибка? Подскажите, плиз.
KeshaK
Извиняюсь, перед window.dataLayer = window.dataLayer
обрезало код.
Код в точности как по Вашей инструкции.
admin
При вставке кода в orderdone попробуйте удалить первый открывающий тег
если не поможет, то пришлите отредактированный файл, который вызывает ошибку.
KeshaK
Покупки, в Отчетах электронной коммерции естественно не отслеживаются из-за этой ошибки. Остальное работает.
Владимир
Здравствуйте, пользуюсь отчетами с начала этой статьи но уже неделю, перестало корректно работать коммерция, пример 200 заходов 0 просмотров товаров.
Как можно выявить и исправить ошибку
admin
Здравствуйте!
Т.е. раньше работало, а теперь перестало?
Для начала нужно проверить отрабатывает ли правильно скрипт. Для этого на каждой странице (в карточке, во всплывающем окне и на странице подтверждения заказа) в консоли браузера выполните команду
Должно быть показано содержимое dataLayer

Если выводится ошибка, то нужно разбираться с кодом на сайте.
Если ошибок нет, то попробуйте обратиться в поддержку Метрики.
Tobi
Здравствуйте, планируется такая статья для Google?
admin
Здравствуйте!
Для google статьи не планировал.
Насколько я знаю, там код практически идентичен, возможно даже подойдет и код от яндекса.
JediG
А не заморачивались ли Вы передачей UserID в Метрику? Это вроде как вопрос не про коммерцию, а про счетчик в целом. В поисковой выдаче всплывает эта тема поэтому сюда и задам вопрос. Нужно каким-то образом после авторизации Посетителя сайта передать данные об ID пользователя Метрике. Что хотят они они пишут, а вот что может Joomla?
Я так понимаю нужно вместо 12345 вызвать ID пользователя.
Вопроса два:
Как?
И если понятно как, то куда внедрить данный код?
admin
Точно не знаю, но думаю, что добавлять код
нужно в скрипт подключения метрики после ее инициализации
В качестве id можно использовать id пользователя joomla.
Если я все правильно понял, вызывать код нужно только если пользователь зарегистрирован.
Попробуйте использовать код
Добавить его нужно в самый конец страницы, например, в файл footer.php шаблона (в Вашем случае в файл /templates/t3_bs3_blank/local/tpls/blocks/mob-footer.php).
JediG
Спасибо большое!
У Метрики есть два варианта: во время инициализации и после инициализации. Я написал вариант после инициализации.
По логике, именно он нам нужен, так как инициализация Метрики проходит до того как пользователь авторизовался на сайте. Вроде Ваш вариант то что надо.
Попробую реализовать. Странно, но об этом вообще не нашел ни одной темы. А тема то интересная. Как я понимаю, если мы сможем отправлять UserID, то мы сможем собрать в кучу все визиты пользователя с разных устройств.
admin
Если не трудно, то поделитесь результатами внедрения, интересно, что из этого получится.
JediG
Добавил код. Но в Метрике ничего для анализа UserID я не вижу. В Помощи есть о том как добавить передачу UserID, но ничего о том как анализировать загруженные данные и о том где их увидеть. Я предполагал что принцип анализа такой же как и с ClientID, но там где предполагал увидеть данные ничего не появилось. Написал в поддержку.
admin
Возможно, пока слишком мало данных, поэтому ничего не показывается.
JediG
Получил ответ:
"На данный UserID только записываются в базу и привязываются к посетителям. В будущем мы планируем отображение UserID в интерфейсе.
В данный момент, чтобы видеть UserID в интерфейсе, рекомендуем передавать их дополнительно как параметры посетителей: https://yandex.ru/support/metrica/data/user-params.html"
Вероятно а забежал вперед лошади, либо надо эту тему дальше развивать. Создавать параметры. Например кроме UserID выгружать как параметр логин, группу пользователей, может еще что-то. Группировка по параметрам доступна. Попробую загрузить параметры пользователей в табличном виде через csv. Такая возможность предусмотрена.
admin
Ясно, спасибо, что поделились.
JediG
Владимир, есть продолжение истории. Взял я из базы логины и группы и загрузил в Метрику с помощью их формы загрузки данных о посетителях. Выгрузил вечером, а сегодня данные обработаны. И о чудо, есть контакт. Выгрузил несколько тысяч ID с параметром логин и группа. Сегодня увидел, что десяток зарегистрированных пользователей включая меня, посетили сайт. Так что все работает. Теперь при желании можно по логину посмотреть действия пользователя на сайте. Или например посмотреть что делают пользователи определенной группы. Но главное это возможность создания сегментов для ретаргетинга по группе покупателей. По хорошему надо бы в код кроме выгрузки userid добавить выгрузку логина и группы, т.к. выгружать в ручную несколько геморно. Новые пользователи каждый день появляются.
JediG
Удалось привязать лишь 13 пользователей. Ответ Яндекс я до конца не понял. Есть ощущение что Поддержка пока сама не понимает до конца как это работает. Похоже параметры лучше выгружать при каждом посещение, т.к. данные загруженные заранее выходят из периода конверсии.
Для загрузки параметров у них есть другой код:
Я сделал вот так:
admin
Спасибо, что поделились.
JediG
Поделиться то поделился, но пока не понятно чем 🙂
Результат какой-то невнятный.
Код с ошибкой дал. Вот правильный:
Но пока я не могу утверждать что это работает. Ну и по группам я не то выдаю. Я пытаюсь передать группу Joomla, а надо группу VM. Пока не могу разобраться как это сделать. Для создания сегментов в Метрике нужно группы ВМ, а от групп Джумла толку никакого.
JediG
Продолжаю общение с поддержкой Яндекс. Они признали что у меня с кодом все хорошо, но передача параметров не идет. С их стороны тоже нет проблем. Рекомендовали попробовать передачу параметров при инициализации счетчика. Может быть это неплохая идея, но моих познаний для ее реализации недостаточно.
Это то к чему я пришел и то что выдает параметры:
Они предлагаю как-то внедрить это в код их счетчика.
https://yandex.ru/support/metrica/data/user-params_data.html
Я если честно в принципе не понимаю возможно ли это.
admin
Точно не могу сказать в чем проблема, поскольку не настраивал это раньше.
JediG
Кстати, когда который я вставляю в ваши комментарии с помощью тегов php и /php обрезается. Так что то что я ранее писал все на самом деле не так.
Макс
Добрый вечер, подскажите пожалуйста, не приходит в метрику покупка, вставил код в orderdone.php, на стр. благодарности не подтягивает инфу, в f12 смотрю все параметры пустые, такое ощущение что не тянет данные с заказа.
admin
Здравствуйте!
Попробуйте внести правки в orderdone.php в папке с шаблоном /templates/имя_шаблона/html/com_virtuemart/.
Макс
Я в шаблоне и вносил правки, дело в том, что скрипт отрабатывает, в f12 на стр. благодарности он присутствует, но с пустыми значениями.
admin
Попробуйте вывести содержимое переменной
$this->cart->orderDetails['items']
на странице благодарности.Если там нет данных о заказанных товарах, то в dataLayer ничего передаваться не будет
Макс
Вот так у меня в orderdone.php
admin
Часть кода не отобразилась в комментарии.
Пожалуйста, создайте тему на форумефоруме и выложите код там.
Виктория
Подскажите, пожалуйста, как установить цель метрики на кнопку "Подтвердить заказ" в корзине VM3? Нигде не найду ответ. Заранее спасибо за ответ.
admin
Можно поставить цель на посещение страницы благодарности за заказ.
andpuxa
А как отследить эту страницу, если она сразу редиректится на шлюз оплаты?
admin
Как вариант, можно открывать страницу с оплатой в новом окне, а не в текущем.
Как технически это реализовать лучше уточнить у разработчика плагина.
Thanos
Hello, very usefull article,
I want to ask you, what code I will use in 'actionField' if I want to track, payment method and revenue
thank you very much
Tobi
Здравствуйте, Владимир.
Спасибо за статью!
При добавление кода:
cart->orderDetails['items'];
$orderNumber = $this->cart->orderDetails['details']['BT']->order_number;
?>
В консоле выбивает ошибку Uncaught SyntaxError: Invalid or unexpected token
Можно так и оставить?
Спасибо!
admin
Здравствуйте!
Если все работает, то думаю, что эта ошибка ни на что не должна повлиять.
Tobi
Корректный код:
cart->orderDetails['items'];
$orderNumber = $this->cart->orderDetails['details']['BT']->order_number;
?>
Tobi
Подскажите, пожалуйста, чтобы отслеживать брошенные корзины и сделать ремаркетинг на эту аудиторию. Куда нужно вставлять код при условии, что используется корзина onepage_generic? Возможно Вы еще подскажете как настроить удаление товара из корзины? Спасибо!
admin
С ходу не готов ответить на этот вопрос, пожалуйста, обратитесь на фриланс.