광고 수익을 조용히 죽이는 동의 문자열 오류
조용한 수익 누출
여러분의 eCPM이 매달 몇 퍼센트씩 하락할 때, 원인이 인벤토리나 하한가인 경우는 드뭅니다. 더 흔히 그것은 손상된 TC string — 모든 광고 요청과 함께 이동하는 IAB Transparency & Consent Framework(TCF) 신호 — 입니다. 형식이 잘못되었거나 누락된 문자열은 요란한 오류를 던지지 않습니다. 대신 광고 서버가 조용히 비개인화 광고로 폴백하고, 수요 파트너가 빠져나가며, 단 하나의 경고도 없이 수익이 흘러나갑니다. EEA 및 영국에서 수익을 창출하는 앱 및 게임 퍼블리셔에게 이것은 가장 간과되는 수익 손실 원인입니다.
TC String이 실제로 담고 있는 것
TC string은 여러분의 Consent Management Platform(CMP)이 생성하는 base64 인코딩된 블롭입니다. 이는 사용자의 선택을 인코딩합니다: 동의된 목적, 허용된 벤더, 여러분의 CMP ID, 정책 버전, 타임스탬프. 구매자는 이를 밀리초 단위로 디코딩하여 개인화 타겟팅으로 입찰할 수 있는지 결정합니다. 두 가지 신호가 그만큼 중요합니다:
gdprApplies— GDPR이 적용되는지를 구매자에게 알려주는 플래그(1, 0, 또는 undefined).- Google Consent Mode v2 — Google이 TCF 문자열과 독립적으로 읽는
ad_storage,ad_user_data,ad_personalization신호.
이 중 어느 하나라도 잘못되면 수요가 증발합니다 — 사용자가 실제로 동의했더라도 말입니다.
조용히 여러분의 돈을 앗아가는 다섯 가지 오류
1. 누락되거나 만료된 문자열. CMP가 문자열을 전혀 작성하지 않거나, 캐시된 동의가 재요청 기간을 넘어 오래되면 요청이 신호 없이 나갑니다. 구매자는 "문자열 없음"을 "동의 없음"으로 취급하여 낮은 eCPM의 맥락적 수요로만 입찰하거나 경매를 건너뜁니다.
2. 잘못된 CMP ID. 모든 인증 CMP는 문자열에 내장된 등록 ID를 가지고 있습니다. 인식되지 않는 ID가 작성되면 Google과 IAB 벤더가 이를 거부합니다 — 기존 SDK가 여전히 번들된 마이그레이션 후에 흔히 발생합니다.
3. 선언되지 않은 벤더. 수요 파트너가 완전한 동의를 가지고 있더라도, 해당 벤더 ID가 허용 벤더 목록에 없으면 개인화 입찰을 할 수 없습니다. 퍼블리셔는 파트너를 추가한 후 목록 업데이트를 자주 잊습니다.
4. 형식이 잘못된 gdprApplies. 정수 대신 문자열 "1"을 전달하거나, 명백히 EEA에 있는 사용자에 대해 undefined로 두면 구매자를 혼란스럽게 합니다. 잘못된 gdprApplies=0은 겉으로는 괜찮아 보이면서도 규정 준수 위험에 노출시킬 수 있습니다.
5. Consent Mode 신호가 발동하지 않음. TCF 문자열은 완벽할 수 있지만 Consent Mode는 기본 거부 상태로 남아 있을 수 있습니다 — 예를 들어 동의가 해결되기 전에 SDK가 광고를 로드할 때입니다. 그러면 Google은 TC string과 관계없이 비개인화 광고를 게재합니다.
단계별 디버깅 워크플로
기기에서 광고 서버 방향으로 작업하고, 깨끗한 상태에서 재현하세요 — 오래된 동의가 여러분을 오도하지 않도록 앱 데이터를 지우거나 새 브라우저 프로필을 사용하세요.
- 1단계 — 원시 문자열을 캡처하세요. 웹에서는
__tcfapi('getTCData', 2, cb)를 통해 읽으세요. 앱에서는SharedPreferences(Android) 또는NSUserDefaults(iOS)에서IABTCF_TCString키를 덤프하세요. - 2단계 — 디코딩하고 검증하세요. IAB TCF 디코더나 CMP 검증기에 붙여넣으세요. CMP ID가 여러분의 것인지, 정책 버전과 타임스탬프가 최신인지, 주요 벤더 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는 올바른 CMP ID와 벤더 선언으로 유효한 IAB TCF 2.3 문자열을 방출하고, ad_user_data와 ad_personalization이 사용자의 선택을 추적하도록 Consent Mode v2 신호를 발동하며, 웹, Android, iOS에 걸쳐 동의율 분석을 표면화합니다 — 그래서 손상된 문자열이 여러분의 지급액이 아니라 대시보드에 나타납니다.
핵심 요점
- 잘못된 TC string은 충돌하지 않습니다 — 조용히 여러분을 비개인화 광고와 낮은 eCPM으로 강등시킵니다.
- 다섯 가지 범인: 누락/만료 문자열, 잘못된 CMP ID, 선언되지 않은 벤더, 형식이 잘못된
gdprApplies, 죽은 Consent Mode 신호. - 기기에서 광고 서버까지 디버깅: 캡처, 디코딩, 요청 검사, Consent Mode 확인, GAM 점검.
- 개인화 대 NPA 비율을 지속적으로 추적하세요 — FlexyConsent 같은 인증 CMP는 유효한 문자열과 올바른 Consent Mode v2 신호를 기본값으로 만듭니다.