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 в
<body>. - Перенесите код Яндекс.Метрики из
<head>в обработчик события из п. 2. - Опубликуйте политику cookies по адресу
/legal/cookies. - Добавьте ссылку «Cookies» в подвал сайта.
- Перепроверьте через СайтсканРФ — детектор
cookiesдолжен закрыть нарушения «нет cookie-баннера» и «нет политики cookies».
⚠️ Дисклеймер: РКН не выпустил единый формат cookie-баннера, поэтому шаблон следует общим требованиям 152-ФЗ и практике штрафов 2024–2025 годов. Не является юридической консультацией.
Похожие материалы
Материал носит информационно-справочный характер и не является юридическим заключением.