Ошибки строки согласия, которые незаметно убивают ваш рекламный доход
Незаметная утечка дохода
Когда ваш eCPM каждый месяц снижается на несколько процентов, причина редко кроется в инвентаре или минимальных ценах. Чаще это сломанная TC string — сигнал IAB Transparency & Consent Framework (TCF), который сопровождает каждый рекламный запрос. Некорректная или отсутствующая строка не выдаёт громкой ошибки. Вместо этого рекламный сервер незаметно откатывается к неперсонализированной рекламе, партнёры по спросу отпадают, и доход вытекает без единого оповещения. Для издателей приложений и игр, монетизирующихся в ЕЭЗ и Великобритании, это самая упускаемая из виду причина потери дохода.
Что на самом деле несёт TC string
TC string — это закодированный в base64 блок, создаваемый вашей платформой управления согласием (CMP). Он кодирует выбор пользователя: согласованные цели, разрешённых поставщиков, ваш CMP ID, версию политики и временную метку. Покупатели декодируют его за миллисекунды, чтобы решить, могут ли они участвовать в торгах с персонализированным таргетингом. Два сигнала важны не меньше:
gdprApplies— флаг (1, 0 или undefined), сообщающий покупателям, применяется ли GDPR.- Google Consent Mode v2 — сигналы
ad_storage,ad_user_dataиad_personalization, которые Google считывает независимо от строки TCF.
Если что-либо из этого неверно, спрос испаряется — даже когда пользователь фактически дал согласие.
Пять ошибок, которые незаметно стоят вам денег
1. Отсутствующая или просроченная строка. Если CMP никогда не записывает строку или кешированное согласие устаревает за пределы окна повторного запроса, запросы уходят без сигнала. Покупатели трактуют "нет строки" как "нет согласия" и участвуют в торгах только с контекстным спросом с низким eCPM или пропускают аукцион.
2. Неверный CMP ID. У каждой сертифицированной CMP есть зарегистрированный ID, встроенный в строку. Если записан нераспознанный ID, Google и поставщики IAB отклоняют его — распространено после миграции, когда старый SDK всё ещё подключён.
3. Поставщик не объявлен. У партнёра по спросу может быть полное согласие, но если его vendor ID отсутствует в списке разрешённых поставщиков, он не может участвовать в персонализированных торгах. Издатели часто забывают обновить список после добавления партнёра.
4. Некорректный gdprApplies. Передача строки "1" вместо целого числа или оставление значения undefined для пользователя, явно находящегося в ЕЭЗ, сбивает покупателей с толку. Неверный gdprApplies=0 также может подвергнуть вас риску несоответствия требованиям, при этом выглядя нормально.
5. Сигналы Consent Mode не срабатывают. Строка TCF может быть идеальной, в то время как Consent Mode остаётся в состоянии отказа по умолчанию — например, когда SDK загружает рекламу до разрешения согласия. Тогда Google показывает неперсонализированную рекламу независимо от TC string.
Пошаговый процесс отладки
Двигайтесь от устройства наружу к рекламному серверу и воспроизводите в чистом состоянии — очистите данные приложения или используйте свежий профиль браузера, чтобы устаревшее согласие не ввело вас в заблуждение.
- Шаг 1 — Захватите сырую строку. В вебе читайте её через
__tcfapi('getTCData', 2, cb). В приложении выгрузите ключIABTCF_TCStringизSharedPreferences(Android) илиNSUserDefaults(iOS). - Шаг 2 — Декодируйте и проверьте. Вставьте её в декодер IAB TCF или валидатор CMP. Подтвердите, что CMP ID ваш, версия политики и временная метка актуальны, а ваши ключевые vendor ID присутствуют в списке.
- Шаг 3 — Изучите рекламный запрос. Используйте Charles Proxy или сетевой инспектор, чтобы наблюдать за запросом GAM, и убедитесь, что параметры
gdprиgdpr_consentнесут правильные значения. - Шаг 4 — Проверьте Consent Mode. Используйте Google Tag Assistant, чтобы подтвердить, что
ad_user_dataиad_personalizationпереключаются на granted, когда пользователь принимает. - Шаг 5 — Подтвердите в GAM. Откройте измерение отчётности неперсонализированной рекламы в Ad Manager. Всплеск трафика NPA, не соответствующий вашему уровню отказов, — это отпечаток плохой строки.
Устранение первопричины
Залатать один плохой запрос легко; предотвратить следующий — вот настоящая работа. Заставьте рекламу ждать согласия перед инициализацией, держите список поставщиков синхронизированным с вашим стеком спроса и отслеживайте соотношение персонализированных и неперсонализированных показов — сдвиг там является вашим самым ранним предупреждением.
Вот где сертифицированная Google CMP оправдывает себя. FlexyConsent выдаёт действительные строки IAB TCF 2.3 с правильным CMP ID и объявлениями поставщиков, запускает сигналы Consent Mode v2, чтобы ad_user_data и ad_personalization отслеживали выбор пользователя, и предоставляет аналитику уровня согласия по вебу, Android и iOS — так что сломанная строка проявляется на дашборде, а не в вашей выплате.
Ключевые выводы
- Плохая TC string не вызывает сбоя — она незаметно понижает вас до неперсонализированной рекламы и более низкого eCPM.
- Пять виновников: отсутствующие/просроченные строки, неверный CMP ID, необъявленные поставщики, некорректный
gdprAppliesи мёртвые сигналы Consent Mode. - Отлаживайте от устройства к рекламному серверу: захватите, декодируйте, изучите запрос, проверьте Consent Mode, проверьте GAM.
- Непрерывно отслеживайте ваше соотношение персонализированных показов к NPA — сертифицированная CMP, такая как FlexyConsent, делает действительные строки и корректные сигналы Consent Mode v2 настройкой по умолчанию.