Cookie-баннер по 152-ФЗ в 2026 году должен быть реализован по модели opt-in: cookies не устанавливаются до явного согласия пользователя, отдельные кнопки «Принять все» и «Только необходимые», без предустановленных галочек, с гранулярным согласием по категориям (технические / аналитические / маркетинговые) и обязательным серверным логированием выбора. Нарушение требований — штраф до 700 000 ₽ по ч.2 ст.13.11 КоАП РФ, а автоматизированный мониторинг РКН (АС МПДн), работающий с 2025 года, может выявлять такие нарушения по жалобам и в приоритетных отраслях.

Проверьте cookie-баннер на своём сайте — за 30 секунд


Чем opt-in отличается от opt-out и почему opt-out нелегален

Opt-in (требование 152-ФЗ): cookies аналитики и маркетинга не загружаются до того, как пользователь активно нажмёт «Принять». Чекбоксы по умолчанию пустые. Есть отдельная кнопка «Отклонить» или «Только необходимые».

Opt-out (распространённый в США/ЕС-pre-GDPR): cookies уже работают с первого визита, пользователь может сам отключить в настройках. По 152-ФЗ — прямое нарушение, потому что обработка ПДн (cookies приравнены к ПДн по ст.3 152-ФЗ) ведётся до получения согласия.

С 30 мая 2025 года ужесточена ответственность по 13.11 КоАП — минимальный штраф за обработку без согласия для юрлиц составляет 300 000 ₽, максимальный — 700 000 ₽. Повторное нарушение — до 1 500 000 ₽.


Элемент Требование Норма
Видимость при первом визите Не позже 5 сек после загрузки Принцип «прозрачности» ст.9 152-ФЗ
Информирование о составе cookies Какие категории, какие цели Ст.9 ч.4 152-ФЗ
Кнопка «Принять все» Активная, явно выделена ст.9 ч.1 — «активное действие»
Кнопка «Отклонить» / «Только необходимые» Равная по доступности с «Принять» Разъяснения РКН 2025
Гранулярные категории Минимум 3: тех/анал/маркет ст.9 ч.4 — «конкретность» цели
Пустые чекбоксы по умолчанию Кроме «Технических» (обязательны) ст.9 ч.1 — «активное действие»
Ссылка на политику обработки ПДн Видимая в баннере ст.18.1 152-ФЗ
Серверный лог согласия Хранение на практике не менее 3 лет Рекомендация (доказательство согласия)
Возможность отзыва Доступ к настройкам после первого выбора ст.9 ч.2 152-ФЗ

Запрещённые элементы:


Гранулярное согласие: какие категории нужны

Технические (Necessary) — обязательные для работы сайта. Согласия не требуют, отключить нельзя. Примеры: сессионная авторизация, корзина в e-commerce, anti-CSRF токен, выбор языка, тёмная тема.

Аналитические (Analytics) — счётчики посещаемости. Согласие обязательно. Примеры: Яндекс.Метрика, Google Analytics (требует отдельного уведомления о трансгран-передаче), Top.Mail.Ru, Plausible, Matomo.

Маркетинговые (Marketing) — ремаркетинг, рекламные пиксели. Согласие обязательно. Примеры: ВК-пиксель, Top.Mail.Ru target, Я.Аудитории, Google Ads tag, Meta Pixel (с особым риском — иностранный).

Внешние сервисы (Embeds) — если на сайте есть встроенные YouTube/RuTube видео, виджеты соцсетей, чаты типа Jivo/Carrot Quest. Технически они тоже cookies стороннего сервиса, требуют отдельной категории.

Для каждой категории — отдельный чекбокс. Пользователь может принять только то, на что согласен.


Ниже — production-ready сниппет на чистом JavaScript (без зависимостей), который мы используем в Комплекте документов 152-ФЗ. Замените плейсхолдеры на свои значения.

<!-- РКН-compliant cookie banner с категориями (granular consent).
     Встройте перед </body>. Не загружает аналитику/маркетинг до согласия. -->
