Замедляет ли отслеживание событий Google Analytics по ссылкам взаимодействие с пользователем?

Я рассматриваю возможность присоединения событий onclick к внутренним ссылкам на моем сайте, чтобы отслеживать события Google Analytics. Но меня волнует производительность. Насколько я понимаю, рабочий процесс изменится:

  1. Пользователь нажимает на гиперссылку
  2. Выполняется вызов Google Analytics для отправки данных отслеживания событий.
  3. Браузер ожидает ответа от сервера GA
  4. Браузер переходит по ссылке и открывает новую страницу.

Я обеспокоен задержкой, вызванной шагами 2 и 3. Итак, вопросы:

  1. Правильно ли я понимаю поток?
  2. Какова типичная задержка (в миллисекундах), которую вызывает вызов отслеживания событий GA?

person tinkerr    schedule 14.08.2012    source источник


Ответы (4)


Отслеживание событий работает путем запроса изображения с серверов Google. Проблема заключается в том, что переход по ссылке на новый URL-адрес останавливает любые ожидающие/выполняемые запросы. Если браузер открывает ссылку на новый URL-адрес в том же окне до того, как был сделан запрос на отслеживание, вы можете потерять аналитические данные.

Таким образом, шаг 3 — это не ожидание, а задержка, которую необходимо добавить, чтобы запрос изображения отслеживания мог завершиться (или, по крайней мере, начаться). 100-150 миллисекунд достаточно для запроса, но достаточно мало, чтобы пользователи его не заметили.

Я использую некоторые варианты следующего кода отслеживания событий (код jQuery):

$('.someClassForTracking').click(function(e){
  _gaq.push(['_trackEvent', category, action, ...]);
  if (this.target != '_blank') {
    e.preventDefault();
    var url = this.href;
    setTimeout(function(){location.href = url}, 150);
  }
});
person mike    schedule 14.08.2012
comment
Спасибо, Майк. Google не просит нас делать что-либо подобное, чтобы вручную вводить задержки, чтобы их отслеживание работало. Поэтому я предполагаю, что JS GA делает это автоматически. Может быть, у вас есть документация по этому поводу, где людей просят ввести задержки setTimeout? - person tinkerr; 14.08.2012
comment
Google описывает использование задержки с отслеживанием событий для исходящих ссылок в поддержке. google.com/analytics/bin/ ... - person mike; 14.08.2012
comment
Спасибо. Я только что нашел его и собирался отредактировать свой комментарий :) Я также видел вариант, в котором не используется setTimeout, а используется _gaq.push(function(){document.location = href; });. Мне кажется чище. - person tinkerr; 14.08.2012
comment
Интересно... Я предполагаю, что GA создает элемент img и устанавливает src для некоторого URL-адреса... Так что с версией без setTimeout мне интересно, работает ли она, потому что GA проверяет, загружено ли изображение, или если прохождение кода _gaq.push добавляет достаточно инструкций, чтобы дать img время для загрузки. В этом случае вы можете получить противоречивые результаты отслеживания. - person mike; 14.08.2012
comment
Если то, что вы говорите, верно, и GA создает элемент img и настраивает src для отправки данных, то ему не нужно ждать ответа. Нужно только отправить данные в одну сторону - от клиента к серверу. Он может сразу перейти к следующему элементу в очереди. - person tinkerr; 15.08.2012

Вы можете использовать механизм hitCallback, который задокументирован для analytics.js, но также доступен для ga.js.

Это было решено по другому вопросу: Событие отслеживания в аналитике Google при нажатии отправить форму

person Adam Prescott    schedule 11.04.2013

Вам нужно добавить «hitCallback», который срабатывает после завершения отслеживания в конце GA. Не беспокойтесь о тайм-аутах, так как это событие сработает, если GA потребуется много времени, чтобы вернуться с ответом — короче говоря, он обрабатывает тайм-ауты событий.

<script>
/**
* Function that tracks a click on an outbound link in Google Analytics.
* This function takes a valid URL string as an argument, and uses that URL string
* as the event label.
*/
var trackOutboundLink = function(url) {
   ga('send', 'event', 'outbound', 'click', url, {'hitCallback':
     function () {
     document.location = url;
     }
   });
}
</script>

Вам также потребуется добавить (или изменить) атрибут onclick к вашим ссылкам. Используйте этот пример в качестве модели для ваших собственных ссылок:

<a href="http://www.example.com" onclick=”trackOutboundLink(‘http://www.example.com’); return false;">Check out example.com</a>

Взято отсюда: https://support.google.com/analytics/answer/1136920?hl=en

person KD8581    schedule 27.07.2015

Я реализовал GA раньше, как внутри, так и снаружи, и не заметил заметной разницы в производительности. Кроме того, я считаю, что последний метод отслеживания кликов по ссылкам позволяет выполнять отслеживание асинхронно.

Коллекции — Руководство для разработчиков Google

Добавление отслеживания таким образом позволит пользователю следить за действием ссылки, в то время как отслеживание выполняется асинхронно.

onclick="_gaq.push(['_trackEvent', 'myLink', 'clicked'])"
person robbieAreBest    schedule 14.08.2012
comment
Спасибо, но я думаю, что вы ошибаетесь насчет асинхронного отслеживания. Преимущество асинхронного отслеживания заключается в том, что оно использует массив _gaq для хранения событий в очереди, что означает, что даже если javascript GA еще не загружен и пользователь выполняет действие, которое вы хотите отслеживать, вы все равно можете это сделать. Однако для того, чтобы что-то отследить, необходимо позвонить на серверы GA, и все данные на странице из _gaq должны быть отправлены в Google. Я предполагаю, что JS GA вводит своего рода обработчик document.unload, который задерживает выгрузку документа до тех пор, пока вся информация не будет отправлена ​​в GA. - person tinkerr; 14.08.2012
comment
@tinkerr - мне было бы очень интересно, если бы вы нашли какое-либо подтверждение того, что GA использует какой-то обработчик выгрузки ... кажется логичным способом сделать что-то! - person mike; 14.08.2012