Баннер cookie на WordPress: выполнить требования закона и не убить скорость

Баннер cookie на WordPress: выполнить требования закона и не убить скорость
Анатолий Кузнецов
Анатолий Кузнецов
SEO-оптимизатор с 20-летним стажем. Автор блога seo-prodvizhenie-biznesa.ru о продвижении и доработке сайтов.

Баннер cookie на WordPress ставят обычно за пять минут: находят плагин с большим числом установок, включают, видят внизу серую плашку и считают вопрос закрытым. Через месяц выясняется, что плашка тянет скрипт с чужого домена, прыгает поверх первого экрана и добавила к загрузке главной полторы секунды — а требования закона она при этом закрывает наполовину, потому что политики обработки данных на сайте так и нет.

Ниже — что в России действительно требуется по персональным данным, а что перенесено из европейской практики и вам не нужно; почему тяжёлые баннеры бьют именно по первому экрану; как собрать лёгкий вариант; и главное — что нельзя блокировать до согласия, чтобы не остаться без статистики и без нормальной индексации. В SEO с 2005 года, и переставлять чужие баннеры на сайтах клиентов приходится регулярно.

Что требует закон на практике, а что придумали

Отдельного «закона о cookie» в России нет. Есть закон о персональных данных, и всё, что вы делаете на сайте, отсчитывается от него. Практическая рамка складывается из трёх обязанностей оператора.

Первая: опубликовать документ, описывающий вашу политику в отношении обработки персональных данных, и обеспечить к нему свободный доступ. Для сайта это означает отдельную страницу и ссылку на неё в подвале и рядом с каждой формой.

Вторая: получать согласие там, где данные действительно собираются. Это форма заявки, форма подписки, обратный звонок, комментарии — всё, где посетитель вводит имя, телефон, почту. Согласие оформляется отметкой, которая по умолчанию не проставлена, с текстом-ссылкой на политику. Согласие на рекламную рассылку берётся отдельным пунктом, а не тем же самым.

Третья: подать уведомление в надзорный орган о намерении обрабатывать персональные данные. Перечень исключений за последние годы сузился до того, что подавать нужно практически всем, у кого на сайте есть форма. Это отдельная процедура, к сайту она отношения не имеет, но проверять начинают именно с неё, и штрафы за неподанное уведомление для юридических лиц измеряются сотнями тысяч рублей. Актуальные размеры смотрите в статье 13.11 Кодекса об административных правонарушениях — они пересматривались в сторону увеличения, и цифры из статей трёхлетней давности уже неверны.

А теперь то, чего в российской практике не требуется. Не требуется предварительная блокировка всех cookie до нажатия кнопки. Не требуется дробное меню категорий с переключателями «аналитика», «маркетинг», «функциональные». Не требуется всплывающее окно на весь экран, которое нельзя закрыть, не сделав выбор. Всё это — прямое перенесение европейского регламента, где действует принцип предварительного разрешения. У нас модель другая: информирование плюс возможность отказаться. Именно поэтому копировать поведение зарубежных сайтов не нужно — вы получите весь вред и ни одной дополнительной гарантии.

Три вещи, которые должны быть на сайте

Что требуется Как закрывается на сайте Типичная ошибка
Свободный доступ к политике обработки данных Отдельная страница, ссылка в подвале на всех страницах Страница есть, но закрыта от индексации или ссылка стоит только на главной
Согласие при отправке данных через форму Непроставленная отметка со ссылкой на политику, отправка блокируется без неё Отметка проставлена заранее либо согласие «считается данным по факту отправки»
Отдельное согласие на рекламные сообщения Второй пункт с отдельной отметкой Один пункт на всё сразу, потом претензии по рассылке
Уведомление о применении cookie Короткая плашка с текстом и ссылкой на политику, кнопка понимания Плашка есть, но ссылки на документ в ней нет
Возможность отказаться от аналитических cookie Ссылка на раздел политики с описанием, как это сделать Кнопка отказа, которая ничего не делает
Хранение данных из форм Заявки уходят на почту и в базу, доступ ограничен Копии заявок годами лежат в базе сайта без срока хранения

Отдельно про последнюю строку. Плагины форм по умолчанию сохраняют все отправленные заявки внутри сайта. Через два года там лежит несколько тысяч записей с именами и телефонами, и при взломе сайта утекают именно они. Если бизнес-необходимости в этом хранении нет, отключайте сохранение и оставляйте отправку на почту и в систему учёта.

