Точный показатель отказов в Google Analytics

Иван Никитин и партнерыНовостиGoogleТочный показатель отказов в Google Analytics

Как известно, современные треккеры (счетчики) считают за отказ сеанс работы пользователя, состоящий из одной страницы. То есть, если пользователь просмотрел только одну страницу и ушел с сайта, то такой визит считается посещением с отказом, и общий показатель отказов (bounce rate) в таком случае увеличивается.

Это не очень приятно при анализе работы сайта, так как:

  1. Пользователь может провести на странице много времени, тем не менее, такой визит будет зафиксирован как отказ;
  2. На ряде сайтов с основным каналом коммуникации через телефон (заказ пиццы, заказ такси и т.п.) показатель отказов приближается к 100%;
  3. Google Analytics не считает время на сайте для посещений с отказом, то есть общее время, проведенное на сайте получается заниженным.

У Яндекс.Метрика это можно легко исправить просто установкой галочки «Точный показатель отказов» в настройках или вот такой строчкой в коде отслеживания:

accurateTrackBounce:true;

Однако для Google Analytics приходится несколько изворачиваться. В принципе, рецепт достаточно известен, например, вот хорошее объяснение показателя отказов:

Смысл этой идеи заключается в том, что Google Analytics перестаёт считать за отказ посещение, даже состоящее из одной страницы, если появляется какая либо активность пользователя, например, фиксируются события:

http://code.google.com/intl/ru-RU/apis/analytics/docs/tracking/eventTrackerGuide.html

Влияние на показатель отказов

В общем случае под «отказом» понимается посещение сайта с просмотром одной страницы. В службе Analytics отказом считается сеанс, в котором был выполнен только один запрос GIF (например, если пользователь вошел на одну страницу вашего веб-сайта и вышел с него, не выполнив никаких других запросов к серверу Analytics за этот сеанс). Однако если на сайте используется отслеживание событий, вы можете заметить изменение показателя отказов для тех страниц, на которых оно реализовано. Это связано с тем, что отслеживание событий, как и отслеживание страниц, классифицируется как запрос взаимодействия.

Предположим, например, что имеется страница с видеопроигрывателем, для которой показатель отказов всегда был высоким, и отслеживание событий для этой страницы не реализовано. Если впоследствии для этого проигрывателя настроить отслеживание событий, показатель отказов для данной страницы может уменьшиться, так как служба Analytics будет фиксировать взаимодействия пользователя с проигрывателем и отправлять эти взаимодействия на сервер в виде дополнительного запроса GIF.

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

Таким образом, «отказы» для страниц с включенным отслеживанием событий имеют несколько другое значение: посещения с просмотром одной страницы, при которых не было взаимодействия пользователя с отслеживаемыми событиями.

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

Поэтому я решил чуть-чуть модифицировать код таким образом, чтобы событие срабатывало только на первой странице сессии, а не на всех страницах. Итак, вот мой вариант кода для трех основных библиотек Google Analytics:

ga.js (очень старая библиотека)

[code lang=”js”]
if (!document.referrer || document.referrer.split(‘/’)[2].indexOf(location.hostname) != 0)
setTimeout(‘_gaq.push([“_trackEvent”,
“Служебные”, “Сеанс без отказов”, location.pathname])’, 15000);
[/code]

analytics.js (старая библиотека)

[code lang=”js”]
/* Accurate bounce rate by time */
if (!document.referrer ||
document.referrer.split(‘/’)[2].indexOf(location.hostname) != 0)
setTimeout(function(){
ga(‘send’, ‘event’, ‘Служебные’, ‘Сеанс без отказов’, location.pathname);
}, 15000);
[/code]

gtag.js (современная библиотека)

[code lang=”js”]
/* Accurate bounce rate by time */
if (!document.referrer ||
document.referrer.split(‘/’)[2].indexOf(location.hostname) != 0)
setTimeout(function(){
gtag(‘event’, ‘Сеансы без отказов’, {
‘event_category’: ‘Служебные’,
‘event_label’: ‘Сеанс без отказов’
});
}, 15000);
[/code]

