Cookie и согласие посетителя
Конструктор куки-баннера
Четыре вида баннера, свои ссылки на политику и согласие, Яндекс.Метрика и Google Analytics после согласия посетителя. Соберите баннер ниже и скопируйте готовый код.
Вид баннера
Текст и кнопки
Ссылки на ваши документы
Пустые адреса в код не попадут. Ссылки нужны на ваши документы: оператор данных — вы.
Счётчики после согласия
Если счётчик уже стоит в шапке сайта, уберите его оттуда: иначе он загрузится до согласия.
В предпросмотре кнопки работают, но выбор не запоминается: баннер появляется снова при каждом изменении.
<!-- Куки-баннер с woove.ru/cookie-banner. Код ваш: меняйте как угодно, к нашим серверам он не обращается. -->
<style>
#wvc{position:fixed;left:0;right:0;bottom:0;z-index:99998;font:14px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif}
#wvc *{box-sizing:border-box}
#wvc .wvc-b{background:#111111;color:#ffffff;padding:16px 18px;display:flex;flex-wrap:wrap;gap:14px;align-items:center;justify-content:center}
#wvc .wvc-b{border-radius:10px 10px 0 0}
#wvc p{margin:0;max-width:640px}
#wvc a{color:inherit;text-decoration:underline;text-underline-offset:2px}
#wvc .wvc-l{opacity:.75;font-size:12.5px;margin-top:8px;display:flex;flex-wrap:wrap;gap:12px}
#wvc .wvc-l{margin-top:0}
#wvc .wvc-btns{display:flex;gap:8px;flex-wrap:wrap;margin-left:auto}
#wvc button{font:inherit;font-weight:600;cursor:pointer;border-radius:8px;padding:9px 16px;border:1px solid #ffffff;background:#ffffff;color:#111111}
#wvc button.wvc-g{background:transparent;color:#ffffff;border-color:currentColor;opacity:.85;font-weight:500}
#wvc button:focus-visible{outline:2px solid #ffffff;outline-offset:2px}
@media (max-width:560px){#wvc .wvc-b{flex-direction:column;align-items:stretch}#wvc .wvc-btns{margin-left:0}#wvc button{flex:1}}
@media (prefers-reduced-motion:no-preference){#wvc .wvc-b{animation:wvc-in .22s ease-out}}
@keyframes wvc-in{from{opacity:0;transform:translateY(10px)}}
</style>
<script>
(function(){
var C={v:'bar',text:'Мы используем файлы cookie, чтобы сайт работал и чтобы понимать, какие страницы вам полезны.',accept:'Принять',decline:'Только необходимые',pos:'right',days:365,links:[{t:'Политика обработки данных',u:'/privacy'},{t:'Согласие на обработку',u:'/consent'}],ym:'12345678',wv:false,ga:null,dom:null};
var K='wv_consent';
function read(){try{var m=document.cookie.match(/(?:^|; )wv_consent=([^;]*)/);
return m?JSON.parse(decodeURIComponent(m[1])):null}catch(e){return null}}
function dom(){return C.dom&&("."+location.hostname).slice(-C.dom.length)===C.dom?";domain="+C.dom:""}
function save(o){o.t=Math.floor(Date.now()/1000);try{document.cookie=K+"="+encodeURIComponent(JSON.stringify(o))
+";path=/;max-age="+(C.days*86400)+";samesite=lax"+dom()+(location.protocol==="https:"?";secure":"")}catch(e){}}
function counters(o){
if(!o||!o.an)return;
if(C.ym&&!window["yaCounter"+C.ym]){
(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?id="+C.ym,"ym");
ym(C.ym,"init",{ssr:true,webvisor:C.wv,clickmap:true,ecommerce:"dataLayer",referrer:document.referrer,url:location.href,accurateTrackBounce:true,trackLinks:true});
}
if(C.ga&&!window.gtag){
var s=document.createElement("script");s.async=1;
s.src="https://www.googletagmanager.com/gtag/js?id="+C.ga;document.head.appendChild(s);
window.dataLayer=window.dataLayer||[];window.gtag=function(){dataLayer.push(arguments)};
gtag("js",new Date());gtag("config",C.ga);
}
}
function done(o){save(o);counters(o);var n=document.getElementById("wvc");if(n)n.remove();
try{window.dispatchEvent(new CustomEvent("wv-consent",{detail:o}))}catch(e){}}
function esc(s){var d=document.createElement("div");d.textContent=s;return d.innerHTML}
function links(){return C.links.length?"<div class=\"wvc-l\">"+C.links.map(function(l){
return "<a href=\""+l.u+"\" target=\"_blank\" rel=\"noopener\">"+esc(l.t)+"</a>"}).join("")+"</div>":""}
function show(){
var w=document.createElement("div");w.id="wvc";
w.setAttribute("role",C.v==="modal"?"dialog":"region");
w.setAttribute("aria-label","Использование файлов cookie");
if(C.v==="modal")w.setAttribute("aria-modal","true");
var h="<div class=\"wvc-b\"><p>"+esc(C.text)+"</p>"+links();
if(C.v==="modal"){
h+=C.cat.map(function(c){var on=c[0]==="ne";
return "<label class=\"wvc-c\"><input type=\"checkbox\" data-k=\""+c[0]+"\""+(on?" checked disabled":"")
+"><span><b>"+esc(c[1])+"</b><span>"+esc(c[2])+"</span></span></label>"}).join("");
h+="<div class=\"wvc-btns\"><button data-a=\"all\">"+esc(C.accept)+"</button>"
+"<button class=\"wvc-g\" data-a=\"save\">"+esc(C.save)+"</button>"
+(C.decline?"<button class=\"wvc-g\" data-a=\"no\">"+esc(C.decline)+"</button>":"")+"</div>";
}else{
h+="<div class=\"wvc-btns\"><button data-a=\"all\">"+esc(C.accept)+"</button>"
+(C.decline?"<button class=\"wvc-g\" data-a=\"no\">"+esc(C.decline)+"</button>":"")+"</div>";
}
w.innerHTML=h+"</div>";document.body.appendChild(w);
var btn=w.querySelector("button");if(btn&&C.v==="modal")btn.focus();
w.addEventListener("click",function(e){
var b=e.target.closest("button[data-a]");if(!b)return;
var a=b.getAttribute("data-a");
if(a==="all")return done({an:1,mk:1});
if(a==="no")return done({an:0,mk:0});
var o={an:0,mk:0};w.querySelectorAll("input[data-k]").forEach(function(i){
if(i.getAttribute("data-k")!=="ne")o[i.getAttribute("data-k")]=i.checked?1:0});done(o)});
if(C.v==="modal")document.addEventListener("keydown",function k(e){
if(e.key==="Escape"&&document.getElementById("wvc")){done({an:0,mk:0});document.removeEventListener("keydown",k)}});
}
window.wvCookieReset=function(){try{document.cookie=K+"=;path=/;max-age=0"+dom()}catch(e){}
if(!document.getElementById("wvc"))show()};
var got=read();
if(got)counters(got);
else if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",show);else show();
})();
</script>
Один блок со стилями и скриптом, без библиотек и запросов к нашим серверам.
Куда вставлять код
| Тильда | Настройки сайта → Ещё → «HTML-код для вставки внутрь BODY», тогда баннер появится на всех страницах. В блок T123 код класть не нужно: он работает только на одной странице. |
| Обычный сайт | Перед закрывающим тегом body, в общий шаблон страницы. |
| CMS | В шаблон подвала темы или через плагин для вставки кода, чтобы он попал на все страницы. |
- Выберите вид. Полоса снизу, карточка в углу, окно с настройками или тонкая плашка сверху.
- Вставьте ссылки на свои документы. Политика обработки персональных данных и согласие, которые лежат у вас на сайте.
- Впишите счётчики. Номер Яндекс.Метрики и идентификатор Google Analytics. Их код баннер вставит после согласия.
- Скопируйте код. Он собирается на этой странице, ничего не скачивается и никуда не отправляется.
- Вставьте на сайт. В Тильде: «Настройки сайта → Ещё → HTML-код внутрь BODY». На обычном сайте — перед закрывающим тегом body.
Что баннер делает
Куки-баннер (cookie banner, плашка о файлах cookie) — это уведомление, которое запрашивает разрешение до того, как сайт поставит необязательные cookie. Наш баннер показывает ваш текст со ссылками на ваши документы и держит счётчики выключенными, пока посетитель не нажал «Принять». Выбор записывается в cookie на его устройстве вместе с датой.
Чего баннер не делает: не заменяет политику обработки персональных данных и согласие, не собирает согласие в формах (там нужна отдельная галочка) и не блокирует сторонние скрипты, вставленные в шапку вручную. Соответствие 152-ФЗ складывается из ваших документов и порядка работы с данными.
Какие cookie у вас стоят и какие из них требуют согласия — в разборе про виды cookie.
Как это сделано у нас: политика обработки данных · согласие на обработку · согласие в формах и ботах
Частые вопросы про куки-баннер
Это бесплатно?
Да, и без регистрации. Код после сборки ваш: его можно править, переносить на другие сайты и отдавать клиентам. К нашим серверам он не обращается.
Баннер делает сайт соответствующим закону?
Нет. Баннер предупреждает про cookie и не даёт счётчикам загрузиться до согласия. Политику обработки персональных данных и согласие вы пишете и размещаете сами, а согласие в формах остаётся отдельной галочкой у формы.
Где хранится выбор посетителя?
В cookie wv_consent на его устройстве: дата выбора и то, на что человек согласился. Срок хранения задаётся в конструкторе, запросы на сторону не уходят.
Что будет со счётчиками, если человек отказался?
Ничего не загрузится: ни tag.js Метрики, ни gtag Google. Проверить можно во вкладке «Сеть» инструментов разработчика: запросов к mc.yandex.ru и googletagmanager.com не будет.
Как дать посетителю передумать?
В коде есть функция wvCookieReset(). Поставьте в подвале сайта ссылку с onclick="wvCookieReset()", и баннер откроется снова.
Работает ли в Тильде?
Да, и на любом другом сайте: это обычные style и script без библиотек. В Тильде код кладут в «Настройки сайта → Ещё → HTML-код для вставки внутрь BODY», чтобы баннер был на всех страницах.
Чем ещё занимается Woove
Конструктор сайтов Woove Site, интеграции форм Woove Connect, Woove Bots и продажа билетов. Woove CRM и куки-баннер бесплатны.