Почему баннер-конструктор бьёт по первому экрану

Тяжёлый баннер вредит не весом самим по себе, а тем, куда именно этот вес попадает.

  • Внешний домен. Скрипт сервиса тянется со стороннего адреса. Браузер должен разрешить имя, установить защищённое соединение, скачать файл. Это отдельная цепочка задержек, которая прибавляется к загрузке до того, как посетитель что-то увидит.
  • Вес. Готовые решения тянут не только логику показа, но и редактор оформления, переводы на десятки языков, справочник категорий cookie и механизм журналирования согласий. В сумме это сотни килобайт скриптов и стилей ради серой плашки в двадцать слов.
  • Сдвиг раскладки. Баннер обычно рисуется скриптом уже после того, как страница показана. Экран дёргается, содержимое подпрыгивает вверх или вниз. Этот сдвиг измеряется и входит в оценку качества страницы.
  • Перекрытие главного элемента. Если баннер выводится по центру и затемняет фон, он закрывает именно то, ради чего человек пришёл. На мобильном экране плашка на треть высоты — это половина первого экрана.
  • Журналирование согласий. Часть сервисов на каждое нажатие отправляет запрос к себе. Для посетителя это ещё одно обращение к внешнему домену в момент, когда он и так ждёт.

Проверить свой баннер просто: откройте вкладку «Сеть» в инструментах разработчика, отфильтруйте запросы по домену, отличному от вашего, и посмотрите, сколько их и сколько они весят. Затем во вкладке производительности посмотрите на сдвиг раскладки. Если после появления плашки содержимое поехало, у вас проблема, которую видит и робот. Как эти величины связаны с ранжированием, разобрано в материале Core Web Vitals: скрытая причина, почему ваш сайт не растёт в позициях.

Что нельзя блокировать до согласия

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

Счётчик аналитики. Если он не запускается до нажатия кнопки, вы теряете всех, кто ушёл раньше, и всех, кто плашку просто игнорирует. Доля таких посетителей огромна. В отчётах появляется провал, источники трафика перестают сходиться, а решения вы принимаете по данным, где нет половины аудитории. При этом никакого юридического выигрыша нет: в российской модели информирования запуск счётчика до нажатия кнопки не нарушает закон, если на сайте есть политика и уведомление.

Карты, видео и виджеты чата. Блокировка встраиваемых элементов до согласия ломает страницу контактов: вместо карты пустой прямоугольник или серая заглушка. Посетитель считает, что сайт не работает.

Содержимое страницы. Отдельный случай, встречающийся реже, но самый разрушительный: сайт отдаёт основное содержимое только после нажатия кнопки. Робот кнопок не нажимает. Он получает страницу с плашкой и без текста, и именно её кладёт в индекс. Внешне сайт работает, а из поиска исчезает.

Собственные технические cookie. Куки авторизации, корзины, выбранного города, защиты форм от подделки запросов относятся к необходимым для работы сайта. Блокировать их нельзя ни по закону, ни по здравому смыслу — без них сайт перестаёт функционировать.

Если вы уже видели необъяснимый провал в статистике после установки баннера, начинать проверку стоит именно здесь. Отдельная тема — сам счётчик как источник задержек, я писал об этом в статье Яндекс Метрика — тормозит скорость сайта.

Лёгкий баннер: из чего он состоит

Работающий вариант укладывается в полтора-два килобайта и не делает ни одного внешнего запроса. Устроен он так.

  1. Разметка приходит вместе со страницей. Плашка есть в HTML сразу, а не вставляется скриптом. Тогда браузер знает о ней при первой раскладке и ничего не дёргается.
  2. Скрытие через атрибут, а не через удаление. Элемент скрывается штатным атрибутом скрытия, показывается снятием этого атрибута. Никакой перестройки дерева.
  3. Фиксированное положение внизу экрана. Не по центру, не поверх содержимого, высотой в одну-две строки. Первый экран остаётся нетронутым.
  4. Стили внутри страницы. Полтора десятка строк, вписанных в разметку, а не отдельный файл. Отдельный файл здесь — лишний запрос ради пятисот байт.
  5. Флаг согласия в хранилище браузера. Нажали кнопку — записали отметку, при следующем визите плашка не показывается. Проверка делается на стороне браузера, а не на сервере, и это принципиально: страница при этом остаётся одинаковой для всех и спокойно кэшируется целиком.
  6. Текст и ссылка. Одна фраза о том, что сайт использует cookie, ссылка на политику обработки данных и кнопка. Больше ничего.

