На практике может возникнуть ситуация, при которой попытка отправить данные о цели в Яндекс Метрику приведет к ошибке: ym is not defined.
Полный текст ошибки: Uncaught ReferenceError: ym is not defined . Когда это возможно? В том случае если отправка информации о достижении цели методом reachGoal выполняется до того как счетчик Яндекс Метрики был инициализирован:
Как видно из описания мы пытаемся использовать объект ym, который не существует на странице. Я специально на этой странице не выполнил предварительно стандартный код счетчика Яндекс Метрики, как результат — я не могу использовать ym для взаимодействия с Метрикой.
Добавим код на страницу и повторим попытку отправки:
После инициализации счетчика сведения успешно отправлены. Каким образом можно сделать механизм отправки, чтобы быть уверенным, что при инициализации счетчика данные с помощью reachGoal будут отправлены? Добавить несколько дополнительных строк кода, вот так выглядит рабочий код:
1 2 3 4 5 6 7 8 9 10 11 |
(function () { var PM_YM_COUNTER = ВАШ_СЧЕТЧИК; var ee = setInterval(function () { if (typeof window.ym != 'undefined') { ym(PM_YM_COUNTER, 'reachGoal', 'ВАШ_ID_ЦЕЛИ'); clearInterval(ee); } else { console.log('Метрика не инициализирована'); } }, 500); // 0,5 секунды ждать, изменить на свое значение, 1 сек = 1000 })(); |
В нем изначально проверяется есть ли объект ym и если его нет, то повторно вернуться к проверке через 0,5 секунды, если объект есть — выполнить отправку. Этот код можно использовать как в исходном коде страниц, так и в тегах Google Tag Manager. При выполнении работ по настройке веб-аналитики на проектах я использую это решение. Пока не будет инициализирован счетчик вы будете получать вывод в консоль браузера следующего сообщения вместо ошибки:
Можно положиться и на стандартный механизм Яндекс Метрики, который позволит отправить данные после того, как счетчик будет инициализирован. Но этот метод срабатывает если у вас на странице есть объект ym и он ждет появление счетчика с нужным id:
0 — открываю страницу, на которой происходит инициализация счетчика Метрики с номером 00000000
1 — пытаюсь отправить методом reachGoal в счетчик 61555978 , не получается
2 — инициализирую счетчик 61555978
3 — автоматически отправляется информация методом reachGoal, которую я пытался отправить в п. 2 выше
4 — отправка просмотра страницы после стандартной инициализации счетчика Метрики в счетчик 61555978
Этот вариант не сработает и приведет к ошибке: Uncaught ReferenceError: ym is not defined если на странице не будет объекта ym. По этой причине я рекомендую использовать первый вариант решения проблемы, описанный в статье.