Перейти к содержимому


Фото
* * * * * 1 голосов

Настройка целей Метрике и Электронной коммерции в GA


  • Чтобы отвечать, сперва войдите на форум
12 ответов в теме

#1 prodigynear

prodigynear
  • Пользователь
  • 25 сообщений

Опубликовано 28.03.2014 - 19:22

Занимаясь рекламой своего магазина рано или поздно каждый придет к аналитике.

В метрике она много попроще, чем в google analytics. В ГА можно показывать суммы транзакций от каждого канала/кампании, а если еще и загружать косты, к примеру, из директа, то можно увидеть четкую картину сколько приносит каждый вложенный в тот или иной канал рубль.

В общем понадобилось связать симплу с ГА и Метрикой так, чтобы заказы не дублировались при обновлении страницы, кричал кричал фрилансерам, так никто и не помог (( Пришлось самому делать.

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

 

1) Чтобы не раскидывать код по кускам шаблона, я создал в папке с темой файл metrics.tpl

2) В файле index.tpl после <body> вписал {include file='metrics.tpl'}, тем самым подключив файл метрик к шаблону.

3) В файле метрик я вписал код

{literal}
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  ga('create', 'КОД СЧЕТЧИКА', 'АДРЕС САЙТА');
  ga('send', 'pageview');
</script>
{/literal}
{literal} 

Тем самым подключив к нему GA (предварительно создав аккаунт в гугл аналитикс)

 

Далее подключил яндекс метрику

{literal} 
<!-- Yandex.Metrika counter -->
<script type="text/javascript">
	(function (d, w, c) {
		(w[c] = w[c] || []).push(function() {
			try {
				w.yaCounterАЙДИСЧЕТЧИКА = new Ya.Metrika({id:АЙДИСЧЕТЧИКА,
						webvisor:true,
						clickmap:true,
						trackLinks:true,
						accurateTrackBounce:true});
			} catch(e) { }
		});
		var n = d.getElementsByTagName("script")[0],
		s = d.createElement("script"),
		f = function () { n.parentNode.insertBefore(s, n); };
		s.type = "text/javascript";
		s.async = true;
		s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js";
			if (w.opera == "[object Opera]") {
				d.addEventListener("DOMContentLoaded", f, false);
			} else { f(); }
		})(document, window, "yandex_metrika_callbacks");
</script>
<noscript>
	<div>
		<img src="//mc.yandex.ru/watch/АЙДИСЧЕТЧИКА"
			style="position: absolute; left: -9999px;" alt="" />
	</div>
</noscript>
<!-- /Yandex.Metrika counter -->
{/literal}

Предварительно создав там аккаунт.

 

 

Теперь настроил события.

<script type="text/javascript">           
{if isset($order)}
	{$t1 = $order->date|truncate:18:"":true}
	{$t2 = date("Y-m-d H:i:s")|truncate:18:"":true}
        {if $t1 == $t2}
        window.onload = function(){
           yaCounterКОДСЧЕТЧИКА.reachGoal('orderComplete');
   	   ga('send', 'event', 'button', 'orderComplete');
           ga('require', 'ecommerce', 'ecommerce.js');
           ga('ecommerce:addTransaction', {
                   'id': '{$order->id}',
                   'affiliation': 'САЙТНАПРИМЕР',
                   'revenue': '{$order->total_price}',
                   'shipping': '{$order->delivery_price}',
           });
           {foreach $purchases as $pur}
                   ga('ecommerce:addItem',{
                   'id': '{$order->id}',
                   'name': '{$pur->product_name|escape}',
                   'sku': '{$pur->variant_id|escape}',
                   'category': 'present',
                   'price': '{($pur->price*$pur->amount)}',
                   'quantity': '{$pur->amount}'
                   });                               
           {/foreach}        
           ga('ecommerce:send');
           ga('ecommerce:clear'); 
	 }
         {/if}
{/if}
 $( document ).ready(function() {
     $('.buttonCart').on('click', function() {
         ga('send', 'event', 'button', 'cartAdd');
         yaCounterАЙДИСЧЕТЧИКА.reachGoal('addCart');
     });
});
</script>

