Шаблон152-ФЗ ст. 18.1

Cookie-баннер и политика в отношении cookies

Готовый cookie-баннер с двумя кнопками «Принять / Отклонить», текст политики cookies и логика блокировки аналитических скриптов до согласия. С 2025 г. РКН требует явного предварительного согласия.

Готово к работе

Скопируйте в буфер или скачайте файл, замените поля {...} на ваши данные и опубликуйте на сайте.

Когда нужно: на любом сайте, где стоит Яндекс.Метрика, Google Analytics, рекламные пиксели (VK, Mail.ru, Top.Mail), системы ремаркетинга или любые сторонние скрипты, читающие cookies. С 2025 г. РКН требует явного предварительного согласия до того, как скрипт начал работать.

Как пользоваться: скопируйте код баннера ниже, вставьте в <body>. Аналитические/маркетинговые скрипты подключайте только после согласия — пример внизу.


1. HTML/CSS/JS баннер «Принять / Отклонить»

Готовый код для вставки в любой сайт. Вставьте в <body> сразу после открывающего тега или перед </body>. Стили подстройте под ваш дизайн.

<div id="cookie-banner" class="cookie-banner" hidden role="dialog" aria-labelledby="cookie-banner-title">
  <div class="cookie-banner__content">
    <h2 id="cookie-banner-title" class="cookie-banner__title">Мы используем файлы cookie</h2>
    <p class="cookie-banner__text">
      Сайт использует cookie для аналитики и улучшения работы. Аналитические
      и маркетинговые cookie устанавливаются только с вашего согласия.
      Подробнее — в <a href="/legal/cookies">Политике в отношении cookies</a>.
    </p>
    <div class="cookie-banner__actions">
      <button type="button" id="cookie-accept" class="cookie-banner__btn cookie-banner__btn--primary">
        Принять все
      </button>
      <button type="button" id="cookie-decline" class="cookie-banner__btn">
        Отклонить
      </button>
      <a href="/legal/cookies" class="cookie-banner__btn cookie-banner__btn--ghost">
        Настроить
      </a>
    </div>
  </div>
</div>