Пятый пункт — тот, на котором ломаются самодельные решения. Если решение о показе плашки принимает сервер, читая куку, то страница становится разной для разных посетителей, а полностраничный кэш об этом не знает и отдаёт всем одну и ту же копию. Итог: одни видят плашку после согласия, другие не видят её никогда. Проверять надо в приватном окне и обязательно после сброса кэша.

Три варианта реализации и чем они отличаются

Критерий Внешний сервис согласий Лёгкий плагин Свой блок в шаблоне
Внешние запросы От двух до пяти к чужому домену Обычно нет Нет
Вес Сотни килобайт Единицы килобайт Полтора-два килобайта
Влияние на сдвиг раскладки Высокое, плашка появляется после отрисовки Среднее, зависит от реализации Нулевое при разметке в HTML
Журнал согласий Есть, с датами и версиями текста Обычно нет Нет
Кому подходит Работа с зарубежной аудиторией, требования регламента ЕС Сайт без разработчика под рукой Российская аудитория, важна скорость
Риск сломать кэш Низкий, всё решается в браузере Средний, часть плагинов решает на сервере Низкий при проверке флага в браузере
Стоимость поддержки Подписка плюс обновления Обновления плагина Разовая работа, дальше не трогается

Вывод из таблицы простой. Внешний сервис оправдан только тогда, когда у вас реально есть европейские посетители и нужен журнал согласий с фиксацией версий текста. Для сайта, работающего по России, это дорогая по скорости избыточность. Если ставить плагин, выбирайте лёгкий и обязательно проверяйте, где он принимает решение о показе — на сервере или в браузере. Подборка того, какие плагины вообще имеет смысл держать на сайте, есть в материале Лучшие SEO плагины для wordpress.

Даже правильный по составу баннер ломает сайт, если не проверить три вещи.

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

Мобильное перекрытие. Плашка, закрывающая существенную часть экрана телефона сразу при входе, попадает в категорию навязчивых перекрытий. Это отдельно оцениваемый признак качества страницы. Держите высоту в пределах одной-двух строк и не затемняйте фон.

Ссылка на политику. Она должна вести на существующую страницу, открытую для индексации и доступную с любой страницы сайта. Закрывать политику от роботов не нужно: это обычная информационная страница, и её наличие в индексе играет в вашу пользу при оценке надёжности сайта.

Ещё одна деталь, о которой забывают: плашка не должна выводиться внутри содержимого записи. Если её вставили через редактор в шаблон записи, она попадёт в фрагменты, которые робот берёт для сниппета, и вы увидите в выдаче описание, начинающееся со слов про cookie. Место плашки — в подвале шаблона, за пределами блока содержимого. Как в целом устроено продвижение сайта на этой платформе, описано в разборе Как продвигать сайт на WordPress.

Когда баннер не нужен

Случаи, когда установка плашки не даёт ничего, кроме потери скорости.

  • Сайт-визитка без форм, без аналитики и без встроенных виджетов. Если вы не собираете никаких данных, нечего и уведомлять. Достаточно страницы с политикой, если формы появятся позже.
  • Внутренний сервис за авторизацией. Согласие берётся один раз при регистрации, отдельная плашка на каждой странице избыточна.
  • Сайт, у которого нет опубликованной политики. Здесь баннер не то что не нужен — он вреден, потому что создаёт видимость соблюдения требований при отсутствии главного документа. Порядок работ обратный: сначала политика и уведомление, потом плашка.

И общее замечание. Плашка про cookie — гигиена, а не защита. Она снижает риск претензий по одному узкому вопросу и не заменяет ни политику, ни отметку согласия в форме, ни поданное уведомление. Ставить её раньше, чем закрыты эти три пункта, — тратить скорость сайта впустую.

Частые вопросы

Нужно ли согласие на аналитические счётчики? Прямого требования получать отдельное согласие на установку счётчика в российском законодательстве нет. Практика снижения риска такая: описать в политике, какие сервисы аналитики используются и зачем, и показать уведомление о применении cookie со ссылкой на этот раздел. Блокировать счётчик до нажатия кнопки не нужно.

Достаточно ли просто ссылки на политику в подвале? Для самой политики — да, при условии, что ссылка есть на всех страницах и страница открыта. Для форм — нет: там нужна отдельная отметка согласия рядом с кнопкой отправки, потому что именно в этот момент данные передаются вам.

