Отслеживание прокрутки виртуальных страниц в GA

Обновление: нужно убедиться, что скрипт не кэширует события, поиск пока не очень успешен.

Я использую приведенный ниже скрипт для отслеживания просмотров виртуальных страниц в GA, у сайта очень длинная домашняя страница, на которой мы это отслеживаем. Проблема, с которой я сталкиваюсь, заключается в том, что, как только пользователь прокручивает вниз до нижнего раздела, он не регистрируется как новый просмотр страницы, если он прокручивает обратно вверх (что делает его максимум 1 просмотром на странице). Любая помощь в этом будет принята с благодарностью. Я использую jQuery, и приведенный ниже скрипт отправляет/отслеживает.

Этот скрипт является дополнением к коду Universal Analytics, реализуемому непосредственно перед тегом. Первый код ниже — это обычный код Analytics, который необходим для правильного запуска отладчика, поскольку именно здесь определяется учетная запись. Второй скрипт - это тот, с которым у меня возникла проблема.

Обычный скрипт UA (находится в тегах head):

<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', 'UA-123456-1', 'auto');
  ga('require', 'displayfeatures');
  ga('send', 'pageview');
</script>

Скрипт для прокрутки просмотров виртуальных страниц:

<script language="javascript"> 

// Predefined variable 
Frequency = 10;    

//Tracking and Sending
_frequency = Frequency; 
_repetition = 100 / Frequency; 
var _scrollMatrix = new Array(); 
for (ix = 0; ix < _repetition; ix++) {
    _scrollMatrix[ix] = [_frequency, 'false'];
    _frequency = Frequency + _frequency; 
} 
$(document).scroll(function (e) {
    for (iz = 0; iz < _scrollMatrix.length; iz++) {
        if (($(window).scrollTop() + $(window).height() >=      $(document).height() 
* _scrollMatrix[iz][0] / 100)  && (_scrollMatrix[iz][1]== 'false')) {
            _scrollMatrix[iz][1] = 'true';
            ga('send', 'pageview', _scrollMatrix[iz][0]+'%' );
        }
    }
 });

</script>

Вот как это сейчас отображается в Analytics


person Ryan    schedule 19.06.2015    source источник
comment
Мне сообщили, что все, что мне нужно сделать, это изменить код, чтобы не кэшировать точки прокрутки или сбрасывать кеш при каждом событии прокрутки. Я буду искать, как это сделать.   -  person Ryan    schedule 23.06.2015
comment
Вам нужно сделать больше, чем это. По крайней мере, вам нужно будет удалить цикл из события прокрутки, потому что вы отправляете значения от 10% до 100% при каждой прокрутке, и вам нужно будет исправить вызов Google Analytics на правильный вызов метода (и отправить фактическое положение пользователя на странице). Я действительно написал свой ответ ниже не для того, чтобы вас раздражать или что-то в этом роде, а для того, чтобы указать на несколько проблем с вашим скриптом.   -  person Eike Pierstorff    schedule 24.06.2015
comment
Я не хочу, чтобы это выглядело так, как будто я игнорирую ваше предложение, я действительно ценю время и усилия, которые вы вложили в это. Но из каждого теста, который я провел с этим, он сообщает в Google Analytics, как и предполагалось, за исключением того, как только пользователь прокручивает до XX% и отправляет этот просмотр страницы, он не отправляет снова, если пользователь возвращается к этому положение прокрутки. Используя формат ga('отправить', 'просмотр страницы', 'путь к странице'); правильно отправляет в GA, так как это то, что они предлагают для базового просмотра виртуальной страницы. Я ни в коем случае не эксперт по кодированию, но они отправляют (один раз), как и предполагалось.   -  person Ryan    schedule 24.06.2015
comment
Я добавил изображение «просмотров страниц», которые я сейчас получаю на сайте. Я переименую их с помощью фильтра, если мы сможем заставить их снова отправляться, когда пользователь прокручивает страницу вверх. (Я показал только первые 10 строк, поэтому 100% не отображается)   -  person Ryan    schedule 24.06.2015
comment
Я только что понял, что не совсем точно объяснил, что этот скрипт является дополнением к обычному скрипту Universal Analytics. Чтобы он работал в отладчике, над ним должен быть нормальный скрипт, объявляющий учетную запись. Я отредактирую вопрос, чтобы показать это в сценарии. Мои извинения за путаницу.   -  person Ryan    schedule 24.06.2015
comment
Да, конечно, вы правы — третий параметр может содержать имя виртуальной страницы. Тем не менее, это не решает другие проблемы, о которых я упоминал ниже.   -  person Eike Pierstorff    schedule 24.06.2015