В общем первая часть кода касается заказа, если создан заказ и время создания примерно равно текущему времени (заказ новый), то кидаем маячек нашим аналитикам, с соответствующими параметрами заказа.

Вторая часть кода реагирует на нажатие кнопки в корзину (у всех таких кнопок должен быть доп.класс buttonCart)

Не забудьте при этом добавить цели оформление заказа и добавление в корзину в яндекс.метрике и в ГА, кстати, в ГА еще в настройки ->представление нужно включить электронную торговлю.

 

В общем то все, пользуйтесь на здоровье.

Если есть вопросы можете задать на prodigynear@gmail.com

Удачи в аналитике)



#2 Sid_Vishez

Sid_Vishez
  • Пользователь
  • 71 сообщений
  • Откуда:Екатеринбург

Опубликовано 31.03.2014 - 00:27

Очень оригинальная идея со временем заказа! Но все-таки не 100% надежная, если пользователь сразу после оформления заказа перейдет по ссылке из письма, то в яндекс.метрике данные о источнике заказа будут искажены.



#3 prodigynear

prodigynear
  • Пользователь
  • 25 сообщений

Опубликовано 01.04.2014 - 09:39

 
Очень оригинальная идея со временем заказа! Но все-таки не 100% надежная, если пользователь сразу после оформления заказа перейдет по ссылке из письма, то в яндекс.метрике данные о источнике заказа будут искажены.

 

Согласен, вероятность есть, но ничтожно мала, хотя в проектах с большим кол-вом заказов такое непременно случится, либо если он обновит страницу order в первую минуту после получения заказа, но 1 неправильная метрика из 1000 вряд ли испортит статистику. Да и, такое будет происходить очень редко. В принципе, можно давать не минуту, а, например, 5 секунд.
Самый логичный способ в базе сделать флаг типа has_new, но я хотел сделать цели с минимумом изменений и в одном файле.



#4 Sid_Vishez

Sid_Vishez
  • Пользователь
  • 71 сообщений
  • Откуда:Екатеринбург

Опубликовано 01.04.2014 - 19:52

можно совместить с вот этим предложением добавить ?new в url.



#5 deniszinin

deniszinin
  • Пользователь
  • 9 сообщений
  • Версия CMS:2.x

Опубликовано 20.06.2014 - 14:09

Подскажите пожалуйста, все ли я правильно понял. Я могу взять ваш код (вставить свой код счетчика), создать файл, подключить его к шаблону, и все будет работать? Или  необходимо еще производить какие нибудь манипуляции для настройки ecommerce в метрике?



#6 Middy

Middy
  • Пользователь
  • 20 сообщений
  • Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Харьков

Опубликовано 21.06.2014 - 17:19

Автор, для чего в поле "price", где указывается цена за единицу товара, вы указываете цену за единицу умноженную на количество единиц товара?



#7 Middy

Middy
  • Пользователь
  • 20 сообщений
  • Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Харьков

Опубликовано 21.06.2014 - 17:30

Вопрос без подвохов. У меня вот цена вообще не передаётся. хотя в скрипт вставляется нормлаьно. В аналитике остаётся имя, количество, ИД транзакции, вобщем всё всё, но цена стоит 0. Как за штуку, так и общая.



#8 ATOM57

ATOM57
  • Пользователь
  • 20 сообщений
  • Дизайн, Заказчик
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 05.07.2014 - 22:27

А есть код событий отдельно для аналитикса? А то у меня уже метрика настроена, не хочется дублировать или дербанить этот код.



#9 doctorwhoyouare

doctorwhoyouare
  • Пользователь
  • 18 сообщений

Опубликовано 16.09.2014 - 21:30

Мечтаю, чтобы кто-нибудь настроил мне цели, с учетом того что у меня simpla с аякс-корзиной..

не смог разобраться по этой инструкции