<style>
  .rkn-cb{position:fixed;left:16px;right:16px;bottom:16px;z-index:99999;
    background:#fff;border:1px solid #e3e3e3;border-radius:12px;padding:18px 20px;
    box-shadow:0 8px 24px rgba(0,0,0,.15);font:14px/1.45 system-ui,sans-serif;
    display:none;color:#222;max-width:720px;margin:0 auto}
  .rkn-cb.show{display:block}
  .rkn-cb__top{display:flex;flex-wrap:wrap;gap:14px;align-items:flex-start}
  .rkn-cb__text{margin:0;flex:1 1 280px;min-width:0}
  .rkn-cb__btns{display:flex;flex-wrap:wrap;gap:8px}
  .rkn-cb button{padding:10px 16px;border-radius:8px;border:0;cursor:pointer;
    font:600 13px/1 system-ui,sans-serif;white-space:nowrap}
  .rkn-cb__accept{background:#1d6cf3;color:#fff}
  .rkn-cb__minimal{background:#f1f1f1;color:#222}
  .rkn-cb__toggle{background:transparent;color:#0a66c2;padding:10px 4px;text-decoration:underline}
  .rkn-cb__details{display:none;margin-top:14px;padding-top:14px;border-top:1px solid #eee}
  .rkn-cb__details.open{display:block}
</style>
<div class="rkn-cb" id="rknCookieBanner" role="dialog" aria-label="Согласие на cookies">
  <div class="rkn-cb__top">
    <p class="rkn-cb__text">Сайт использует cookies. Технические — обязательные.
      Аналитические и маркетинговые — только с вашего согласия.
      <a href="/privacy/" target="_blank">Политика обработки ПДн</a>.</p>
    <div class="rkn-cb__btns">
      <button type="button" class="rkn-cb__accept" data-action="accept-all">Принять все</button>
      <button type="button" class="rkn-cb__minimal" data-action="minimal">Только необходимые</button>
      <button type="button" class="rkn-cb__toggle" data-action="toggle">Настроить ▾</button>
    </div>
  </div>
  <div class="rkn-cb__details" id="rknCookieDetails">
    <label><input type="checkbox" id="rkn-cb-tech" checked disabled> Технические (обязательные)</label><br>
    <label><input type="checkbox" id="rkn-cb-analytics"> Аналитические (Я.Метрика и т.п.)</label><br>
    <label><input type="checkbox" id="rkn-cb-marketing"> Маркетинговые (ремаркетинг, реклама)</label><br>
    <button type="button" class="rkn-cb__accept" data-action="save">Сохранить выбор</button>
  </div>
</div>
<script>
(function(){
  var KEY='rkn_consent_v2', VERSION='2026-05-19';
  var CONSENT_LOG_URL='/api/consent-log'; // ваш endpoint для серверного лога
  var el=document.getElementById('rknCookieBanner');
  var det=document.getElementById('rknCookieDetails');
  var cbA=document.getElementById('rkn-cb-analytics');
  var cbM=document.getElementById('rkn-cb-marketing');
  var saved=null;
  try{saved=JSON.parse(localStorage.getItem(KEY)||'null')}catch(e){}
  function loadAnalytics(){ /* подключить Я.Метрику здесь */ }
  function loadMarketing(){ /* подключить пиксели здесь */ }
  function apply(c){ if(c.analytics)loadAnalytics(); if(c.marketing)loadMarketing(); }
  function save(c){
    var rec={v:VERSION,technical:true,analytics:!!c.analytics,marketing:!!c.marketing,
             at:new Date().toISOString(),ua:navigator.userAgent};
    try{localStorage.setItem(KEY,JSON.stringify(rec))}catch(e){}
    if(CONSENT_LOG_URL && navigator.sendBeacon){
      navigator.sendBeacon(CONSENT_LOG_URL, new Blob([JSON.stringify(rec)],{type:'application/json'}));
    }
    el.classList.remove('show'); apply(rec);
  }
  if(saved && saved.v===VERSION){apply(saved); return}
  setTimeout(function(){el.classList.add('show')},400);
  el.addEventListener('click',function(e){
    var act=e.target.getAttribute('data-action'); if(!act)return;
    if(act==='toggle'){det.classList.toggle('open');return}
    if(act==='accept-all'){save({analytics:true,marketing:true});return}
    if(act==='minimal'){save({analytics:false,marketing:false});return}
    if(act==='save'){save({analytics:cbA.checked,marketing:cbM.checked});return}
  });
})();
</script>

Что нужно дополнить:

  1. Endpoint для серверного лога (/api/consent-log) — простой POST-обработчик, который пишет в БД timestamp + user-agent + категории. Хранение 3 года.
  2. loadAnalytics() — код подгрузки Я.Метрики (mc.yandex.ru/metrika/tag.js).
  3. loadMarketing() — код подгрузки маркетинговых пикселей.
  4. Версия политики — поднимайте VERSION при каждом изменении политики: пользователь увидит баннер заново.

Серверный лог согласия — почему обязателен

При споре с РКН (предписание или иск субъекта ПДн) оператор должен доказать, что получил согласие конкретного пользователя в конкретный момент. localStorage браузера — не доказательство: пользователь стёр, поменял устройство, использовал инкогнито.

Доказательством является серверный лог с полями: - timestamp — точная дата и время до миллисекунд - ip_hash — хешированный IP (не сам IP — это уменьшает массив ПДн) - user_agent — браузер и устройство - consent_record — JSON с категориями согласия - policy_version — версия политики на момент согласия - consent_hash — SHA-256 от всех полей для контроля целостности

Хранить рекомендуется на практике не менее 3 лет с момента прекращения обработки. При наличии лога — спор с РКН закрывается быстро.


Что в баннере может попадать под автоматизированный мониторинг

Автоматизированный мониторинг РКН (АС МПДн), а также проверки по жалобам субъектов, могут выявлять:

  1. Запросы к Я.Метрике, GA, маркетинговым пикселям до клика по баннеру — если есть, значит cookies устанавливаются без согласия → нарушение
  2. HTML-разметку баннера — наличие checked атрибута на чекбоксах согласия → нарушение
  3. Доступность кнопки «Отклонить» — если её нет или она спрятана → нарушение
  4. Размер и контраст кнопок — если «Отклонить» в 3 раза меньше «Принять» → потенциальное нарушение (тёмный паттерн)
  5. Trackers без category-gating — если код Яндекс.Метрики выполняется до клика → нарушение

Бесплатная проверка на эти 5 пунктов автоматически


Связанные статьи