Jump to content

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


Recommended Posts

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

В метрике она много попроще, чем в 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

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

Link to post
Share on other sites

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

Link to post
Share on other sites

 

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

 

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

Самый логичный способ в базе сделать флаг типа has_new, но я хотел сделать цели с минимумом изменений и в одном файле.

Link to post
Share on other sites
  • 2 months later...

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

Link to post
Share on other sites
  • 2 weeks later...

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

Link to post
Share on other sites
  • 2 months later...
  • 2 years later...

 

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

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

 

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

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

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

 

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

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

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

 

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

Edited by Dmitry86
Link to post
Share on other sites

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

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/support/metrika/reports/add-goals.xml#check-goal

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

Edited by Dmitry86
Link to post
Share on other sites
  • 1 year later...

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

{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'}
 
Link to post
Share on other sites
  • 4 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...