Как устроен наш cookie-виджет — и почему он сделан именно так
Блог pdaudit · июль 2026 · ~7 минут
Мы делаем cookie-виджет с журналом согласий почти год: сначала как файлы, которые клиент ставил руками, теперь — как облачный сервис одной строкой кода. За это время накопились десятки решений, которые снаружи не видны, но именно они определяют, работает ли баннер юридически или просто украшает сайт. Эта статья — честный разбор, как всё устроено внутри и почему. Включая то, что мы даём бесплатно, и то, на чём зарабатываем.
Почему в баннере две кнопки, а не три
Классическая схема западных сервисов — три кнопки: «Принять», «Отклонить», «Настроить». Мы начинали так же. Тесты на живых сайтах показали: третья кнопка не помогает, а мешает. Посетитель, который видит три варианта, чаще вообще не взаимодействует с баннером — а «зависший» баннер это худший исход для всех: сайт не получает ни согласия, ни отказа, посетителя преследует плашка.
Поэтому в первом слое — два равнозначных действия: «Принять» и «Только необходимые». Одно касание — выбор сделан и записан. Тонкая настройка по категориям никуда не делась: она открывается по ссылке «Настройки cookies», которую виджет сам добавляет на сайт. Кто хочет разобраться — разберётся; кто не хочет — не платит за это вниманием.
Равнозначность кнопок — не эстетика. Европейские регуляторы штрафовали крупнейшие компании именно за асимметрию: когда согласиться можно одним кликом, а отказаться — пятью, такое согласие признаётся несвободным, и вся собранная база согласий обесценивается разом. Мы сделали отказ ровно таким же по размеру, весу и доступности, как согласие. Ваш баннер прошёл бы и французскую проверку — хотя достаточно российской.
Почему счётчики запускает виджет, а не ваш сайт
Главная техническая причина, по которой обычный баннер не работает юридически: он показывает уведомление, а Метрика уже запустилась из <head> и поставила свои cookies до всякого согласия. Уведомление есть — нарушение тоже есть.
Наш виджет устроен наоборот: код счётчика хранится в конфигурации виджета, и запускается только после клика «Принять». Нет согласия — нет ни одного запроса к серверам аналитики, ни одной аналитической cookie. Это легко проверить самим: откройте сайт с нашим виджетом в режиме инкогнито, вкладку Network в DevTools — до клика запросов к mc.yandex.ru не будет.
В кабинете это управляется переключателем «Счётчик подгружает виджет» — и опциональной отложенной загрузкой в 2-11 секунд. Задержка отсекает часть ботов-краулеров, которые не ждут интерактива: они дают в Метрику «мусорные» визиты и портят статистику. У живых пользователей мы советуем 8-11 секунд и смотрим по цифрам — насколько чище стала картина.
Отсюда же честное следствие, о котором мы предупреждаем каждого клиента: часть посетителей нажмёт «Только необходимые», и Метрика их не увидит. Это не дефект виджета — это и есть исполнение закона. Мы показываем в кабинете точную долю согласий, чтобы вы принимали решения на цифрах.
Отзыв согласия, который реально работает
По закону отозвать согласие должно быть так же просто, как дать (ст.9 ч.2 152-ФЗ). На большинстве сайтов «отзыв» — это фикция: даже если найти заветную ссылку, счётчик продолжает работать до конца сессии.
У нас отзыв — техническое действие, а не запись в никуда: виджет удаляет аналитические cookies на домене и перезагружает страницу, чтобы уже загруженный счётчик прекратил работу немедленно. Европейская практика 2025 года подтвердила, что это не перфекционизм: один из крупнейших онлайн-ритейлеров получил штраф в сотни миллионов именно за то, что cookies продолжали работать после отказа и отзыва.
Ссылку «Настройки cookies» виджет добавляет на сайт сам — обычно в подвал. Если структура сайта не позволяет, включается плавающая мини-ссылка: механизм отзыва обязан существовать всегда, в какой бы теме ни был сделан сайт.
Журнал согласий: зачем он и как мы защищаем данные
Если посетитель пожалуется, а регулятор спросит «докажите, что согласие было», — скриншот баннера не доказательство. Доказательство — журнал: кто, когда, на какой странице, при какой формулировке текста нажал какую кнопку.
Как устроен наш журнал:
- Каждое событие — согласие, отказ, отзыв — фиксируется на сервере с точным временем, адресом страницы и версией конфигурации баннера. Версия — важная деталь: она привязывает клик к конкретному тексту, который человек видел в тот момент.
- IP-адрес маскируется: в выгрузках последний октет обнулён. Полные адреса хранятся отдельно и выдаются только по мотивированному запросу — минимизация данных, как её требует 152-ФЗ, применённая к нам самим.
- Сервер и база — в России. Требование локализации выполняется не строчкой в договоре, а физически.
- Выгрузка подписывается. PDF для проверяющего несёт криптографическую подпись (HMAC) и QR-код: любой может открыть страницу проверки и убедиться, что документ не изменён после формирования. Запись в журнале нельзя «подрисовать» задним числом — в этом смысл журнала, который ведёт независимая сторона, а не сам владелец сайта.
- В отчёт для регулятора попадают только верифицированные события — те, что пришли из реального браузера с сайта-владельца. Мусор, боты и подделки отфильтровываются до того, как попадут в доказательную базу.
На скриншоте из кабинета видно, как это выглядит на практике: доля согласий, разбивка по дням, три формата выгрузки — CSV для собственного анализа, JSON для системной интеграции и PDF с HMAC-подписью для проверяющего.
Что будет, если pdaudit упадёт? Ничего
Честный вопрос, который задают все вдумчивые клиенты, и у нас редкий честный ответ. Код виджета раздаёт CDN Yandex Cloud — десятки узлов по России; даже при полной недоступности наших серверов посетители получают виджет с ближайшего узла. Сам виджет спроектирован так, что его отсутствие ничего не ломает: скрипт подключается асинхронно, не блокирует отрисовку, и если не загрузился — сайт работает как обычно. А события согласий, которые не смогли дойти до сервера, буферизуются в браузере посетителя и досылаются, когда связь восстановится. Наш сбой не делает вас нарушителем и не пробивает дыру в журнале.
По этой же причине виджет не влияет на скорость сайта: пара килобайт кода, отложенная отрисовка, ноль блокирующих запросов.
Про строку «pdaudit» на бесплатном тарифе — прямо
На бесплатном тарифе внизу баннера есть строка «pdaudit — cookie-виджет + журнал согласий». Отвечаем на два вопроса, которые она вызывает.
Вредит ли она SEO? Нет — и это проверяемо. Это не HTML-ссылка: тега <a> в коде страницы нет вообще, есть текст с обработчиком клика. Google в официальной документации прямо пишет, что сканирует только ссылки в элементе <a> с атрибутом href; Яндекс в справке Вебмастера — что робот учитывает только URL в атрибуте href. Нашей строки нет и в статическом HTML страницы — она появляется только в открытом баннере, после выбора посетителя исчезает вместе с ним. Откройте исходный код любой страницы (Ctrl+U) и поищите «pdaudit» — поисковый робот видит ровно то же самое: ничего. Подробнее и с цитатами первоисточников — на странице почему плашка не вредит SEO.
Зачем она нам? Это сделка. Бесплатный тариф существует за счёт того, что баннер знакомит с сервисом других владельцев сайтов. Вы получаете рабочий виджет, блокировку счётчиков до согласия и журнал — бесплатно и без срока. Мы — маленькую строку, которую заметит только тот, кому баннер понравился. Не хотите строку — тариф Старт убирает её. Такой обмен нам кажется честнее, чем урезать бесплатный виджет до декорации.
Кстати, о том, что НЕ отличается на бесплатном тарифе: блокировка счётчиков до согласия, равнозначные кнопки, механизм отзыва, ежедневная автоматическая проверка установки. Всё юридически значимое работает одинаково на любом тарифе — мы не продаём соответствие закону, мы продаём удобство, доказательства и время.
Ежедневная проверка: мы предупредим, даже если нарушение не наше
Каждый день робот проверяет каждый подключённый сайт: виджет на месте, счётчики не запускаются в обход согласия. Нашли Метрику, вставленную мимо виджета, — в кабинете появится жёлтый статус и конкретная инструкция, что удалить. Виджет также сам сообщает нам о своей работе суточным сигналом: если после обновления шаблона сайта строка кода потерялась — вы узнаете об этом от нас через часы, а не от проверяющего через месяц.
Два режима — и честность про второй
Строгий режим (opt-in) — рекомендуем и включаем по умолчанию: ничего не запускается до согласия. Режим информирования — «как у крупных порталов»: аналитика работает сразу, баннер уведомляет. Мы не делаем вид, что второго режима не существует, — но и не приукрашиваем его: требованию opt-in он не соответствует, это зона юридического риска, и выбор фиксируется в кабинете под ответственность владельца сайта. Наша работа — дать инструмент и полную картину последствий. Решение всегда ваше.
Кастомизация: цвета, позиция, тексты — под ваш сайт
Виджет должен вписываться в дизайн сайта, а не спорить с ним. В редакторе кабинета — цвет акцента для кнопки «Принять», цвет фона и текста, цвет ссылок, позиция (низ справа/слева/по центру), скругление углов, тень, тексты заголовка и кнопок отдельно для десктопа и мобильного. Справа — live-предпросмотр: видно результат прямо в момент правки, без обновления страниц клиентского сайта.
Настройки применяются на все ваши сайты через тот же скрипт: сохранили в кабинете — на всех подключённых сайтах виджет обновится в течение минуты (кеш loader 60 секунд).
Вместо вывода
Почти каждое решение в этом виджете — результат либо теста на живых сайтах, либо разбора чужого штрафа. Кнопки такие, потому что три — хуже двух. Счётчик запускаем мы, потому что иначе баннер — декорация. Отзыв перезагружает страницу, потому что за «отзыв на бумаге» уже штрафуют. Журнал подписан, потому что неподписанному журналу цена ноль. Строка pdaudit — не ссылка, потому что мы сами объясняем клиентам, как работают поисковики.
Подключить виджет можно за пять минут, бесплатно и без карты: pdaudit.ru/widget. А проверить свой текущий баннер — за одну: бесплатная проверка сайта.
pdaudit — сервис проверки сайтов на 152-ФЗ. Статья носит информационный характер и не является юридической консультацией.