Исправление ошибки тега Google Аналитика: Universal Analytics - Failed

16 июня, 2022

В этой статье я опишу процесс поиска ошибки и решение, которое позволило избавиться от статуса Failed для тега Google Аналитика: Universal Analytics в Google Tag Manager.

Несмотря на то, что некоторые пользователи уже переходят на Google Analytics 4 и потихоньку начинают его изучать, большая часть пока по-прежнему работает с Universal Analytics. И в нем до сих пор попадаются разные и интересные задачи, которые я раньше не встречал в своей практике. И эта одна из них.

Примечание: 1 июля 2023 г. Universal Analytics (GA3) перестанет собирать ваши данные на сайте, а уже сейчас Google предлагает вам использовать Google Analytics 4.

Вступление

Ко мне обратились за помощью в решении следующей задачи - расширение Google Tag Assistant не видит счетчик Universal Analytics, хотя он создан на основе стандартного тега Google Аналитика: Universal Analytics, и по сообщению заказчика, загружается в режиме отладки Google Tag Manager, но не передает данные в аналитику. Параллельно GA3 на сайте установлены Яндекс.Метрика и Google Analytics 4, которые срабатывают как надо. Цифры, которые сравнивались между тремя счетчиками (YM, UA и GA4), отличаются на порядок

Яндекс.Метрика (Новые посетители - 1612):

Данные по Яндекс.Метрике

Google Analytics 4 (Новые пользователи - 1649):

Данные по Google Analytics 4

И статистика Universal Analytics за тот же самый период (Новые пользователи - 609):

Данные по Google Analytics 3

Данных в Google Analytics 3 в 2-2,5 раза меньше, чем в Метрике и GA4. Очень странно... Получается, что тег Universal Analytics все-таки активируется и передает данные в аналитику, но только часть из них доходит? Как уведомил заказчик, его настройки тегов от проекта к проекту ничем не отличаются, а дополнительных фильтров в представлении не используется.

После того, как мне любезно предоставили доступы к проекту, я начал искать причину такого поведения.

Поиск тренда

Изначально я хотел проверить, изменения в счетчике аналитики произошли в какую-то конкретную дату или же это так происходит с самого начала установки кода Universal Analytics на сайт. Для этого самым простым способом является добавление нового счетчика Google Analytics к уже существующему, без каких-либо настроек, чтобы посмотреть, будет ли статистика расходиться между ними двумя, и заоодно проверить гипотезу про дату. Иногда бывает, что простая переустановка счетчика с новым идентификатором UA-XXXX-Y решает эту проблему.

Два счетчика Universal Analytics для тестирования

Создав тег в Google Tag Manager Google Аналитика: Universal Analytics с точно такими же настройками, я добавил его на сайт. Нужно было несколько дней, чтобы статистика в обоих счетчиках накопилась, и можно было сравнить ее между собой. Уже в момент публикации в режиме предварительного просмотра диспетчера тегов я заметил, что тег срабатывает не так, как обычно. Именно здесь впервые и появляется статус тега Failed:

Google Аналитика: Universal Analytics - Failed

Все остальные теги имели нужный статус Succeeded. Пока я не придал этому особого значения, а просто пометил в своем лог-файле, и продолжил наблюдения.

Через 2 дня мы сравнили данные и оказалось, что в обоих счетчиках (старом и новом) статистика расходится на порядок с Яндекс.Метрикой и Google Analytics 4, но между двумя GA3 расхождений практически нет. Значит дело именно в теге Universal Analytics, и ни в каких других. Необходимо вернуться к ошибке тега Failed.

Но для начала я хотел найти закономерность - на всех ли страницах сайта есть такая ошибка, тег имеет статус Failed или нет? Может быть дело в том, что код счетчика установлен не на всех страницах сайта? Этот вариант мы с заказчиком исключили в самый первый момент - установка сквозная, код присутствует в шапке сайта на всех страницах.

Раз какая-то статистика в отчеты Google Analytics попадает, можно проверить активацию тега именно на тех страницах, где был засчитан просмотр. Перейдя в отчет Поведение - Контент сайта - Все страницы, я увидел список страниц, просмотр которых GA3 зафиксировал:

Страницы, которые попали в отчеты (тег UA активировался)

Проверив поочередно каждую из них через режим отладки Google Tag Manager, везде мои теги Universal Analytics выдавали ошибку Failed. Счетчик не активировался и не передавал информацию. Как так?

Если счетчик себя ведет таким образом, значит у заказчика настройки были какие-то другие до того, как он написал мне, и счетчик как-то, но отрабатывал. А после обращения ко мне он перестал фиксировать переходы даже на те страницы, которые раньше засчитывались. Я принял решение вернуться к статусу ошибки Failed.

Гипотезы

Блокировщики

До того, как мне попалась такая проблема на сайте, я знал только одну причину появления статуса Google Аналитика: Universal Analytics - Failed. Это блокировка кода Google Analytics на уровне браузера.

Если ваш браузер блокирует библиотеку analytics.js, то есть клиент не может загрузить ее из https://www.google-analytics.com/analytics.js, тег будет отображать статус Failed. Самой распространенной причиной такого поведения - включенный в браузере блокировщик рекламы, который может запрещать активацию определенных тегов/кодов.

Пример блокировки трекеров (Ghostery)

