Как незаметно поломать систему аналитики для сайта на базе 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 :)



Комментарии

  1. привет!
    хорошая статья, дополню, что эта проблема возникает при установке через gtm, потому что тег аналитикса создает новый объект счетчика каждый раз при срабатывании, соответственно заново определяются и все параметры. Чтобы этого избежать, можно задать имя трекера, даже даже просто галку там поставить, если тег один. При этом необходимо следить за кастомами, потому что они тоже будут сохраняться.
    Диагностировать так же можно по росту реферального и органического трафика, ну и трафик с yabs появится))

    ОтветитьУдалить
  2. Сева, спасибо за комментарий.

    По созданию нового объекта счетчика — пока не встречал таких кейсов. В моей практике при изменении только «page» GA помнит «location» и «referrer» до перезагрузки страницы в браузере. В таком случае багов не наблюдалось.

    ОтветитьУдалить
    Ответы
    1. достатоно пощелкать на сайте с gtm, чтобы наотправлялись события в аналитикс, и потом набрать ga.getAll(), увидишь объекты счетчика.
      Вот статья у Семёна об этом https://www.simoahava.com/gtm-tips/fix-rogue-referral-problem-single-page-sites/
      но там костыльное решение)

      Удалить
  3. Спасибо за статью!
    Сейчас ломаю голову над добавлением GA через GTM.
    Пробую сделать План Б, который описан в предпоследней статье из Вашего списка.
    Программисты разместили код с событием, но url подставляется только на странице входа и первой страницы перехода. Потом не в Analytics, не в dataslayer переходы не чакаются... Программисты говорят, что переходы все есть в Console, значит с их стороны все ок...
    Не сталкивались с таким? Как побороть?

    ОтветитьУдалить
    Ответы
    1. Как оказалось, разработчики неправильно установили GTM)

      Удалить
    2. Пока разработчики утверждают, что для этого сайта так и должен стоять GTM, но готовы поставить его согласно ТЗ. Ждемс!

      Удалить
    3. Как оказалось, был баг с определением dataLayer

      Удалить
  4. Актуальная статья. Спасибо. Настроил в GTM, чтобы отправлялось dp и dh (то есть поля page и hostname в теге GA GTM).
    При этом dl (location) тоже отправляется. Как сделать чтобы не отправлялся совсем? В GTM в теге GA поле location не дает сделать пустым.

    ОтветитьУдалить
    Ответы
    1. dl и должен отправляться, просто он не должен изменяться, если фактической перезагрузки страницы не было.

      Удалить
    2. Добрый день, Дмитрий.
      А можете прислать скрин из GTM как в итоге эти настройки полей должны выглядеть?

      Удалить
    3. Да, готовое решение есть здесь: https://goo.gl/zaHtzd

      Удалить
  5. Дмитрий, подскажите, есть ли для Яндекс Метрики кейсы по отслеживанию SPA-сайтов?

    ОтветитьУдалить
    Ответы
    1. Добрый день, в Яндекс Метрике есть возможность отправлять хиты: https://yandex.com/support/metrica/code/ajax-flash.html . Сам принцип отправки остается тем же.

      Удалить
  6. Дмитрий, здравствуйте! Скажите, если в сессии пользователь уходит на сторонний сервис оплаты и потом возвращается с ответом на успешную оплату или нет, то как это фиксировать? Сессии бьются.

    ОтветитьУдалить
    Ответы
    1. в настройках GA на уровне ресурса -> отслеживание -> искл источники перехода

      Удалить
    2. Здесь описано как решать эту проблему (раздел Обработка платежей внешними партнерами): https://support.google.com/analytics/answer/2795830?hl=ru

      Удалить
  7. Здравствуйте!
    Я посмотрел сайт, который вы приводите, как пример.

    Вопрос:

    Я сделал прямой переход (скопировал в браузер и перешел) на страницу 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?

    ОтветитьУдалить
    Ответы
    1. Нет, dt тоже должен меняться, вместе с dp. Если он не меняется, то это не правильно. В отчетах название страницы будет одинаковым для двух разных страниц.

      Удалить

Отправить комментарий

Популярные сообщения из этого блога

Настройка Conversions API (Server-Side API) для Facebook Pixel

Как бесплатно настроить автоматический импорт расходов на Facebook Ads в Google Analytics