Яндекс Метрика не работает: счётчик, который не собрал ни одного визита
Метрика была установлена, код на месте, ошибок в консоли нет. И ни одного визита в статистике. Причина — одна строчка, из-за которой браузер подменял функцию счётчика тегом скрипта.
Сайт студии работал больше года. Метрика была подключена, счётчик числился в кабинете, код виднелся в исходниках страницы. Статистика при этом была пустой, и все считали, что просто мало трафика.
Трафик был. Не работал счётчик — и не работал он с самого первого дня.
Почему Яндекс Метрика не работает: что происходило
Стандартный сниппет Метрики создаёт функцию с именем 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" — данные в вашу аналитику не приходят, и статистика, по которой вы принимаете решения, неполная.
Ещё разборы
Дашборды для бизнеса: какие пять цифр нужны руководителю на одном экранеДашборды для бизнеса перестают открывать через месяц: двадцать графиков и ни одного решения. Разбираем, что такое рабочий дашборд, какие пять показателей нужны на главном экране, почему у каждого должно быть сравнение и что делать с остальными данными.Интеграция с CRM: почему она ломается через полгода и как это заметитьИнтеграцию с CRM сдали, она работала, а через несколько месяцев данные перестали доходить — и никто не заметил. Разбираем, что ломается со временем, почему это происходит без единой ошибки в логах и как сделать интеграцию, которая сообщает о поломке сама.