Можно ли считать согласием дальнейшее пользование сайтом? Для уведомления о cookie такая формулировка распространена и риск снижает. Для персональных данных из формы — нет. Там нужно активное действие пользователя: он сам ставит отметку, и она не проставлена заранее.

Плашка портит поведенческие показатели? Портит, если перекрывает содержимое. Полноэкранное окно с затемнением увеличивает долю тех, кто уходит сразу. Узкая полоса внизу на поведение практически не влияет. Разница между этими двумя вариантами по отказам заметна даже на небольшом трафике — сравните сами, включив показ полосой вместо окна.

Что делать, если сайт грузится медленно и без баннера? Тогда баннер — не ваша главная проблема, но и утяжелять на сотни килобайт нечего. Разберитесь сначала с картинками, шрифтами и количеством подключаемых файлов, порядок действий описан в материале Как повысить скорость загрузки сайта, а плашку сразу ставьте в лёгком варианте.

Нужно ли фиксировать согласия в журнале? Для форм — да, и большинство плагинов форм сохраняет отметку времени и текст согласия вместе с заявкой. Для cookie на российском сайте отдельный журнал согласий обычно избыточен и как раз он делает готовые решения тяжёлыми.

Если непонятно, что на вашем сайте уже сделано, а чего нет, начните с технической проверки: она показывает и лишний вес на первом экране, и страницы, закрытые от индексации по недосмотру, и битые ссылки на документы. Такую проверку я делаю в формате бесплатного аудита сайта, а исправление найденного входит в доработку сайта. Условия и порядок работы — на странице продвижение сайта в Яндексе: веду проекты лично, вы общаетесь со мной напрямую, а не с менеджером.

Коротко

  • Отдельного закона о cookie в России нет: обязанности идут от закона о персональных данных — политика, согласие в формах, уведомление надзорного органа.
  • Предварительная блокировка cookie до нажатия кнопки — европейская модель, у нас она не требуется и стоит вам половины статистики.
  • Тяжёлые баннеры бьют не весом, а внешними запросами, сдвигом раскладки и перекрытием первого экрана.
  • Рабочий вариант — полтора-два килобайта, разметка сразу в HTML, показ решается в браузере, плашка внизу высотой в одну-две строки.
  • Никогда не блокируйте до согласия содержимое страницы: робот кнопок не нажимает и положит в индекс пустую страницу.
  • Порядок работ: политика и уведомление сначала, плашка потом; иначе это видимость соблюдения при отсутствии главного.

Увеличьте позиции и продажи вашего сайта

Профессиональное SEO-продвижение с гарантией результата. Выберите подходящую услугу:

Анатолий Кузнецов — SEO-оптимизатор

Остались вопросы по продвижению?

Меня зовут Анатолий Кузнецов, я SEO-оптимизатор с 20-летним стажем. Разберу ваш сайт, отвечу на вопросы и подскажу, что улучшить для роста позиций в Яндексе и Google.

Связаться со мной →

Комментарии

Иринарх Сумароков

Поставили плагин с блокировкой до согласия. Через неделю в статистике посещаемость упала почти вдвое, хотя заявки шли как обычно. Это оно?

Анатолий Кузнецов автор

Почти наверняка оно, и признак вы назвали сами: заявки на месте, а посетители пропали. Значит, люди приходят, но счётчик их не считает, потому что скрипт не запускается до нажатия кнопки. Проверяется за минуту: откройте сайт в приватном окне, не трогая плашку, и посмотрите во вкладке «Сеть», уходит ли запрос счётчика. Не уходит — причина найдена. Отключайте предварительную блокировку в настройках плагина, обычно это переключатель с названием про блокировку скриптов до согласия. И имейте в виду неприятное следствие: неделя испорченных данных останется в отчётах навсегда, при сравнении периодов год к году она будет вылезать провалом. Отметьте себе эту дату в примечаниях, чтобы через год не искать несуществующую сезонность.

Исидор Плетнёв

А что скажете про формулировку «продолжая пользоваться сайтом, вы соглашаетесь»? Юрист говорит, что этого мало.

Анатолий Кузнецов автор

Он прав, но не для всего сразу. Разделите два случая. Уведомление о применении cookie — это информирование, и такая формулировка там распространена и риск снижает, особенно если рядом стоит ссылка на политику и кнопка подтверждения. А вот для персональных данных, которые человек вводит в форму, эта фраза не работает совсем: закон требует конкретного и осознанного действия. Значит, у формы должна быть отдельная отметка, не проставленная заранее, с текстом про согласие на обработку и ссылкой на документ, и отправка без неё не должна проходить. Плюс отдельная отметка на рекламные сообщения, если вы собираетесь что-то рассылать. Одним пунктом на всё сразу закрывать нельзя — именно на этом чаще всего и возникают претензии.