<style>
  .cookie-banner {
    position: fixed;
    inset: auto 16px 16px 16px;
    max-width: 720px;
    margin: 0 auto;
    padding: 20px;
    background: #1a1a1a;
    color: #fafafa;
    border: 1px solid #262626;
    border-radius: 12px;
    box-shadow: 0 30px 80px -20px rgba(0,0,0,0.5);
    z-index: 9999;
    font-family: system-ui, -apple-system, sans-serif;
  }
  .cookie-banner__title { margin: 0 0 8px; font-size: 16px; font-weight: 600; }
  .cookie-banner__text { margin: 0 0 16px; font-size: 13px; line-height: 1.6; color: rgba(250,250,250,0.85); }
  .cookie-banner__text a { color: #c96a4a; text-decoration: underline; }
  .cookie-banner__actions { display: flex; flex-wrap: wrap; gap: 8px; }
  .cookie-banner__btn {
    height: 38px;
    padding: 0 16px;
    border-radius: 8px;
    background: #262626;
    color: #fafafa;
    font-size: 13px;
    font-weight: 500;
    border: 1px solid #404040;
    cursor: pointer;
    transition: background 0.15s;
  }
  .cookie-banner__btn:hover { background: #333; }
  .cookie-banner__btn--primary { background: #c96a4a; border-color: #c96a4a; }
  .cookie-banner__btn--primary:hover { background: #b55a3d; }
  .cookie-banner__btn--ghost { background: transparent; border-color: transparent; }
</style>

<script>
  (function () {
    const STORAGE_KEY = 'cookie_consent_v1';
    const banner = document.getElementById('cookie-banner');
    const acceptBtn = document.getElementById('cookie-accept');
    const declineBtn = document.getElementById('cookie-decline');

    function setConsent(value) {
      localStorage.setItem(STORAGE_KEY, JSON.stringify({
        value: value,
        at: new Date().toISOString(),
        version: '1.0',
      }));
      banner.hidden = true;
      // Сообщаем странице — слушайте `cookie:consent` для подключения скриптов.
      window.dispatchEvent(new CustomEvent('cookie:consent', { detail: { value: value } }));
    }

    const stored = localStorage.getItem(STORAGE_KEY);
    if (!stored) {
      banner.hidden = false;
    } else {
      try {
        const parsed = JSON.parse(stored);
        if (parsed && (parsed.value === 'accepted' || parsed.value === 'declined')) {
          window.dispatchEvent(new CustomEvent('cookie:consent', { detail: { value: parsed.value } }));
        } else {
          banner.hidden = false;
        }
      } catch {
        banner.hidden = false;
      }
    }

    acceptBtn.addEventListener('click', function () { setConsent('accepted'); });
    declineBtn.addEventListener('click', function () { setConsent('declined'); });
  })();
</script>

2. Подключение Яндекс.Метрики после согласия

Главная ошибка — ставить счётчик в <head>, чтобы он работал сразу. Это нарушение. Правильно — слушать событие cookie:consent и подключать скрипт только при accepted.

<script>
  // Слушаем событие из cookie-баннера. Метрика подключается ТОЛЬКО после согласия.
  window.addEventListener('cookie:consent', function (e) {
    if (e.detail.value !== 'accepted') return;
    if (window.ym) return; // защита от двойного подключения

    (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({METRIKA_ID}, "init", {
      clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true
    });
  });
</script>

Замените {METRIKA_ID} на ваш ID счётчика Яндекс.Метрики (вида 12345678).

3. Текст «Политики в отношении cookies»

Опубликуйте по адресу /legal/cookies. Это отдельный документ от общей политики ПД (по ст. 18.1 ч. 2 152-ФЗ оператор обязан раскрыть категории cookies, цели и сроки хранения).

Политика в отношении файлов cookies

Утверждена: {дата_утверждения}
Оператор: {полное_наименование_компании_или_ИП}, ИНН {ИНН}, {юр_адрес}.

1. Что такое cookies

Cookies — небольшие текстовые файлы, которые сайт сохраняет в браузере
пользователя для корректной работы и сбора статистики.

2. Категории используемых cookies

2.1. Технические cookies (всегда активны):
   — сессионные cookies для работы форм и личного кабинета;
   — настройки сайта (тема, язык, регион);
   — защита от ботов (CSRF-токены).
   Срок хранения: до закрытия браузера или 30 дней.
   Правовое основание: исполнение договора, ч. 2 ст. 6 152-ФЗ.

2.2. Аналитические cookies (только после согласия):
   — Яндекс.Метрика — статистика посещений, поведение пользователей;
   — { Google Analytics / иные аналитические системы — если используете }.
   Срок хранения: до 12 месяцев.
   Правовое основание: согласие субъекта, ч. 1 ст. 9 152-ФЗ.

2.3. Маркетинговые cookies (только после согласия):
   — { рекламные пиксели VK, Mail.ru, myTarget — если используете };
   — ремаркетинг.
   Срок хранения: до 12 месяцев.
   Правовое основание: согласие субъекта, ч. 1 ст. 9 152-ФЗ.

3. Как управлять согласием

При первом посещении сайта показывается баннер с кнопками «Принять» и
«Отклонить». Аналитические и маркетинговые cookies устанавливаются только
после нажатия «Принять».

Отозвать согласие можно в любой момент:
   — очистив cookies в настройках браузера;
   — направив запрос на email Оператора: {email_оператора}.

4. Передача данных

Анонимизированные данные о посещениях передаются Яндекс.Метрике
(ООО «Яндекс», РФ). Передача за пределы РФ не осуществляется.

5. Контакты

По всем вопросам обработки cookies: {email_оператора}

4. Чек-лист «всё правильно»

  • Баннер появляется при первом посещении.
  • Кнопка «Принять» не предвыбрана (нельзя ставить галочку «согласен» по умолчанию).
  • Есть отдельная кнопка «Отклонить» — без неё баннер недействителен по 152-ФЗ.
  • Аналитические/маркетинговые скрипты подключаются только после «Принять».
  • Если пользователь нажал «Отклонить» — Яндекс.Метрика и пиксели не загружаются вовсе.
  • Решение пользователя сохраняется (localStorage) — баннер не возвращается.
  • Есть страница /legal/cookies с полной политикой.
  • В подвале сайта — ссылка «Cookies» рядом со ссылками на «Политику» и «Оферту».

5. Что делать после публикации

  1. Вставьте баннер из п. 1 в <body>.
  2. Перенесите код Яндекс.Метрики из <head> в обработчик события из п. 2.
  3. Опубликуйте политику cookies по адресу /legal/cookies.
  4. Добавьте ссылку «Cookies» в подвал сайта.
  5. Перепроверьте через СайтсканРФ — детектор cookies должен закрыть нарушения «нет cookie-баннера» и «нет политики cookies».

⚠️ Дисклеймер: РКН не выпустил единый формат cookie-баннера, поэтому шаблон следует общим требованиям 152-ФЗ и практике штрафов 2024–2025 годов. Не является юридической консультацией.

Похожие материалы

Материал носит информационно-справочный характер и не является юридическим заключением.