Как можно легко заметить, 15-секундный таймер на событие только в том случае, если reffrer отсутствует (просто набрали адрес сайта в строке браузера) или он не соответствует нашему сайту (пользователь пришел откуда-то извне). И через 15 секунд на этой странице формируется событие, которое и заставляет Google Analytics считать, что отказа не было. Почему 15 секунд? Да точно такой же интервал у Яндекс.Метрики, если я не ошибаюсь, но этот интервал можно легко поменять.

Вот результат работы этого кода:

Показатель отказов

Вот, собственно, и всё. Удачи вам с показателем отказов!

Post Scriptum. У нас есть современный курс по аналитике сайтов, в котором как раз и собраны такие вот рецепты, плюшечки и фенечки для этого замечательного инструмента Google Analytics, а также Google Tag Manager, Google Optimize и Google Data Studio. Скажите (в комментариях), вообще, вам это интересно? И что хотелось бы услышать на курсе по аналитике сайтов?

комментариев 69

  1. Идея правильная. Вот бы не код вставлять на сотню сайтов, а галочку в настройках акаунта Google Analytics поставить. Вот была бы красота.

  2. Спасибо большое, попробую воспользоваться вашим советом. Так как меня просто пугает показатель отказов 65% на моём сайте. Хотя при этом время проведённое на сайте или проведённое на его конкретной странице очень хорошее, т.е видно, что пользователям нравятся публикации, они голосуют и т.п.

  3. Да, разумеется, тема очень интересна и перспективна. Куда сейчас без правильной аналитики?!

    Я очень люблю Гугл Аналитикс, очень удобный и функциональный интерфейс.

    А на курсе по аналитике сайтов хотелось бы услышать и научится думать используя максимально эффективные и времяэкономящие методы аналитики, чтобы исключить тупиковые подходы и работать в правильном русле.

  4. Я столкнулся с проблемой правильной работы счетчика гугл аналитикс на флэш сайте.
    Показатель отказов зашкаливает, ну это и понятно так как человек кликая по внутренним ссылкам как бы остается на той же самой странице (на которую он попал из поиска)из за урлов вида:
    site.ru#/catalog/чпу

    Была идея счетчик перенести в другую область, которая подгружается.
    И знаете что не понятно – почему время проведенное на сайте тоже маленькое? Или посещения, которые он считает отказами не учитываются в статистике вообще никак ?

  5. Иван, а при междоменном отслеживании данный код не нужно модифицировать? корректно использовать приведенный?

  6. А как быть если счетчик аналитикса установлен в виде плагина?

    • Очень просто! Те самые заветные три строчки добавляются в любом месте страницы отдельным скриптом. Единственный момент, этот скрипт должен быть ПОСЛЕ стандартного кода отслеживания Google Analytics!

  7. Не совсем понимаю, куда вставить приведенный вами код? В код Гугла или все равно где, лишь бы между и

  8. А на позиции в выдаче показатель отказов влияет? Там поведенческие факторы и всякое такое.

      • Хм а подскажите 73% отказов это много?
        И если не затруднит еще один вопрос по Google Analytics. Можно ли там смотреть ключевые запросы по которым перешли на конкретную статью а не по всему сайту.

        • 73% — это запредельно много (если речь идет о точном показателе отказов, см. статью выше). Нормальным считается диапазон 10% – 35%.
          Насчет запросов – без проблем! Есть миллион способов это получить. Например, сделайте новый расширенный сегмент “Целевая страница (страница входа) = интересующая меня страница”, включите его и перейдите на отчет по ключевым словам.
          Или добавьте в отчет по ключевым словам дополнительный параметр “Целевая страница” и в фильтре по отчету выберите нужную страницу.

  9. Вот оно как а я зашел, посмотрел (теперь понимаю что очень поверхностно) и решил что нету как и в Яндекс.Метрике. И в итоге вылавливал с логов, прям как с пещеры какой вылез.

  10. Уточните, пожалуйста, какой вид будет иметь код для Universal Analytics?

    • Примерно так:
      /* Accurate bounce rate by time */
      if (!document.referrer || document.referrer.split(‘/’)[2].indexOf(location.hostname) != 0)
      setTimeout(function(){
      ga(‘send’, ‘event’, ‘Новый посетитель’, location.pathname);
      }, 15000);

  11. Добрый день Иван, мне понравилась ваш метод по снижению уровня отказов, но хотел бы уточнить мне ГА выдал вот такой .js счетчик где и как можно его изменить или добавить, что бы отказом считался страница просмотренная меньше 15 секунд

    Заранее спасибо

    вот код:

    (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’, ‘ххххххх-хх’, ‘masterok-remonta.ru’);
    ga(‘send’, ‘pageview’);

    • Вот, пожалуйста, размещаем после основного кода.
      /* Accurate bounce rate by time */
      if (!document.referrer || document.referrer.split(‘/’)[2].indexOf(location.hostname) != 0)
      setTimeout(function(){
      ga(‘send’, ‘event’, ‘Новый посетитель’, location.pathname);
      }, 15000);

      • Спасибо Иван, поставил после основного кода перед закрытием скрипта, завтра будет видно, отпишусь о результатах

  12. Иван, добрый день. Я хотел поблагодарить Вас, за код – ранее использовал для Гугл Аналитикс. Вот пришел за добавкой для Юниверсала :) Однако есть нюанс – тег ассистенс ругается на данный код, если его поставить после основного и пишет что есть 2 ошибки и код счетчика работает не корректно. Так и должно быть или что-то все таки не получилось у меня?

    • Вы имеете ввиду код компенсации показателя отказов? У меня бес проблем работал в Тег-менеджере. Просто добавляйте его как произвольный JS код после кода Universal Analytics. Фрагмент кода можете взять с этого сайта (см. исходный страницы)

      • Так и сделал. Если есть возможность глянуть на код буду очень признателен, ибо после перехода на Юниверсал сразу полетела статистика по показателю… :(

        Сайт: http://cctv-restaurant.conecto.ua/

        Тег менагер пишет:
        Error: No HTTP response detected
        Error: Missing analytics.js script

        Помогите раскусить орешек пожалуйста. Заранее спасибо.

        • Я имею ввиду – что поставил конечно же новый код, не старый, а то я возможно не правильно выразился. Последняя модификация для Юниверсала у меня никак не хочет прирастать. :(

        • Ошибка в кавычках! Они должны быть обычными, а не косыми!

          if (!document.referrer || document.referrer.split(‘/’)[2].indexOf(location.hostname) != 0)
          setTimeout(function(){
          ga(‘send’, ‘event’, ‘Новый посетитель’, location.pathname);

          Посмотрите исходный код на своем сайте и все увидите

  13. Иван Геннадьевич, добрый день. Что делать, если http://validator.w3.org/ ругается на этот код:

    Validation Output: 1 Error

    Warning Line 16, Column 50: character “<" is the first character of a delimiter but occurred as data
    if (document.referrer.indexOf(location.hostname) < 0)

    Error Line 16, Column 50: StartTag: invalid element name
    if (document.referrer.indexOf(location.hostname) < 0)

    Заранее спасибо.

    • Желательно код скопировать в блокнот и там исправить кавычки, символы больше-меньше и т.п. И только потом вставлять на сайт.

      • Не поняла, что в данном случае можно исправить в блокноте.
        В Вашем коде при замене
        if (document.referrer.indexOf(location.hostname) < 0) на
        if (document.referrer.indexOf(location.hostname) == -1),
        валидатор перестал ругаться.
        Так проверка на первую страницу сессии будет работать корректно?

  14. Иван, здравствуйте!
    /* Accurate bounce rate by time */
    if (!document.referrer || document.referrer.split(‘/’)[2].indexOf(location.hostname) != 0)
    setTimeout(function(){
    ga(‘send’, ‘event’, ‘Новый посетитель’, location.pathname);
    }, 15000);

    Подскажите, правильно ли я поняла – данный код является универсальным фрагментом для любого кода UA? Его никак не нужно модифицировать под каждый конкретный код аналиткса? Вот так просто берем этот фрагмент и вставляем перед последним закрывающим скриптом в основной код? :)

    • Как правило, да. Для подавляющего числа сайтов. Иногда мы корректируем его для лендингов, но это скорее исключение из правила.

      • Иван, у нас как раз лендинги.. При чем на основном сайте и лендингах установлен один код UA. И с некоторых пор статистика стала очень далека от истины( мог код повлиять на это?

        • Ну, здесь вслепую сложно что-то сказать. Если резко увеличился показатель отказов, я бы рекомендовал Вам использовать другой метод компенсации. Напишите мне на ivan@nikitin.biz подробности, помогу, чем смогу.

  15. ga(‘send’, ‘event’, ‘Новый посетитель’, location.pathname);

    Что такое здесь “Новый посетитель”? Что это будет означать в Analytics?

    • Ничего. Это просто событие для компенсации показателя отказов по времени. Это название нужно чтобы можно было отличить от других событий.

      • Правильно ли тогда следующее?

        Если это событие, и конверсия по этому событию составляет 91% http://prntscr.com/4tdyig значит остальные 9% посетителей покинули сайт раньше чем прошло 9 секунд? Получается что показатель отказов = 9%?

        И тогда если смотреть статистику по каналам – там в показателе отказа тоже должно быть значение 9%? А получается так: http://prntscr.com/4tdzbu

        Немного запутался. Если подскажете – буду вам очень благодарен.

        • Нет, не верно. Не надо смотреть на число событий и их процент. Просто посмотрите на показатель отказов в любом отчете – он уже правильный и точный. Это происходит за счет того, что в сессиях состоящих из одной страницы и длительностью более 15 сек передается два хита, такие сессии не считаются отказанными. Статистика же самого события практически бесполезна.

          • Иван, спасибо за ответ!

  16. Здравствуйте, подскажите пожалуйста, как настроить код через GTM ?

    Добавил новый контейнер, “Пользовательский код html”

    Добавил так:

    /* Accurate bounce rate by time */
    if (!document.referrer ||
    document.referrer.split(‘/’)[2].indexOf(location.hostname) != 0)
    setTimeout(function(){
    ga(‘send’, ‘event’, ‘Новый посетитель’, location.pathname);
    }, 15000);

    Но к сожалению код не работает. Подскажите пожалуйста что сделал не так?

    • Нет, этот код в GTM работать не будет. В GTM нужно играть по правилам GTM и, честно говоря, из-за этого я его и недолюбливаю. То, что я могу сделать 10 строчками прямого JavaScript кода в лучших традициях old-school, в GTM для этого придется городить целый огород.
      Но вот решение для GTM: http://convert.ua/blog/analytics/bounce-rate-universal-analytics/
      Надеюсь, оно Вам поможет.

  17. Добрый день! Да интересно фишечки про гугл аналитикс узнать в рамках курса, чтобы все от и до и по полочкам.

    И еще такой вопрос – у меня информационный сайт – никакого события на страницах нет – одни статьи, да и счетчик события наверное сложно будет поставить – у меня первый сайт и сделан в конструкторе wix. В моем случае никак не настроить счетчик отказов в гугл аналитикс на 15 секунд?

    У меня сейчас такой разброд в отказах получается – в яндекс метрике 9% причем галочку считать точный показатель отказов я не ставила, остались “заводские” настройки) в гугл аналитикс 70%. Либо у меня все хорошо с отказами и сайт людям интересен, либо все плохо – вот такая вот аналитика получилась.

  18. Несколько лет занимаюсь разработкой и продвижением сайтов, а об этом только сегодня узнал и то, с форума который ссылку на вас посоветовал)) Спасибо, было очень интересно.

  19. Здравствуйте.
    подскажите пожалуйста, сам код я располагаю в сайтбаре, какую часть вашего кода нужно туда добавить?
    У Вас их две.

    мой код такой:

    (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’,’https://www.google-analytics.com/analytics.js’,’ga’);

    ga(‘create’, ‘UA-111111111’, ‘auto’);
    ga(‘send’, ‘pageview’);

    • Добавьте в любое место (лучше в футер) вот такой код

      /* Accurate bounce rate by time */
      document.referrer&&0==document.referrer.split('/')[2].indexOf(location.hostname)||setTimeout(function(){ga('send','event','Сеансы','Сеансы без отказов',location.pathname)},15000);

  20. ув. Иван. Спасибо большое за такой быстрый ответ.
    подскажите пожалуйста в коде, который Вы указали, находятся слова Сеансы’,’Сеансы без отказов – у меня англоязычный сайт, нужны ли изменения этих слов?
    Если да, как правильно прописать?
    Спасибо большое за помощь, а то показатель отказов по гугл аналитик зашкаливает, больше 50%

    • Не принципиально, но можете перевести их на английский.

  21. Иван, попробовала вставить непосредственно в footer.php нарушается структура, через виджет отображается эта строчка на сайте визуально. что-то делаю неправильно?
    Извините за беспокойство.

    • Всё очень просто: скрипты должны быть в теге SCRIPT, то есть, вот так:
      <script>
      /* Accurate bounce rate by time */
      document.referrer&&0==document.referrer.split('/')[2].indexOf(location.hostname)||setTimeout(function(){ga('send','event','Сеансы','Сеансы без отказов',location.pathname)},15000);
      </script>

  22. Спасибо Вам огромное, Иван. Все получилось.
    Прослежу изменения в течении недели по показателю отказов, просто сайт у меня совсем юный, и эти отказы крайне нежелательны.
    Поставлю и на второй сайт, метрика показывает отказы в пределах 15%.. а вот гугл такими показателями почему-то не балует.

  23. Иван, а как Вы считаете.. перечитала снова полностью ваш обзор, если Вы говорите, что гугл скорее всего не воспринимает этот показатель отказов, как нечто влияющее на выдачу и позиции сайта, то на что он может влиять?
    просто для визуальной аналитики данных своего сайта и самоутешения? что показатель отказов стремится к 0% ?
    Или все же он важен, ведь является как никак поведенческим фактором?
    Интересно Ваше мнение.

    • Насколько я понимаю и знаю, Google не использует показатель отказов как показатель ранжирования. Но это не делает показатель отказов никчемным, он очень даже нужен, именно по нему мы можем понять проблемы с трафиком на сайт.

  24. Здравствуйте, Иван.
    Не совсем понял отрывок из Вашей статьи: “Как можно легко заметить, 15-секундный таймер на событие только в том случае, если reffrer отсутствует (просто набрали адрес сайта в строке браузера) или он не соответствует нашему сайту (пользователь пришел откуда-то извне). И через 15 секунд на этой странице формируется событие, которое и заставляет Google Analytics считать, что отказа не было…”

    Прошу пояснить, как именно работает код. С любого ли источника/канала трафика он работает?

    • Имеется ввиду чтобы не генерировать событие на каждой просмотренной странице, проверяется referrer. Если он пустой или НЕ РАВЕН текущему сайту, то есть, это не внутренний переход, то ставится таймер. Это работает С ЛЮБЫМ КАНАЛОМ!

  25. Здравствуйте!Установил код Гугл Аналитикс модифицированный с точными показателями отказов через google tag manadger(через пользовательские тег)(он а tag assistance показывает что гугл аналитикс не правильно работает….НЕ стоит пользоваться google tag manager(стоит в теге бади), а стоит просто установить код гугла анадитикса перед тешом хед?Заранее спасибо за ответ!!

    (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-74265708-1’, ‘auto’);
    ga(‘require’, ‘displayfeatures’);
    ga(‘send’, ‘pageview’);

    /* Accurate bounce rate by time */
    if (!document.referrer ||
    document.referrer.split(‘/’)[2].indexOf(location.hostname) != 0)
    setTimeout(function(){
    ga(‘send’, ‘event’, ‘Новый посетитель’, location.pathname);
    }, 15000);

    • Google Tag Manager – это СОВСЕМ ДРУГАЯ ИСТОРИЯ! Попробуйте добавить в него не весь код, а только часть после /* Accurate bounce rate by time */
      А еще лучше обратиться к тем, кто Вам его настраивал.

  26. Спасибо, благодаря вашей статье, уменьшил % отказов. Теперь люди приходят смотреть онлайн фильмы новинки сюда http://kinovey.net/ и остаются на сайте более длительный срок. Благодарю еще раз =)

    • Да так же! Создаете тег Universal Analytics, передача события. И ставите срабатывание вот по такому триггеру (таймер)
      Триггер для точного показателя отказов

      • Здравствуйте, вы можете расписать подробно, как создать тег, куда его добавить, то есть по шагам?

Добавить комментарий