Каллистрат Ерофеев

Проверил свой баннер по совету из статьи. Три запроса на чужой домен и 240 килобайт скриптов ради одной строки текста. Снёс, написал двадцать строк своими руками.

Капитолина Сысоева

У нас плашка исчезает у одних посетителей и висит вечно у других. Сайт на кэшировании. Похоже на то, о чём вы пишете в пятом пункте?

Анатолий Кузнецов автор

Ровно оно. Ваш плагин решает, показывать плашку или нет, на стороне сервера: читает куку и в зависимости от неё отдаёт разный HTML. Полностраничный кэш этого не различает, он сохраняет первую сгенерированную версию и раздаёт её всем подряд. Кому досталась копия «согласие уже дано» — тот плашки не увидит никогда, даже при первом визите. Кому досталась обратная — увидит её всегда, сколько ни нажимай. Лечится двумя способами. Простой: найти в настройках плагина режим обработки на стороне браузера и включить его. Надёжный: заменить плагин блоком в подвале шаблона, где разметка одинакова для всех, а скрытие делает короткий скрипт по флагу в хранилище браузера. Тогда страница остаётся одной для всех и кэшируется без оговорок.

Кирьян Шабалин

Добавлю про формы. У нас в базе накопилось четыре года заявок с телефонами. Прочитал раздел, отключил сохранение и почистил старое. Спасибо, про это нигде не пишут.

Клавдия Ястребова

Скажите, а закрывать политику обработки данных от индексации нужно? Мне на прошлом проекте её закрыли в robots.

Анатолий Кузнецов автор

Не нужно, наоборот — вредно. Закон требует свободного доступа к документу, а закрытие в robots работает против этого: если страницу не обходит робот, она не появится в поиске и по прямому запросу с названием вашей компании её не найдут. Плюс наличие таких страниц в индексе — один из признаков, по которым оценивается основательность сайта: реквизиты, политика, условия, контакты. Их закрывают обычно по инерции, вместе с корзиной и личным кабинетом, не разбираясь. Единственное, что стоит сделать, — не выводить политику в блоках перелинковки и не давать на неё ссылку из каждой статьи: страница служебная, вес на неё гнать незачем. Ссылки в подвале и рядом с формами достаточно.

Лаврентий Мещеряков

Не хватает раздела про интернет-магазины. У нас плашка перекрывала кнопку добавления в корзину на телефонах, обнаружили случайно по записям визитов.

Ларион Кожевин

Подтверждаю про робота и пустую страницу. Знакомые включили блокировку содержимого до согласия, через месяц сайт вылетел почти весь. Восстанавливали долго.

Лукерья Бекетова

А если у нас есть посетители из Европы, пусть и немного? Обязательно ставить полноценный сервис согласий?

Анатолий Кузнецов автор

Смотрите не на факт визитов, а на то, направлена ли на них ваша деятельность: есть ли версия сайта на их языке, принимаете ли оплату в их валюте, доставляете ли туда. Если ничего этого нет и люди зашли случайно, полноценный сервис согласий с журналом и категориями вам избыточен. Если же вы целенаправленно работаете на европейский рынок, тогда да, и там нужна как раз предварительная блокировка, дробные категории и фиксация версий текста — то есть всё то, от чего я отговариваю на чисто российском сайте. Компромисс, который работает у нескольких проектов: лёгкая плашка для всех, а тяжёлый механизм подключается только при определении европейского посетителя. Реализуется это средствами сети доставки контента или простой проверкой на стороне сервера, и российская аудитория, которая даёт основной трафик, лишнего веса не получает.

Макарий Тулупов

Вопрос по таблице: почему свой блок в шаблоне отмечен как низкий риск сломать кэш, а лёгкий плагин как средний?

Мамелфа Скуратова

Потому что в своём блоке вы сами решаете, где проверять флаг, и делаете это в браузере. А плагин может проверять на сервере, и вы об этом узнаете, только когда плашка начнёт вести себя странно. У нас было именно так.

Марфа Голубцова

Полезно про порядок работ. У нас плашку поставили первой, а политику так и не написали. Получается, полгода изображали соблюдение требований.

Прокрутить вверх