Ответы (1)


Ваш скрипт создает массив массивов с пороговыми значениями в диапазоне от 10 до 100 в качестве индекса, как определено переменной "раскаяние" (это не означает, что вы думаете, это означает, вы имеете в виду "повторения", если вы действительно не сожалеете о написании этот скрипт). Одно из значений для каждого элемента, если ваш массив массива является логическим «ложным».

Это логическое значение оценивается в цикле внутри функции document.scroll. Если значение «false», выполняется просмотр страницы, а для переменной устанавливается значение «true». Происходит в этом бите:

if (($(window).scrollTop() + $(window).height() >=      $(document).height() 
* _scrollMatrix[iz][0] / 100)  && (_scrollMatrix[iz][1]== 'false')) {
            _scrollMatrix[iz][1] = 'true';

Это означает, что в следующий раз логическое значение для _scrollMatrix[iz][1] будет «истинным», и ветвь if больше не будет выполняться.

Если вы хотите запустить код Google Analytics независимо от того, вы можете удалить логическое значение и часть, в которой оно оценивается. Таким образом, ваш скрипт будет выглядеть так:

<script language="javascript"> 

// Predefined variable 
Frequency = 10;    

//Tracking and Sending
_frequency = Frequency; 
_repentance = 100 / Frequency; 
var _scrollMatrix = new Array(); 
for (ix = 0; ix < _repentance; ix++) {
    _scrollMatrix[ix] = [_frequency];
    _frequency = Frequency + _frequency; 
} 
$(document).scroll(function (e) {
    for (iz = 0; iz < _scrollMatrix.length; iz++) {
        if (($(window).scrollTop() + $(window).height() >=      $(document).height() * _scrollMatrix[iz][0] / 100)  ) {
            ga('send', 'pageview', _scrollMatrix[iz][0]+'%' );
        }
    }
 });

</script>

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

ga("send", "pageview", "10%")
ga("send", "pageview", "20%")
...

Вы не можете просто ввести голый процент в качестве аргумента этой функции и надеяться, что он будет где-то записан (Редактировать ой, это плохо. Конечно, третий параметр работает как виртуальное имя страницы, так что с этим битом все в порядке. если вы хотите процент как имя страницы).

Поскольку ваш скрипт выполняет цикл для каждого события прокрутки, он фактически отправляет десятки вызовов ga, а вычисленные проценты не относятся к фактической позиции прокрутки пользователя (он просто отправляет все значения от 10 до 100% для каждого события прокрутки). Кроме того, зацикливание каждого события прокрутки делает это ужасно дорогим с точки зрения ресурсов браузера. И, конечно же, у вас есть квота хитов в секунду и хитов за сеанс, и ваш скрипт довольно быстро выполнит эти квоты.

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

person Eike Pierstorff    schedule 20.06.2015
comment
Можно ли отправить пользовательское событие, например ga("send", "pageScroll", true)? - person Soundar; 20.06.2015
comment
Нет. Типы обращений предустановлены — pageView, event, usertiming и некоторые другие. В аналитике нет типа попадания события прокрутки. Вы можете отправить событие, для которого требуется несколько параметров (категория и действие, а также, возможно, метка и значение — см. здесь: developers.google.com/analytics/devguides/collection/). - person Eike Pierstorff; 20.06.2015
comment
Я рассмотрю предложенный вами плагин scrollDepth. И проблема повторений — это то, что я не совсем уверен, как я упустил это из виду. Однако отслеживание вызовов в приведенном ниже формате отлично отображается в Google Analytics и позволяет корректировать имена с помощью простых фильтров. (developers.google.com/analytics/devguides /коллекция/обновление/) ga(send, pageview, 10%) Настоящая проблема заключалась в том, что просмотры страниц запускались только один раз и не повторялись, если пользователь прокручивал страницу вверх. - person Ryan; 22.06.2015
comment
Прочитав еще раз ваши комментарии о булевой долине, я думаю, что понимаю, о чем вы говорите (я думаю). Я попытался удалить это и протестировал в режиме реального времени, и это показывает, что проблема в этом. Однако, как вы косвенно упомянули, удаление этого показало, сколько обращений он действительно пытается отправить. (если я прокручиваю один раз вниз до раздела 10%, он отправляет примерно 30 просмотров страниц). Теперь я рассмотрю ограничение количества обращений в секунду (если возможно) и посмотрю, смогу ли я заставить скрипт отправлять максимум X просмотров страниц в секунду. - person Ryan; 24.06.2015