Как блокировать скрипты до получения согласия: сравнение трёх методов
Проблема: теги срабатывают слишком рано
Баннер согласия работает только тогда, когда теги за ним уважают выбор посетителя. Самый частый сбой прост: баннер появляется, но скрипты аналитики и рекламы уже загрузились и установили идентификаторы до того, как кто-либо что-то нажал. Исправить это значит блокировать скрипты до получения согласия. Есть три практичных способа.
Метод 1: подмена типа скрипта
Браузеры выполняют элемент script только тогда, когда его тип — это тип JavaScript. Если изменить тип на text/plain, браузер проигнорирует скрипт. Затем вы добавляете атрибут data, фиксирующий, к какой категории согласия относится скрипт:
- Замените
type="text/javascript"наtype="text/plain". - Добавьте атрибут, например
data-category="analytics". - Когда посетитель даёт согласие на эту категорию, небольшой загрузчик возвращает тип обратно и вставляет скрипт, чтобы он запустился.
Подходит для: нескольких известных встроенных или внешних скриптов в ваших шаблонах. Остерегайтесь: скриптов, которые внедряют другие скрипты: они не проходят через ваши шаблоны и потому никогда не переписываются.
Метод 2: управление тегами в менеджере тегов
Если ваши теги находятся в Google Tag Manager или подобном инструменте, контейнер можно оставить на странице и управлять срабатыванием с помощью триггеров с учётом согласия. Каждому тегу задаётся требование согласия, и менеджер тегов запускает его только тогда, когда соответствующее состояние согласия предоставлено. Главное преимущество — централизованный контроль: маркетинг может добавлять теги, не трогая шаблоны, а правило путешествует вместе с тегом.
Подходит для: сайтов с множеством маркетинговых тегов. Остерегайтесь: жёстко прописанных скриптов вне контейнера и пользовательских HTML-тегов, которые сами загружают другие скрипты.
Метод 3: динамическая загрузка скриптов при согласии
Здесь вы полностью убираете теги script со страницы и пишете функцию, которая внедряет их только после события согласия. Это самый чистый вариант для одностраничных приложений и для разработчиков, которым нужен полный контроль:
- Подпишитесь на callback согласия от вашей CMP.
- Проверьте, какие категории были разрешены.
- Создайте элемент script, задайте его источник и добавьте в документ.
- Выполните код инициализации в обработчике загрузки скрипта.
Подходит для: современных приложений с этапом сборки. Остерегайтесь: забыть про вернувшегося посетителя, чей сохранённый выбор должен запускать загрузку при открытии страницы без нового клика.
Обработка отзыва согласия
Блокировка до согласия — лишь половина работы. Если посетитель позже отзывает согласие, перестаньте вызывать инструменты и убедитесь, что они не продолжают читать или записывать идентификаторы. Удаление скрипта со страницы не удаляет код, уже находящийся в памяти, поэтому перезагрузка после отзыва часто оказывается самым простым надёжным решением.
Какой метод выбрать?
- Мало скриптов, шаблоны рендерятся на сервере: метод 1.
- Много маркетинговых тегов, которые редактируют не разработчики: метод 2.
- Одностраничное приложение или нестандартный фронтенд: метод 3.
- В смешанных системах часто сочетают два метода. Главное, чтобы ни один тег не остался без покрытия.
Как это протестировать
- Откройте приватное окно с очищенным кэшем.
- Откройте инструменты разработчика браузера на вкладках Network и Application до загрузки страницы.
- Загрузите страницу и не трогайте баннер. Убедитесь, что запросы аналитики и рекламы не отправляются и связанные cookie или записи хранилища не появляются.
- Примите только одну категорию и убедитесь, что загружаются только соответствующие скрипты.
- Отклоните всё, перезагрузите страницу и повторите первую проверку.
- Отзовите согласие и проверьте поведение, описанное выше.
Где место FlexyConsent
FlexyConsent поддерживает IAB TCF 2.4 и Google Consent Mode v2 и является CMP, сертифицированной Google (CMP ID 317). Какой бы метод блокировки вы ни выбрали, задача баннера — дать вашему коду чёткий сигнал о выборе посетителя. Ваша задача — обеспечить, чтобы каждый скрипт ему подчинялся.
Ключевые выводы
- Скрипты, загружающиеся до выбора посетителя, лишают баннер смысла.
- Подмена типа, триггеры менеджера тегов и динамическая загрузка подходят для разных типов сайтов.
- Скрипты, внедряемые другими скриптами, — самая частая утечка.
- Учитывайте вернувшихся посетителей и отзыв согласия, а не только первый визит.
- Тестируйте в чистом приватном окне с открытыми инструментами разработчика, прежде чем трогать баннер.