Установка
MevvLegal требует WordPress 6.0 или новее и PHP 8.1 или новее. Других требований нет, внешних библиотек тоже.
- Загрузите и активируйте плагин. При активации создаётся таблица для анонимного журнала согласий.
- Откройте MevvLegal → Мастер настройки и пройдите пять шагов: данные вашей организации, категории и текст баннера, сканирование фронтенда, предложения по удержанию из этого сканирования и юридические страницы.
- Проверьте результат в разделе Аудит фронтенда. Число, к которому вы стремитесь, — «сторонних скриптов, работающих без согласия: 0».
Две необязательные интеграции: плагин WP Consent API, если вы пользуетесь плагинами, которые его понимают, и WPML или Polylang для перевода заголовка и текста баннера.
Pro — это отдельный плагин, устанавливаемый рядом с бесплатным, и он объявляет бесплатный плагин обязательным требованием. Без Pro MevvLegal вообще никогда не обращается к нашим серверам.
Как это работает
Большинство баннеров cookie задают вопрос, а затем загружают отслеживающий код независимо от ответа. Посетитель сказал «нет» — и его всё равно отследили.
- До согласия каждый отслеживающий скрипт на странице переписывается так, чтобы браузер его не разбирал, не скачивал и не выполнял. Его адрес откладывается в сторону, а не удаляется — согласие должно уметь вернуть его на место.
- Баннер выводится каждому посетителю, байт в байт одинаковый, и изначально скрыт. Показывать ли его, решает скрипт в браузере.
- Когда посетитель делает выбор, решение записывается в его собственный браузер, а скрипты принятых категорий освобождаются.
- Решение привязано к точному тексту, который был показан. Измените категории, текст баннера или инвентарь cookie — и прежние согласия перестают считаться, вопрос задаётся снова.
- Если позже посетитель отзовёт согласие, cookie, названные в вашем инвентаре, удаляются там, где это возможно, и страница перезагружается, чтобы ничто уже запущенное не продолжало работать.
Сервер никогда не меняет страницу под посетителя: на фронтенде не читается ни одна cookie, не проверяется сессия, не изучается состояние авторизации. Баннер, который меняет HTML для каждого посетителя, ломает полностраничное кеширование — а за таким кешем страница первого посетителя молча отдаётся всем остальным.
Если скрипт вообще не загрузится, баннер останется невидимым, и удержанные скрипты никогда не будут освобождены. Режим отказа здесь — «ничто не отслеживается», а не «отслеживается всё».
Удержание скриптов
Три механизма, потому что отслеживающий код попадает на страницу WordPress тремя разными путями.
- Скрипты, поставленные в очередь WordPress
- Сопоставляются по своему дескриптору с категорией в списке Удержанные скрипты. MevvLegal переписывает тег так, чтобы браузер считал его обычным текстом, и выносит адрес из
src. - Теги, которые вы пишете сами
- Заключите договор вручную: задайте скрипту
type="text/plain"и атрибут категории или поместите адрес iframe в атрибут удержания вместоsrc. - Теги, которые другие плагины выводят напрямую
- Некоторые плагины выводят свой трекер прямо в страницу, где обычный механизм его не видит. Такие вместо этого сопоставляются по фрагменту адреса — в списке Теги, выводимые другими плагинами.
Третий случай не гипотетический. На действующем магазине Google Listings & Ads выводил тег Google Ads с приоритетом, до которого не дотягивается ни один фильтр, и маркетинговые cookie записывались без согласия под баннером, который был уверен, что заблокировал их.
Чтобы освободить удержанный скрипт, элемент надо заменить, а не просто отредактировать: скрипт, который браузер уже разобрал как обычный текст, никогда больше не запустится, что бы вы ни делали с его атрибутами. Выполняется только совершенно новый узел. Элементам, не являющимся скриптами, — iframe, изображениям — просто возвращается их адрес.
Пока третий список пуст, ни одна страница не буферизуется вовсе. Буферизация вывода рядом с другим плагином — одна из самых частых сообщаемых причин белого экрана, поэтому она включается только тогда, когда действительно есть что ловить.
MevvLegal исправляет и собственную работу. Тег, адрес которого выглядит отложенным, но потерявший атрибут категории, — это тег, который другой плагин переписал после нас: браузер его выполнит. Такие обнаруживаются, удерживаются заново и учитываются на экране аудита как Осталось наполовину сделанным (ПРЕДУПРЕЖДЕНИЕ).
Баннер
Настройки находятся в разделе MevvLegal → Согласие на cookie — это одна длинная форма, а не набор вкладок.
- Баннер согласия на cookie
- Показывается ли он, его заголовок, его текст и где он расположен — сверху или снизу. Изменение текста меняет версию политики и заново спрашивает всех — в этом и смысл, а не побочный эффект.
- Внешний вид баннера
- Шесть значений: фон баннера, цвет текста, цвет кнопки, цвет текста кнопки, скругление углов и максимальная ширина. Контраст ниже порога WCAG вызывает предупреждение, но не мешает сохранению.
- Категории
- Необходимые (всегда включены, отключить нельзя), предпочтения, статистика, маркетинг.
- Ссылка на настройки cookie
- Шорткод, который можно поставить в подвал, чтобы посетитель мог снова открыть баннер и передумать.
Отказаться так же просто, как согласиться. У обеих кнопок один и тот же класс, и кнопка отказа выводится первой. Настройка цвета одна и применяется к обеим — сделать кнопку отказа тише кнопки согласия невозможно. Согласие, полученное усложнением отказа, не является свободным.
Баннер — это диалог, но он не запирает страницу за собой и не удерживает фокус. Escape закрывает панель подробностей, но никогда сам баннер: считать нерешительность согласием или отказом было бы неверно в обе стороны.
Инвентарь cookie
Инвентарь — это по одному списку на категорию и по строке на каждую cookie: имя, где она хранится, кто её предоставляет, сколько живёт и для чего нужна. Всё остальное строится на нём — из него формируется страница политики cookie, и именно он говорит, что можно удалить при отзыве согласия.
MevvLegal не поставляется ни с одной строкой по умолчанию. Ни заранее заполненного Google Analytics, ни заранее заполненного Meta Pixel. Заявить об операции обработки, которую вы на самом деле не выполняете, хуже, чем заявить слишком мало.
Писать по памяти не нужно. Наблюдение за cookie измеряет, какие имена cookie появляются в браузерах реальных посетителей — на выборке из них, с выбранной вами частотой — и предлагает их как подсказки.
Читаются только имена. Значение cookie никогда не читается, не передаётся и не сохраняется. И найденное имя никогда не попадает в ваш инвентарь само: провайдера, срок и назначение знаете только вы, а выдумать их значило бы поставить сфабрикованное заявление на вашу же страницу политики.
Google Consent Mode v2
По умолчанию выключен, и его включение — осознанный компромисс, который стоит понять до того, как на него пойти.
Когда он включён, отправляются четыре сигнала — хранение для рекламы, хранение для аналитики, пользовательские данные для рекламы и персонализация рекламы, — установленные в «denied» до любого выбора и обновляемые, когда посетитель решает. Статистика соответствует хранению для аналитики; маркетинг — трём рекламным сигналам. Предпочтения и необходимые не соответствуют ничему, потому что отправка сигнала, который не меняет поведение ни одного тега, намекала бы на управление, которое ничего не делает.
Чего это стоит, прямым текстом: при включённой опции тег Google выполняется на вашей странице. Даже когда посетитель отказывается от всего, запрос уходит в Google, а вместе с ним — его IP-адрес и адрес страницы. Ни одна cookie не записывается — все четыре сигнала стоят в «denied», — но запрос происходит. Ваша проверка фронтенда больше не сможет сказать «сторонних скриптов без согласия: 0».
Взамен вы получаете моделирование конверсий Google, которому для существования нужен сигнал «denied». Это настоящий выбор между двумя обоснованными позициями — поэтому он предлагается, а не включается втихую.
Исключение узкое: освобождаются только сами загрузчики тега Google. Meta Pixel, TikTok, Criteo и рекламные домены Google остаются удержанными.
Включение этой опции не аннулирует уже данные согласия — она намеренно не входит в хеш версии политики.
Региональные правила и GPC
По умолчанию выключено. При включении три группы могут вести себя по-разному.
- ЕС/ЕЭЗ, Великобритания и Турция
- Только по согласию, всегда. Это не настройка, и ослабить её нельзя.
- США
- По согласию или по отказу — скрипты выполняются, а баннер сообщает, что вы можете отказаться.
- Все остальные места и посетители, чей регион определить нельзя
- По согласию или свободно — скрипты выполняются, а баннер не появляется вовсе.
Регион определяется по часовому поясу браузера. Никакого поиска по IP, никакого заголовка страны, никакого сервиса геолокации, ничего не записывается на устройство посетителя. Обычный подход — отправить IP посетителя в стороннюю службу поиска, что само по себе является раскрытием данных, а как минимум в одном конкурирующем продукте это происходит по обычному HTTP.
У этого выбора есть честная цена: часовой пояс — не страна. Штаты США различить нельзя, поэтому правил на уровне штата нет. И любой неизвестный случай — пустое значение, UTC, нераспознанное имя — попадает в группу по согласию. Обратное значение по умолчанию записывало бы маркетинговые cookie без согласия посетителю из ЕС, чей браузер просто не сообщил пояс, и нигде не показало бы ошибки.
Global Privacy Control учитывается всегда и настройки не имеет. Когда браузер его присылает, группа «по отказу» или «свободно» ужесточается обратно до «по согласию». Он только ужесточает; он никогда и нигде не освобождает скрипт.
GPC никогда не превращается в запись о согласии. Баннер не закрывается и ничего не сохраняется. Настройка браузера — это не информированное согласие, а закрытие баннера отняло бы у посетителя возможность согласиться. Do Not Track намеренно не учитывается: некоторые браузеры отправляли его по умолчанию, без выбора пользователя, а считать возражением умолчание, которое никто не выбирал, — это зеркальное отражение трактовки молчания как согласия.
В группе «по отказу» или «свободно» запись о согласии не создаётся и в журнал ничего не отправляется. Её создание превратило бы запись, которая должна доказывать согласие, в сфабрикованное заявление. Решение, которое посетитель действительно принял, всегда важнее регионального правила.
Удаление cookie при отзыве согласия
Настройки для этого нет. Когда посетитель отзывает согласие, имена из вашего инвентаря удаляются там, где браузер это позволяет, — cookie, локальное хранилище и хранилище сессии, по всем возможным путям и доменам. Звёздочка в конце работает как подстановочный знак. Удаление выполняется до перезагрузки страницы, потому что после перезагрузки ничто не гарантированно выполнится.
Категория необходимых никогда не затрагивается, как и собственная запись о согласии посетителя.
Два вида cookie удалить из браузера невозможно, и ни один плагин этого не изменит. Cookie с флагом HttpOnly по определению невидимы для JavaScript: они вообще не появляются, поэтому перезаписать их истёкшей cookie нельзя. А cookie, установленные на другом домене — doubleclick.net, facebook.com, — не может удалить скрипт, работающий на вашем сайте; разделение доменов в браузере это запрещает. А это большинство сторонних маркетинговых cookie.
Поэтому MevvLegal не говорит «мы удалили их все». Скрипт сообщает, что он пытался удалить и что осталось на месте, а экран администратора выводит это ограничение как есть. Утверждать то, чего вы не измеряли, — самая дорогая ошибка в продукте такого рода.
Настоящий ответ для сторонних cookie — не удалять их, а вообще не давать их записать: для этого и нужно удержание скриптов. Удаление его дополняет, но не заменяет. И удалить можно только те имена, что записаны в вашем инвентаре: если инвентарь необязательной категории пуст, отзыв согласия остановит скрипты, но оставит cookie, уже лежащие на устройстве.
Запись о согласии
Две половины, намеренно разделённые.
- На устройстве посетителя
- Его решение, версия политики, к которой оно относится, и время принятия. Хранится в его собственном браузере, а не в cookie.
- На вашем сервере
- Только счётчики: для каждого дня, каждой версии политики и каждой комбинации выборов — сколько раз она встретилась. Ни IP-адреса, ни идентификатора посетителя, ни идентификатора пользователя, ни строки на человека. Рядом с ними — архив каждого текста политики, который когда-либо показывался.
Доказательство согласия на уровне человека означало бы выдачу каждому посетителю устойчивой идентичности — начало совершенно новой операции обработки, на которую нет собственного согласия, ради подтверждения согласия на прежнюю. Этот продукт так не делает и не притворяется, что делает.
Честное ограничение напечатано на экране, в экспорте и в исходном коде: счётчики не уникальны по людям, и их можно накрутить вредоносным запросом. Это не счётчик посетителей. Это запись о том, сколько согласий было дано в отношении какого текста.
Аналитика согласий читает эти счётчики: доли полного согласия, частичного согласия и полного отказа, разбивку по категориям, сравнение между версиями политики и динамику по дням. В Pro добавляется экспорт в CSV, который переносит счётчики, тексты политики и ту самую честную оговорку о пределах последней строкой.
Юридические страницы
Шесть шаблонов, формируемых из ваших собственных данных и вашего собственного инвентаря:
- Бесплатно
- Gizlilik Politikası ve KVKK Aydınlatma Metni · Çerez Politikası (политика конфиденциальности и информирование по KVKK · политика cookie)
- Pro
- Kullanım Koşulları · Mesafeli Satış Sözleşmesi · İade ve Değişim Koşulları (Cayma Hakkı) · Teslimat ve Kargo Koşulları (условия использования · договор дистанционной продажи · условия возврата и обмена (право на отказ) · условия доставки и отправки)
Политика cookie бесплатна намеренно: баннер без неё бессмыслен.
Доступны турецкий и английский. Английские тексты — не переводы: это отдельные тексты, написанные под GDPR, Директиву об электронной приватности и Директиву о правах потребителей, потому что турецкие написаны под KVKK и турецкое регулирование дистанционных продаж. Английского варианта Mesafeli Satış Sözleşmesi нет, и экран объясняет почему: это документ, предписанный турецким регулированием, у которого в праве ЕС нет эквивалентной обязанности.
Положения, которые нельзя знать заранее, оставлены в квадратных скобках, а не заполнены — применимое право, компетентный суд, представитель в ЕС, сроки хранения, кто оплачивает обратную доставку. Положение, заполненное наугад, хуже, чем оставленное пустым.
Созданные страницы — это обычные страницы WordPress. Ни собственного типа записи, ни обёртки-шорткода, ни блокировки: их можно редактировать, и они переживают удаление плагина. Перезапись такой страницы всегда явный выбор и всегда сначала сохраняет ревизию.
Экран сообщает, когда опубликованная страница разошлась с тем, что было бы сгенерировано сегодня, а Показать различие показывает разницу построчно. Он также проверяет, соответствует ли ваша опубликованная политика cookie вашим открытым категориям.
Эти тексты не являются юридической консультацией, и каждый экран плагина об этом говорит.
Запросы субъектов данных
Шорткод размещает форму запроса на любой странице. Посетитель указывает адрес электронной почты и выбирает, хочет ли он копию своих данных или их удаление. Ни один вариант не выбран заранее — предварительная отметка подтолкнула бы его прочь от удаления.
- Форма отправляется. Она открыта и для неавторизованных посетителей, потому что это право не зависит от членства.
- WordPress отправляет им ссылку для подтверждения. Пока по ней не перейдут, ничего не происходит.
- Вы выполняете запрос в Инструменты → Экспорт персональных данных или Удаление персональных данных — на собственных экранах WordPress. Счётчик на экране MevvLegal показывает, сколько подтверждённых запросов ожидают.
Ответ посетителю всегда одна и та же фраза, что бы ни произошло, — в том числе когда адреса в базе нет. Иной ответ раскрыл бы, зарегистрирован ли у вас этот адрес.
Экспорт и удаление выполняет ядро WordPress, а не MevvLegal. MevvLegal не регистрирует ни собственного экспортёра, ни собственного стирателя, потому что не хранит персональных данных — пустой раздел в экспорте был бы шумом, а не информацией.
У формы намеренно нет nonce: за полностраничным кешем nonce умирает и молча уносит форму с собой. Поверхность реализации прав, которая тихо перестаёт работать, — недопустимый вид отказа. Со злоупотреблениями справляются поле-ловушка honeypot, общесайтовый часовой лимит и собственная защита WordPress от дубликатов.
В форме есть оговорка: записи, подпадающие под обязанность хранения по закону — счета, коммерческие книги, — могут храниться до окончания этого срока, и вам сообщат, какие именно записи и почему.
Проверка фронтенда
Аудит фронтенда загружает вашу же главную страницу и считает, что на ней есть на самом деле: сколько тегов script, сколько из них удержано, сколько выполняется свободно и являются сторонними, сколько встроенных, сколько блоков данных, которые вообще не скрипты, и то же самое для iframe.
Важна строка Неудержанный и СТОРОННИЙ. Когда она доходит до нуля, экран так и говорит: сторонних скриптов, работающих без согласия: 0. Это число и есть настоящее обещание продукта.
С того же экрана можно превратить распознанные трекеры в правила удержания и записать найденные имена cookie в свой инвентарь.
Ничто не включается автоматически. Удержание не того скрипта ломает сайт молча — скрипт 3-D Secure платёжного провайдера, интеграция доставки, онлайн-чат: страница открывается, а кнопка ничего не делает. Поэтому подсказки предлагаются, а утверждаете их вы. И удаление правила удержания бесплатно и безусловно в любой редакции, с лицензией или без.
Каждое сканирование обходит ваш кеш страниц. Без этого экран читал бы HTML, созданный часы назад, и выдавал бы его за текущее состояние.
Free и Pro — правило, которое не гнётся
У этого плагина есть один инвариант, записанный в начале его класса лицензии:
Баннер cookie и удержание скриптов никогда не привязаны к лицензии. Здесь правило жёстче, чем в остальных наших продуктах. В других местах истёкшая лицензия стоит вам внешнего вида; здесь она стоила бы вам соответствия закону. Если бы баннер замолкал на сайте с истёкшей лицензией, этот сайт начал бы записывать посетителям аналитические и маркетинговые cookie без разрешения — а штраф приходит оператору данных, а не поставщику плагина. Продукт, который из-за проблемы с оплатой оставляет клиента юридически незащищённым, продавать нельзя.
Что это значит на практике: ограничивается только новая настройка. Определение новых категорий, создание новых юридических шаблонов, добавление строк в таблицу cookie. Уже существующая настройка продолжает работать ровно так же.
Бесплатно, навсегда, без единой проверки лицензии на пути фронтенда:
- Баннер cookie и его настройки цвета, скругления и ширины
- Удержание скриптов — все три механизма
- Запись о согласии в браузере посетителя и анонимный журнал согласий
- Экран аналитики согласий
- Проверка фронтенда, наблюдение за cookie и превращение распознанного трекера в правило удержания
- Удаление правила удержания и выключение Consent Mode или регионального правила — безусловно
- Удаление cookie при отзыве согласия
- Мост WP Consent API и GPC
- Форма запроса субъекта данных
- Мастер установки, сравнение текстов и многоязычный текст баннера
- Шаблоны политики конфиденциальности и политики cookie, а также редактирование любой созданной страницы
Pro добавляет:
- Редактирование инвентаря cookie, сопоставления скриптов и сопоставления вставленных вручную тегов
- Четыре шаблона для электронной торговли: условия использования, договор дистанционной продажи, возврат и отказ от договора, доставка и отправка
- Включение Consent Mode и включение регионального правила
- Экспорт журнала согласий в CSV
Когда лицензия истекает:
- Ваше соответствие закону не затрагивается. Баннер, удержание скриптов и запись о согласии продолжают работать.
- Ваш инвентарь cookie сохраняется, а не очищается. Его опустошение за одну ночь сделало бы вашу опубликованную политику неверной.
- Существующие правила удержания продолжают удерживать. Поля инвентаря просто становятся доступными только для чтения.
- Уже созданные юридические страницы остаются опубликованными и редактируемыми.
- Consent Mode и региональное правило, если они уже были включены, остаются включёнными. Ограничено только их включение — выключение и ужесточение группы обратно до «по согласию» доступны всегда.
Если наши серверы недоступны, активная лицензия продолжает работать семь дней на основании последней успешной проверки — но только если она хоть раз успешно проверялась.
Когда что-то не работает
- Аудит показывает «Осталось наполовину сделанным (ПРЕДУПРЕЖДЕНИЕ)»
- Другой плагин переписывает тот же тег скрипта после MevvLegal и снимает удержание. Это измерено, а не теория — именно так вёл себя плагин-помощник хостинга на действующем сайте. MevvLegal фильтрует настолько поздно, насколько это возможно, и чинит то, что может обнаружить. Если строка не исчезает, отключите плагин, который ставит этот скрипт в очередь, и просканируйте снова.
- Трекер работает, хотя баннер установлен
- Он выводится прямо в страницу, а не ставится в очередь. Добавьте фрагмент его адреса в Теги, выводимые другими плагинами — именно этот список ловит такие случаи.
- Экран проверки показывает конфигурацию, которой уже нет
- Такого быть не должно: каждое сканирование обходит кеш страниц. Если фронтенд по-прежнему выглядит устаревшим для посетителей, очистите полностраничный кеш — в LiteSpeed это
wp litespeed-purge all. - Региональное правило будто не применяется
- Плагин кеширования или оптимизации откладывает и переставляет скрипты, поэтому решение о регионе приходит уже после того, как баннер решил. Продукт применяет правило заново, когда загружается скрипт региона; если и это не помогает, перестаньте откладывать скрипты MevvLegal.
- Баннер не появляется вовсе
- Когда баннера нет, аудит сообщает: Баннер на странице не найден. Чаще всего тема просто не вызывает стандартный хук в начале body — для этого есть запасной вариант в подвале. Помните: если баннер не выводится, удержанные скрипты тоже никогда не освобождаются.
- Белый экран после включения сопоставления вставленных вручную тегов
- Этот список — единственное, что включает буферизацию вывода. Буферизация рядом с другим плагином, который тоже буферизует, — известная причина. Очистите список, чтобы убедиться, затем добавляйте адреса обратно по одному.
- Журнал согласий остаётся пустым
- Таблица создаётся при активации, а активация не выполняется при обновлении плагина. Её наличие перепроверяется при каждой загрузке страницы админки, поэтому обычно достаточно один раз зайти в админку. Убедитесь также, что журнал включён.
- После добавления правила удержания перестала работать кнопка или шаг оплаты
- Вы удержали что-то, что не является трекером. Удалите правило — удаление бесплатно, безусловно и мгновенно.
- Consent Mode включён, и проверка больше не показывает ноль
- Это ожидаемо и указано у самой настройки: при включённом Consent Mode тег Google выполняется.
Ограничения
- Cookie с флагом HttpOnly и cookie, установленные на другом домене, удалить из браузера нельзя. Ни один плагин этого не изменит.
- Удаляются только имена, записанные в вашем инвентаре. Пустой инвентарь означает, что не удаляется ничего.
- Наблюдение за cookie читает имена, но никогда значения. Оно также никогда само не записывает найденную cookie в ваш инвентарь и никогда не выдумывает её провайдера, срок или назначение.
- Правила удержания никогда не включаются автоматически, и для нераспознанной третьей стороны категория не предлагается.
- Регион берётся из часового пояса браузера. Часовой пояс — не страна, штаты США различить нельзя, и любой неизвестный случай попадает в группу «по согласию».
- Группу ЕС/Великобритания/Турция ослабить нельзя. Настройки для этого нет.
- GPC нельзя выключить, а Do Not Track не учитывается.
- Доказательства согласия на уровне человека нет. Счётчики анонимны, не уникальны по людям, и их можно накрутить.
- Журнал не может сказать, на каком языке было дано согласие.
- MevvLegal не пишет собственного движка экспорта или удаления. Эту работу делает ядро WordPress.
- При Consent Mode исключение получают только загрузчики тега Google. Больше ничего не освобождается.
- Проверка запрашивает вашу главную страницу по HTTP. Она не запускает на вашем сервере headless-браузер, поэтому видит то, что выводит именно эта страница.
- Юридические тексты статичны. Сегодня они верны; когда закон изменится, они не обновятся сами. Плагин сообщает, когда опубликованная страница разошлась с шаблоном, но не может сказать, когда устарел сам шаблон.
- Эти тексты не являются юридической консультацией.
- При удалении плагина ничего не стирается — таблица журнала согласий и ваши настройки остаются на месте.
И самое важное: ни один плагин не сделает вас соответствующим закону. Этот удерживает скрипты, фиксирует согласия и создаёт страницы из того, что вы ему сообщили. То, что вы ему сообщили, остаётся вашей ответственностью, и последний экран мастера говорит именно это, а не поздравляет вас.