С другой стороны, если бы какое-нибудь расширение типа AdBlock или Ghostery блокировало доступ к сторонним скриптам, то оно блокировало бы и другие счетчики, и Яндекс.Метрику, и Google Analytics 4, и ВКонтакте Pixel, и т.д. А здесь это происходит точечно. Так или иначе, необходимо проверить.

Самый простой способ это сделать - открыть в браузере консоль разработчика и вкладку Network, затем выполнить поиск по google-analytics или collect:

Пример заблокированного запроса Google Analytics 3 (Google Chrome)

Если он заблокирован, то он вовсе не отобразится, либо запрос должен подсвечиваться красным цветом, как на скриншоте выше. В некоторых браузерах на вкладке Console можно увидеть дополнительную информацию по блокировке. Например, вот так это может выглядеть если используется расширение Ghostery:

Консоль разработчика - Console (Ghostery заблокировал все счетчики)

Данный способ - самая распространненая причина того, что счетчик Google Analytics не срабатывает и не передает данные в аналитику о просмотрах и других хитах.

Примечание: если библиотеке analytics.js удается загрузиться, но расширение или браузер блокируют вызовы www.google-analytics.com/collect , тег в Google Tag Manager не будет сигнализировать о статусе Failed .

Ни у меня, ни у клиента такого расширения не было, и блокировок счетчиков не фиксировалось. Значит причина в другом. И она оказалась куда более сложной и нетривиальной, а описание такой проблемы я нашел только у одного человека в интернете - Симо Ахавы (Simo Ahava)!

Да-да! Именно у него есть описание очень глубокой и неочевидной проблемы, с которой столкнулись я и мой заказчик.

Занятое пространство имен

Когда вы размещаете на странице фрагмент кода JavaScript analytics.js, он создает глобальный объект ga. На его основе разработчики создают объекты трекера, которые затем передают данные в Google Analytics. Имя этого объекта ga можно изменить во фрагменте кода analytics.js , а также с помощью Google Tag Manager.

Пример создания трекера по умолчанию:

Если эта глобальная переменная уже занята, Google Analytics не сможет инициализироваться, и статус тега будет равен Failed.

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

Вы можете увидеть примерно следующее:

Пример команды в консоли (вариант 1)

Ответ нас сильно удивил: <path id="ga" d="M707 37v-2h22v2z"></path>

Есть другая команда, которую вы можете попробовать:

Результат:

Пример команды в консоли (вариант 2)

Если вы получаете undefined, значит Google Analytics не загрузился, и что-то еще занимает пространство имен.

Такую ошибку и поведение счетчика достаточно сложно отследить, поскольку вам не известно, были ли до вас кем-то внесены изменения в работу сайта. Может быть код, внедренный разработчиком, перезаписывает данные, и занимает имя ga, и поэтому в работе возникает конфликт, а Google Analytics не может отправить данные в аналитику, а статус тега Failed.

Так или иначе, благодаря Симо и его решению, мы нашли элемент на сайте, который имеет точно такое же имя, которое нужно для объекта Google Analytics. И находится он в идентификаторе, атрибуте id. Симо по этому поводу пишет следующее:

Иногда это может быть не JavaScript, который перезаписывает объект. Браузеры также имеют необычный способ назначения элементов HTML глобальной переменной window, если у них есть id атрибут.

Другими словами, если на странице есть элемент HTML, идентификатор которого совпадает с именем объекта Google Analytics (ga по умолчанию), тег также будет сигнализировать о статусе Failed! Еще один способ проверить это - запустить нижеприведенный код на вкладке Console:

Если это команда возвращает элемент HTML, значит и у вас именно эта проблема:

Результат с возвращенным HTML-элементом

Решение

Это именно наш случай! Как же это исправить? Просто переименуйте название глобального объекта в диспетчере тегов Google и все! Это избавит вас от дальнейших конфликтов. Вам нужно сделать это только один раз в пользовательской переменной типа Настройки Google Аналитики в дополнительных настройках. Развернув расширенную конфигурацию, в поле Название глобальной функции (Global Function Name) введите новое название:

Дополнительные настройки - Расширенная конфигурация

Симо рекомендует использовать _ga или __ga. Обязательно убедитесь, что ваш переменная не зарезервирована. Для этого вы можете выполнить команду в консоли:

, где yourNewVariableName - название вашей новой глобальной функции.

Сохраните изменения в переменной. Теперь все теги типа Google Аналитика: Universal Analytics должны корректно работать.

Почему часть данных в Google Analytics все-таки передавалась?

Остался самым интересным вопрос - если тег Failed возникал всегда, потому что пространство имен было занято HTML-элементом с атрибутом id и Google Analytics не отправлял данные в аналитику, то как объяснить статистику в отчетах GA3?

Оказалось, что изначально заказчик самостоятельно изменил название глобальной фунции в переменной Настройки Google Аналитики и настроил правильно. А затем решил изменить эту переменную в теге на Константа, но в самом теге название глобального объекта не переименовал. Получилось, что какое-то время все корректно работало. А после - сбилось. Вот так!

Этот кейс - редкое явление в веб-аналитике. Во всем интернете я встретил упоминание об этой проблеме и подробные рекомендации по ее устранению только у Симо в блоге. Теперь есть и у меня 😉 В любом случае, это очень хороший опыт, поскольку его решение лежит в плоскости не только интернет-маркетинга, но еще и программирования!

Получайте бесплатные уроки и фишки

По контекстной, таргетированной рекламе и аналитике