Как незаметно поломать систему аналитики для сайта на базе SPA
На тему настройки системы аналитики для SPA-сайтов уже написано много хороших статей, ссылки на самые полезные из них я добавлю в конце этой статьи. Здесь я хочу рассказать об одной особенности настройки отслеживания, которая может незаметно поломать систему вашей отчетности для таких сайтов.
Для начала в двух словах хочу рассказать, что такое SPA и чем такие сайты отличаются от обычных. Single Page Application (SPA) — это веб-сайты, контент на которых подгружается динамически, обычно посредством AJAX. Пример SPA-сайта: https://flatfy.kz/. На этом сайте страница загружается только один раз, все остальные страницы прорисовуются без фактической перезагрузки в браузере, как на обычных сайтах. Чтобы определить использует ли ваш сайт SPA можно зайти на сайт и перейти на какую-то страницу. Если при загрузке второй страницы поменялся URL, но браузер не обновил страницу (кнопка обновления страницы в браузере не поменяла режим) — значит у вас SPA.
Главными особенностями таких сайтов с точки зрения аналитики являются:
- На SPA сайтах параметр HTTP Referrer хранится до полной перезагрузки страницы в браузере.
- Следовательно, события DOM Ready и Window Loaded появляются только, когда страница фактически загружается в браузере. Если настроить какие-то теги на эти события (и от них производные), то есть риск потерять значительную часть данных.
Почему важно учитывать эти особенности во время настройки Google Analytics для такого сайта? Давайте рассмотрим реальный пример отчета по основным путям конверсии в Google Analytics. На первый взгляд в нем нет ничего необычного, но если присмотреться можно заметить странную закономерность: после платного источника трафика загадочным образом идет реферальный источник. На первый взгляд это выглядит так, что ссылки в рекламе местами забыли разметить UTM-метками.
На самом же деле проблема здесь в другом. В этом примере разрывается сессия по причине переопределения параметра «location» (&dl) при отправке информации о просмотре страницы в SPA. Если внимательно прочитать официальную справку Google Analytics по настройке отслеживания SPA — там об этом написано.
Для того, чтобы понять почему так происходит, необходимо знать особенности определения сеанса в Google Analytics. Давайте разберем пример:
- Пользователь попадает на SPA-сайт по ссылке:
https://test.com/?utm_source=facebook&utm_medium=cpc - GA отправляет первый хит с такими полями и значениями:
- dl=https://test.com/?utm_source=facebook&utm_medium=cpc
- dr=https://www.facebook.com/ - Пользователь переходит на вторую страницу сайта и если в этом случае переопределяется location, то в GA уходят такие поля:
- dl=https://test.com/page-2/
- dr=https://www.facebook.com/
Как эти данные будут отображаться в GA? Первый хит спровоцировал создание сеанса с параметрами source/medium = facebook/cpc, потому что UTM-метки имеют выше приоритет, чем Referrer. А второй хит обрывает текущий сеанс (что делает его отказом) и создает новый с параметрами facebook.com/referral. Поскольку здесь UTM-меток нет — GA считывает Referrer и понимает что в таком случае сеанс уже имеет другие параметры источников трафика. Для GA такой (второй) переход выглядит, как обычный переход из соц. сети, где не указаны UTM-метки.
Труднее всего заметить такую проблему используя только платную рекламу в Google, поскольку в этом случае цепочки не выглядят слишком странно: после google/cpc идет google/organic — здесь трудно заметить аномальную ситуацию.
Как диагностировать проблему на SPA-сайте?
Во-первых, проверьте какие dl и dr отправляются в случае, описанном выше. В этом поможет расширение Google Analytics Debugger.
Во-вторых, такая проблема синтетически увеличивает количество сеансов. Если после запуска SPA у вас увеличилось количество сеансов при таком же количестве пользователей — вероятно, у вас есть такая проблема.
В-третьих, показатель отказов по платной рекламе увеличился.
Как решается проблема?
Чтобы решить такую проблему, достаточно вместо location переопределять page. Этого достаточно :) В принципе, в справке об этом и написано. Но ведь кто читает эту справку, правда? :) Обратите внимание, Google просит не изменят ни location, ни referrer. Думаю, теперь понятно, что эти параметры играют важную роль при определении источников трафика.
Выводы:
1) если переопределять location или referrer, вместо page — можно поломать систему аналитики.2) стоит внимательно изучать официальную справку Google Analytics :)
Полезные ссылки по теме настройки аналитики для SPA:
- Как настроить веб-аналитику одностраничных приложений (SPA)
- Javascript модуль «react-ga» для SPA сайтов на базе React.JS, который упрощает процесс настройки Google Analytics (analytics.js).
- Как настроить отслеживание SPA через Google Tag Manager — обзор нескольких способов.
- Еще одна статья по настройке Google Analytics для SPA от Lunametrics.
UPD: готовое решение «GA Starter Pack» для импорта в Google Tag Manager находится здесь.
привет!
ОтветитьУдалитьхорошая статья, дополню, что эта проблема возникает при установке через gtm, потому что тег аналитикса создает новый объект счетчика каждый раз при срабатывании, соответственно заново определяются и все параметры. Чтобы этого избежать, можно задать имя трекера, даже даже просто галку там поставить, если тег один. При этом необходимо следить за кастомами, потому что они тоже будут сохраняться.
Диагностировать так же можно по росту реферального и органического трафика, ну и трафик с yabs появится))
Сева, спасибо за комментарий.
ОтветитьУдалитьПо созданию нового объекта счетчика — пока не встречал таких кейсов. В моей практике при изменении только «page» GA помнит «location» и «referrer» до перезагрузки страницы в браузере. В таком случае багов не наблюдалось.
достатоно пощелкать на сайте с gtm, чтобы наотправлялись события в аналитикс, и потом набрать ga.getAll(), увидишь объекты счетчика.
УдалитьВот статья у Семёна об этом https://www.simoahava.com/gtm-tips/fix-rogue-referral-problem-single-page-sites/
но там костыльное решение)
Спасибо за статью!
ОтветитьУдалитьСейчас ломаю голову над добавлением GA через GTM.
Пробую сделать План Б, который описан в предпоследней статье из Вашего списка.
Программисты разместили код с событием, но url подставляется только на странице входа и первой страницы перехода. Потом не в Analytics, не в dataslayer переходы не чакаются... Программисты говорят, что переходы все есть в Console, значит с их стороны все ок...
Не сталкивались с таким? Как побороть?
Как оказалось, разработчики неправильно установили GTM)
УдалитьПока разработчики утверждают, что для этого сайта так и должен стоять GTM, но готовы поставить его согласно ТЗ. Ждемс!
УдалитьКак оказалось, был баг с определением dataLayer
УдалитьАктуальная статья. Спасибо. Настроил в GTM, чтобы отправлялось dp и dh (то есть поля page и hostname в теге GA GTM).
ОтветитьУдалитьПри этом dl (location) тоже отправляется. Как сделать чтобы не отправлялся совсем? В GTM в теге GA поле location не дает сделать пустым.
dl и должен отправляться, просто он не должен изменяться, если фактической перезагрузки страницы не было.
УдалитьДобрый день, Дмитрий.
УдалитьА можете прислать скрин из GTM как в итоге эти настройки полей должны выглядеть?
Да, готовое решение есть здесь: https://goo.gl/zaHtzd
УдалитьДмитрий, подскажите, есть ли для Яндекс Метрики кейсы по отслеживанию SPA-сайтов?
ОтветитьУдалитьДобрый день, в Яндекс Метрике есть возможность отправлять хиты: https://yandex.com/support/metrica/code/ajax-flash.html . Сам принцип отправки остается тем же.
УдалитьДмитрий, здравствуйте! Скажите, если в сессии пользователь уходит на сторонний сервис оплаты и потом возвращается с ответом на успешную оплату или нет, то как это фиксировать? Сессии бьются.
ОтветитьУдалитьв настройках GA на уровне ресурса -> отслеживание -> искл источники перехода
УдалитьЗдесь описано как решать эту проблему (раздел Обработка платежей внешними партнерами): https://support.google.com/analytics/answer/2795830?hl=ru
УдалитьЗдравствуйте!
ОтветитьУдалитьЯ посмотрел сайт, который вы приводите, как пример.
Вопрос:
Я сделал прямой переход (скопировал в браузер и перешел) на страницу https://flatfy.kz/partnership
pageview отправилось с такими параметрами:
dl: https://flatfy.kz/partnership
dp: /partnership
ul: ru-ru
de: UTF-8
dt: Стать партнёром - flatfy.kz
Затем перешел на страницу контакты https://flatfy.kz/contact
pageview отправился с такими данными:
dl: https://flatfy.kz/partnership
dp: /contact
ul: ru-ru
de: UTF-8
dt: Стать партнёром - flatfy.kz
Меня интересует здесь параметр dt: Стать партнёром - flatfy.kz - Он остался от предыдущей страницы. В отчете Все страница - Название страницы - Стать партнёром - будет 2 url записано /partnership и /contact?
Нет, dt тоже должен меняться, вместе с dp. Если он не меняется, то это не правильно. В отчетах название страницы будет одинаковым для двух разных страниц.
Удалить