4 минАналитикаРазбор

Счётчик аналитики, который не работал ни дня

Метрика была установлена, код на месте, ошибок в консоли нет. И ни одного визита в статистике. Причина — одна строчка, из-за которой браузер подменял функцию счётчика тегом скрипта.

Сайт студии работал больше года. Метрика была подключена, счётчик числился в кабинете, код виднелся в исходниках страницы. Статистика при этом была пустой, и все считали, что просто мало трафика.

Трафик был. Не работал счётчик — и не работал он с самого первого дня.

Что происходило

Стандартный сниппет Метрики создаёт функцию с именем ym и вызывает её для инициализации. В нашем случае тег скрипта был подписан так:

<Script id="ym"> ... ym(12345678, "init", { webvisor: true }) ... </Script>

Браузеры создают глобальную переменную для каждого элемента с атрибутом id. То есть window.ym стал ссылкой на сам тег скрипта ещё до того, как сниппет успел объявить функцию.

Дальше сниппет проверяет: «функция уже есть?» — видит, что переменная занята, и оставляет её как есть. Вызов инициализации уходит не в счётчик, а в элемент разметки, падает внутри try и не выводит ничего в консоль.

Признак этой поломки: typeof window.ym возвращает "object" вместо "function". Если у объекта при этом есть свойства вроде l — это тег скрипта, а не счётчик.

Почему это не заметили

Ошибки в консоли нет: она проглатывается. Файл счётчика в сетевых запросах виден — он всё-таки загружается. В кабинете счётчик числится активным. Всё выглядит рабочим, кроме одного: хиты не отправляются, и статистика пустая.

Проверять надо не наличие кода, а факт отправки. В браузере смотрим сетевые запросы к mc.yandex.ru: если запросов на адрес с номером счётчика нет — данные не собираются, что бы ни показывал кабинет.

Лечение и правило на будущее

Достаточно переименовать идентификатор тега: ym-init вместо ym. После этого счётчик поднимается нормально, хиты уходят, вебвизор пишет.

Правило шире одной Метрики: никогда не давайте элементу id, совпадающий с именем глобальной переменной библиотеки. Опасные имена — ym, dataLayer, gtag, fbq. Каждое из них браузер с радостью подменит вашим тегом.

Год решений о рекламе принимался вслепую из-за двух символов в атрибуте. Проверка занимает пятнадцать секунд.

Проверьте у себя прямо сейчас

Откройте свой сайт, вызовите консоль браузера и введите typeof window.ym. Если ответ — "function", всё в порядке. Если "object" или "undefined" — данные в вашу аналитику не приходят, и статистика, по которой вы принимаете решения, неполная.

31% звонков не попадали в отчёты, и никто этого не виделРуководитель каждый вечер получал сводку по работе отдела продаж. Сводка врала: треть разговоров в неё не входила, а один сегмент был завышен втрое. Причина оказалась в одной строке кода.790 товаров, которых не было на сайте полгодаКаталог в учётной системе и каталог на сайте разошлись тихо: без ошибок в логах и жалоб от покупателей. Разбираем, почему инкрементальная синхронизация физически не может увидеть часть изменений и как это найти у себя.