Подтвердить что ты не робот

Как Google Analytics отслеживает события, когда пользователь переходит на другую страницу внутри одного домена

В документации Google говорится, что событие можно отслеживать следующим образом:

<a onclick="_gaq.push(['_trackEvent', 'category', 'action', 'opt_label', opt_value]);">click me</a> 

или более ранняя версия:

<a onclick="pageTracker._trackEvent('category', 'action', 'opt_label', opt_value);">click me</a>

Я смотрел с Firebug на запрос, который создается, когда клик по ссылке, и я вижу там прерванный запрос:

http://www.google-analytics.com/__utm.gif?utmwv=4.7.2&utmn=907737223&....

Это происходит потому, что браузер выгружает все javascript, когда пользователь переходит на новую страницу. Как в этом случае отслеживание событий выполняется?

Edit: Поскольку одна фотография может стоить тысячи слов... alt text

Когда я нажимаю ссылку, firebug показывает мне эту последовательность запросов (здесь показаны первые четыре, после чего следует заполнение содержимого страницы)

4b9b3361

Ответ 1

Проблема в том, что для завершения работы script недостаточно времени до того, как пользователь перейдет на следующую страницу. Что вы можете сделать, так это создать функцию-оболочку для вашего кода GA и в onclick, вызвать функцию-оболочку и после запуска кода GA в вашей функции-обертки установить тайм-аут и обновить location.href с URL-адресом ссылки. Пример:

<a href="somepage.html" onclick="wrapper_function(this,'category', 'action', 'opt_label', 'opt_value');return false;">click me</a>

<script type='text/javascript'>
function wrapper_function(that,category,action,opt_label,opt_value) {
  _gaq.push(['_trackEvent', category, action, opt_label, opt_value]);
  window.setTimeout("window.location.href='" + that.href + "'", 1000);
}
</script>

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

Update: Этот ответ был опубликован несколько лет назад, и с тех пор прошло довольно много, но я иногда получаю обратную связь (и upvotes), поэтому я решил обновить этот ответ с помощью новой информации. Этот ответ по-прежнему возможен, но если вы используете Universal Analytics, то есть функция hitCallback. Функция hitCallback также доступна для их традиционных _gaq (ga.js), но официально не документирована.

Ответ 2

На эту проблему отвечает документация Google:

использование

<script type="text/javascript">
function recordOutboundLink(link, category, action) {
  try {
    var myTracker=_gat._getTrackerByName();
    _gaq.push(['myTracker._trackEvent', ' + category + ', ' + action + ']);
    setTimeout('document.location = "' + link.href + '"', 100)
  }catch(err){}
}
</script>

или

<script type="text/javascript">
function recordOutboundLink(link, category, action) {
  try {
    var pageTracker=_gat._getTracker("UA-XXXXX-X");
    pageTracker._trackEvent(category, action);
    setTimeout('document.location = "' + link.href + '"', 100)
  }catch(err){}
}
</script>

Это более или менее то же, что и ответ Crayon Violet, но имеет более удобное имя метода и является официальным решением, рекомендованным Google.

Ответ 3

Как и выше, это связано с тем, что страница unloaded до возврата вызова Async. Если вы хотите реализовать небольшую задержку для синхронизации gaq, я бы предложил следующее:

Сначала добавьте ссылку и добавьте дополнительный класс или атрибут data:

 <a href="xxx" data-track-exit="true">My Link</a>

Затем добавьте в свой Javascript:

 $("a[data-track-exit]").on('click', function(e) {
   e.preventDefault();
   var thatEl = $(this);
   thatEl.unbind(e.type, arguments.callee);
   _gaq.push( [ "_trackEvent", action, e.type, 'label', 1 ] );
   setTimeout(function() {
     thatEl.trigger(event);
   }, 200);
 });

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

Ответ 4

У меня была такая же проблема. Попробуйте это, он работает для меня. Похоже, что ga не любит числа в качестве значения метки. Итак, преобразуйте его в строку.

trackEvent: function(category, action, opt_label, opt_value){
    if(typeof opt_label === 'undefined') opt_label = '';
    if(typeof opt_value === 'undefined') opt_value = 1; 
    _gaq.push([
        '_trackEvent', 
         String(category), 
         String(action), 
         String(opt_label), 
         opt_value
    ]);
 }