#10 Dmitry86

Dmitry86
  • Пользователь
  • 136 сообщений
  • Пользователь
  • Откуда:Мск

Опубликовано 01.02.2017 - 21:14

можно совместить с вот этим предложением добавить ?new в url.

https://site.ru/order/ce977a127s2a3b8da1fcv971d7618723?new

 

Не уверен, что будет работать, т.к. вообще не соображаю в регулярках, но можно попробовать первичное посещение страницы с оформленным заказом отслеживать вот такой регуляркой в Яндекс.Метрике (то есть настроить цель):

\/order\/[0-9a-z]*\?new

По идее такая регулярка должна фиксировать все урлы, в которых содержится /order/ потом любой набор букв и цифр и затем ?new

 

ну и соответственно после нажатия на кнопку "Оформить заказ" нужно посылать пользователя на страницу вида:

https://site.ru/order/ce977a127s2a3b8da1fcv971d7618723?new

Если я где ошибся в регулярке - исправьте, пожалуйста, знающие люди!

 

И еще вопрос: как сделать, чтобы после нажатия на кнопку "Оформить заказ" - корзина редиректилась на сраницу с заказом с "?new" ... только в базу записывался адрес без "?new"


Изменено: Dmitry86, 01.02.2017 - 21:35


#11 Dmitry86

Dmitry86
  • Пользователь
  • 136 сообщений
  • Пользователь
  • Откуда:Мск

Опубликовано 01.02.2017 - 22:56

Короче, вроде бы решил. В целях в метрике добавил регулярку:

https\:\/\/site\.ru\/order\/[0-9a-z]+\?new

В CartView.php заменил

// Перенаправляем на страницу заказа
header('Location: '.$this->config->root_url.'/order/'.$order->url);

на

// Перенаправляем на страницу заказа
header('Location: '.$this->config->root_url.'/order/'.$order->url.'?new');

Теперь в метрике отслеживается только первое посещение страницы с заказом, которая получается сразу после оформления в корзине.

 

Ругайте, если что-то не так сделал.

 

P.S. Проверял цели как тут сказано: https://yandex.ru/su....xml#check-goal

работает корректно, регулярка схватывает страницу.


Изменено: Dmitry86, 01.02.2017 - 22:59


#12 despro7

despro7
  • Пользователь
  • 5 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x

Опубликовано 10.05.2018 - 20:19

Я пробовал настраивать срабатывание кода отслеживания конверсий с помощью метода, описанного выше, а именно:

{if $order && strpos($smarty.server.HTTP_REFERER,"/cart")}
{$date_now = time()|truncate:8:"":true}
{$date_order = $order->date|date_format:"%s"|truncate:8:"":true}
{if $date_now == $date_order}
<!-- Данные о заказанных товарах для GA -->
<script>
window.dataLayer = window.dataLayer || [];
dataLayer.push({ldelim}

...

</script>
<!-- End Данные о заказанных товарах для GA -->
{/if}

Суть данного метода заключается в том, чтобы js-код срабатывал только при первом посещении страницы "Спасибо за заказ" (site.ru/order/) за счёт определения времени оформления заказа и его сравнение и текущим временем. В процессе отладки казалось бы всё работает правильно и чётко, но почему-то данные о заказах в Яндекс Метрику и Гугл Аналитику поступают через раз.
 

Сейчас, когда я отключил эту проверку, все заказы фиксируются в электронной коммерции, но также появляются и дубли.

 

Вопрос для знающих людей: можно ли передавать некий сигнал (например из CartView.php в шаблон order.tpl) при оформлении заказа и первом посещении этой страницы. Чтобы уже непосредственно в шаблоне order.tpl делать проверку по типу:

 

 

{if $order && $visit_page == 'first'}
 


#13 igorro

igorro
  • Пользователь
  • 9 сообщений
  • SEO, Заказчик
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 08.06.2018 - 20:06

Реализовал проверку на первое посещение страницы "Спасибо за заказ". Подробности в этой теме






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых