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