Как отключить Яндекс Метрику до согласия на cookie
Запрос, с которым ко мне приходят чаще всего в этой теме, звучит примерно так: «как сделать, чтобы Метрика не грузилась до согласия, но статистику я всё-таки видел». Хорошая новость — выбирать между соответствием закону и полной слепотой не нужно: у Метрики есть анонимный режим, который не создаёт персональных данных. Плохая — переключить уже загруженный счётчик нельзя, и именно на этом ломается большинство самодельных решений.
Что именно нарушается, если Метрика загружается сразу
При инициализации счётчик записывает в браузер идентификатор _ym_uid — числовое значение, которое сохраняется между визитами и позволяет отличить конкретного посетителя от остальных, связав его сессии в одну историю. Это и есть тот признак, по которому обработка попадает под 152-ФЗ: данные относятся к определяемому лицу, даже если ни имени, ни email в них нет.
С 1 сентября 2025 года ФЗ-156 закрепил, что для аналитических трекеров нужно согласие. Момент начала обработки — не отправка отчёта в Яндекс, а установка идентификатора. Поэтому конструкция «баннер показан, скрипт уже работает» требования не выполняет: согласие спрашивают после того, как данные начали собирать.
Большинство встроенных «уведомлений о cookies» в Tilda, Wix и подобных платформах показывают плашку и запоминают факт закрытия. Загрузку сторонних скриптов они не задерживают — счётчик в шаблоне сайта срабатывает раньше баннера.
Cookieless-режим: законный способ считать трафик до согласия
Полностью отказываться от статистики до согласия не обязательно. У Метрики есть параметр инициализации cookies: false — в этом режиме счётчик не записывает идентификатор в браузер. Каждый визит остаётся анонимным и не связывается с предыдущими: вы видите число просмотров, источники, географию, но не уникальных посетителей и не поведение конкретного человека во времени.
Раз идентификатор не создаётся, персональных данных не появляется — и согласие для такого режима не требуется. Это позволяет не терять базовую статистику на тех посетителях, кто до баннера не дошёл или отказался.
Просмотры, источники переходов, поисковые фразы, гео, устройства, отказы по сессии. Что пропадает: уникальные посетители, возвраты, полноценный Вебвизор, длинные воронки по одному пользователю.
Рабочий код: загрузка в cookieless и апгрейд после согласия
Главная ловушка — попытка «переинициализировать» счётчик после нажатия кнопки. Повторный вызов init с другими параметрами существующий счётчик не переключает: параметры фиксируются при первой инициализации. Поэтому решение строится иначе — режим определяется до вызова init, из сохранённого ранее выбора:
var STORAGE_KEY = 'cookie_prefs';
var prefs = null;
try {
var raw = localStorage.getItem(STORAGE_KEY);
if (raw) { prefs = JSON.parse(raw); }
} catch (e) { prefs = null; }
function loadMetrika(withCookies) {
(function (m, e, t, r, i, k, a) {
m[i] = m[i] || function () { (m[i].a = m[i].a || []).push(arguments); };
m[i].l = 1 * new Date();
for (var j = 0; j < document.scripts.length; j++) {
if (document.scripts[j].src === r) { return; }
}
k = e.createElement(t); a = e.getElementsByTagName(t)[0];
k.async = 1; k.src = r; a.parentNode.insertBefore(k, a);
})(window, document, 'script', 'https://mc.yandex.ru/metrika/tag.js', 'ym');
ym(XXXXXXXX, 'init', {
cookies: withCookies,
webvisor: withCookies,
clickmap: true,
ssr: true,
accurateTrackBounce: true,
trackLinks: true
});
}
loadMetrika(!!(prefs && prefs.analytics));Первый визит: prefs пуст, счётчик поднимается в cookieless-режиме. Посетитель нажимает «Принять всё» — выбор пишется в localStorage, страница перезагружается или счётчик поднимается уже с cookie при следующем переходе. Посетитель нажимает «Только необходимые» — режим остаётся анонимным навсегда.
Три параметра, которые надо связать с согласием
| Параметр | Зависит от согласия | Почему |
|---|---|---|
cookies |
Да | Именно он управляет записью идентификатора _ym_uid |
webvisor |
Да | Запись сессии фиксирует поведение и ввод — самая чувствительная часть аналитики |
clickmap |
Нет | Карта кликов агрегирует координаты по странице, а не по человеку — идентификатор ей не нужен |
На clickmap стоит обратить внимание отдельно: часть целей Метрики типа «клик по кнопке» технически опирается на карту кликов и без неё просто не срабатывает. Если выключить clickmap для несогласившихся, вы потеряете не персональные данные, а собственные конверсии — и обнаружите это далеко не сразу.
Другие счётчики: cookieless-режима у них обычно нет
Top.Mail.Ru, рекламные пиксели и большинство сторонних трекеров альтернативного анонимного режима не предлагают — для них выбор бинарный. Значит, скрипт не должен появляться в DOM до согласия вообще: не «загружен, но выключен», а не вставлен. Практично держать их загрузку отдельной функцией, вызываемой только по флагу согласия:
function applyPrefs(p) {
loadMetrika(!!p.analytics);
if (p.ads) { loadMailRu(); }
}Как раскладывать трекеры по категориям и почему трёх групп достаточно — в статье «Cookie-баннер с возможностью отказа».
Как проверить, что получилось
- Откройте сайт в приватном окне, баннер не трогайте.
- DevTools → Application → Cookies. Значения
_ym_uidи_ym_dбыть не должно. - Нажмите «Только необходимые», перезагрузите страницу — идентификаторов по-прежнему нет.
- Нажмите «Принять всё» —
_ym_uidпоявляется. - Вкладка Network: до согласия не должно быть запросов к доменам сторонних счётчиков, которые не умеют cookieless.
В отчётах Метрики cookieless-визиты видны, поэтому «данные идут» — плохой критерий проверки. Единственный надёжный признак правильной настройки — отсутствие _ym_uid в браузере до согласия.
Что описать в документах
Технической настройки недостаточно: перечень трекеров, назначение каждого, срок хранения и порядок отзыва согласия должны быть в политике использования cookie, а сам факт передачи данных Яндексу как обработчику — в политике конфиденциальности. Требования к обоим документам разбираю в материалах «Cookie-баннер для сайта» и «Политика конфиденциальности для сайта».
Проверьте, блокируются ли трекеры на вашем сайте
Бесплатный аудит проверяет порядок загрузки: есть ли баннер, ставятся ли идентификаторы до согласия, найдена ли политика cookie и совпадает ли список счётчиков с заявленным. Отчёт приходит на email.
Проверить сайт бесплатноЧасто задаваемые вопросы
Можно, но только в анонимном режиме с параметром cookies: false. В нём счётчик не записывает идентификатор _ym_uid, персональные данные не появляются и согласие не требуется. Полный режим с cookie — только после явного согласия.
Параметры счётчика фиксируются при первой инициализации, повторный init их не переключает. Режим нужно определять до вызова init — из сохранённого в localStorage выбора, а применять новый режим при следующей загрузке страницы.
cookies и webvisor — да, они завязаны на идентификатор посетителя и запись его поведения. clickmap — нет: карта кликов агрегирует данные по странице, а не по человеку, и от неё зависят цели типа «клик по кнопке», которые без неё перестанут срабатывать.
У них анонимного режима обычно нет, поэтому выбор бинарный: до согласия скрипт не должен появляться в DOM вообще. Не «загружен, но выключен», а не вставлен — их загрузку выносят в отдельную функцию, вызываемую только по флагу согласия.