Отладка строки IAB GPP в консоли браузера: пошаговое руководство
Почему проблемы с GPP трудно заметить
Когда посетитель из США отказывается от продажи или передачи своих данных, этот выбор должен дойти до каждого рекламного партнёра на странице. В IAB Global Privacy Platform (GPP) он передаётся в виде компактной строки и списка идентификаторов разделов. Если что-то из этого неверно — отсутствует, устарело или содержит не тот раздел, — внешне ничего не ломается. Реклама по-прежнему загружается, баннер по-прежнему выглядит нормально, а проблема проявляется позже: партнёры игнорируют отказы или делают меньшие ставки на ваш инвентарь.
Хорошая новость в том, что почти всё можно проверить из консоли браузера. В этом руководстве проверки идут в том порядке, в котором мы выполняли бы их на живой странице.
Шаг 1: убедитесь, что API существует и готов
CMP, совместимая с GPP, предоставляет глобальную функцию __gpp. Откройте DevTools на своей странице и выполните команду ping:
__gpp('ping', function (data) { console.log(data); });
Возвращаемый объект многое сообщает с первого взгляда:
- gppVersion — для актуальных реализаций должно быть 1.1.
- cmpStatus — загрузилась ли CMP или возникла ошибка.
- cmpDisplayStatus — виден ли баннер, скрыт или отключён для этого посетителя.
- signalStatus — «ready», когда CMP определилась с состоянием согласия, и «not ready», пока она ещё решает.
- supportedAPIs — разделы, которые CMP может формировать.
- applicableSections — идентификаторы разделов, которые применимы к этому посетителю прямо сейчас.
- gppString — сама закодированная строка.
Если __gpp не определена, stub CMP отсутствует или загружается слишком поздно. Stub должен быть на месте до любого рекламного скрипта, который его ожидает, иначе такие скрипты не увидят CMP и либо будут ждать, либо продолжат работу без сигнала.
Шаг 2: проверьте применимый раздел
У каждой рамки конфиденциальности в GPP есть числовой идентификатор раздела. Чаще всего издатели сталкиваются с 2 (EU TCF v2), 5 (канадский TCF), 7 (US National, «usnat») и 8 и далее для отдельных разделов штатов, таких как Калифорния, Вирджиния, Колорадо, Юта и Коннектикут. Посетитель из штата США обычно должен видеть в applicableSections либо национальный раздел, либо соответствующий раздел штата, но не раздел ЕС.
Тестируйте из разных локаций. Типичная ошибка — CMP, которая правильно определяет географию для баннера, но записывает в строку раздел по умолчанию независимо от неё, или наоборот. С помощью VPN или инструментов предпросмотра вашей CMP сравните то, что показывает баннер, с тем, что сообщает applicableSections.
Шаг 3: прочитайте данные раздела
Вместо того чтобы декодировать строку вручную, запросите у CMP разобранный раздел:
__gpp('getSection', function (data, success) { console.log(data, success); }, 'usnat');
В разделе US National поля отказа используют простое соглашение: 0 означает «неприменимо», 1 — пользователь отказался, а 2 — пользователь не отказывался. Сначала обратите внимание на эти поля:
- SaleOptOut и SharingOptOut
- TargetedAdvertisingOptOut
- Соответствующие поля notice, в которых фиксируется, было ли посетителю показано уведомление о каждой практике
Теперь выполните отказ на странице — нажмите ссылку «Не продавать и не передавать мои данные» или переключите настройку в центре предпочтений — и снова запустите getSection. Поля отказа должны измениться с 2 на 1. Если этого не произошло, интерфейс и сигнал рассинхронизированы.
Шаг 4: проверьте путь Global Privacy Control
Несколько законов штатов требуют от компаний считать сигнал Global Privacy Control отказом. Включите GPC в браузере или расширении, которое его поддерживает, убедитесь, что navigator.globalPrivacyControl возвращает true в консоли, затем загрузите страницу в новой сессии. Соответствующие поля отказа уже должны содержать 1, хотя посетитель не трогал баннер. В некоторых разделах есть и поле, указывающее, что выбор пришёл из сигнала GPC.
Шаг 5: следите за событиями, а не только за снимками
Рекламные скрипты не должны считывать строку один раз при загрузке страницы и забывать о ней. Зарегистрируйте listener, чтобы увидеть то, что видят партнёры:
__gpp('addEventListener', function (evt) { console.log(evt.eventName, evt.pingData); });
Вы должны увидеть такие события, как listenerRegistered, signalStatus и sectionChange. Когда посетитель меняет выбор, следом должно прийти событие sectionChange с обновлённой строкой. Если ваша обёртка header bidding или интеграция с рекламным сервером читает строку только до того, как signalStatus станет «ready», она может отправить пустое или устаревшее значение.
Шаг 6: проследите строку до рекламных запросов
Наконец, откройте вкладку Network и отфильтруйте свои рекламные запросы. Многие рекламные эндпоинты принимают параметры gpp и gpp_sid (строку и применимые идентификаторы разделов). Проверьте, что:
- оба параметра присутствуют в запросах от посетителей из США;
- строка совпадает с той, которую вернул ping в момент запроса;
- после отказа последующие запросы содержат новую строку, а не закэшированную.
Если вы используете Prebid.js, убедитесь, что его модуль управления согласием настроен на GPP, и проверьте как bid-запросы, уходящие из обёртки, так и итоговый вызов рекламного сервера.
Типичные сценарии сбоев
- Stub загружается после рекламных тегов — партнёры вообще не видят CMP.
- Неверный раздел для региона — раздел ЕС отправляется для трафика из США или раздела нет совсем.
- Интерфейс и сигнал рассинхронизированы — переключатель меняется, а строка нет.
- GPC игнорируется — сигнал браузера никогда не становится отказом.
- Устаревшие строки в запросах — обёртка кэширует первое увиденное значение.
Ключевые выводы
- Начните с ping: версия, статус, применимые разделы и строка расскажут большую часть истории.
- Используйте getSection для чтения полей отказа; 1 означает отказ, 2 — отказа нет.
- Проверяйте ссылку для отказа и GPC по отдельности и убедитесь, что обе меняют сигнал.
- Слушайте события и дожидайтесь сигнала «ready», прежде чем рекламные запросы будут читать строку.
- Проверьте gpp и gpp_sid в реальных сетевых запросах до и после отказа.