Depurando a string IAB GPP no console do navegador: tutorial passo a passo
Por que os problemas de GPP são difíceis de perceber
Quando um visitante americano recusa a venda ou o compartilhamento de seus dados, essa escolha precisa chegar a todos os parceiros de anúncios da página. Com o IAB Global Privacy Platform (GPP), ela viaja como uma string compacta e uma lista de IDs de seção. Se qualquer um dos dois estiver errado — ausente, desatualizado ou com a seção errada — nada quebra de forma visível. Os anúncios continuam carregando, o banner continua com boa aparência, e o problema só aparece depois, quando parceiros ignoram exclusões ou dão lances menores no seu inventário.
A boa notícia é que dá para inspecionar quase tudo pelo console do navegador. Este tutorial percorre as verificações na ordem em que as executaríamos em uma página no ar.
Passo 1: confirmar que a API existe e está pronta
Um CMP compatível com GPP expõe uma função global __gpp. Abra o DevTools na sua página e execute um comando ping:
__gpp('ping', function (data) { console.log(data); });
O objeto retornado diz muito logo de cara:
- gppVersion — deve indicar 1.1 nas implementações atuais.
- cmpStatus — se o CMP foi carregado ou encontrou um erro.
- cmpDisplayStatus — se o banner está visível, oculto ou desativado para este visitante.
- signalStatus — «ready» quando o CMP definiu um estado de consentimento, «not ready» enquanto ainda está decidindo.
- supportedAPIs — as seções que o CMP consegue produzir.
- applicableSections — os IDs de seção que se aplicam a este visitante agora.
- gppString — a própria string codificada.
Se __gpp for undefined, o stub do CMP está ausente ou carrega tarde demais. O stub precisa estar no lugar antes de qualquer script de anúncio que o espere; do contrário, esses scripts não verão nenhum CMP e ficarão esperando ou seguirão sem sinal.
Passo 2: verificar a seção aplicável
Cada estrutura de privacidade no GPP tem um ID de seção numérico. Os que os publishers encontram com mais frequência são 2 (EU TCF v2), 5 (TCF canadense), 7 (US National, «usnat») e do 8 em diante para seções de estados individuais como Califórnia, Virgínia, Colorado, Utah e Connecticut. Um visitante de um estado americano normalmente deve ver em applicableSections a seção nacional ou a do respectivo estado, e não a da UE.
Teste a partir de vários locais. Um bug comum é um CMP que detecta a geografia corretamente para o banner, mas grava uma seção padrão na string de qualquer forma, ou o contrário. Usando uma VPN ou as ferramentas de pré-visualização do seu CMP, compare o que o banner mostra com o que applicableSections informa.
Passo 3: ler os dados da seção
Em vez de decodificar a string à mão, peça ao CMP a seção já interpretada:
__gpp('getSection', function (data, success) { console.log(data, success); }, 'usnat');
Na seção US National, os campos de exclusão seguem uma convenção simples: 0 significa não aplicável, 1 significa que o usuário optou por sair e 2 significa que o usuário não optou por sair. Concentre-se primeiro nestes campos:
- SaleOptOut e SharingOptOut
- TargetedAdvertisingOptOut
- Os campos notice correspondentes, que registram se o visitante recebeu aviso de cada prática
Agora faça a exclusão na página — clique no seu link «Do Not Sell or Share» ou alterne a configuração na central de preferências — e execute getSection novamente. Os campos de exclusão devem mudar de 2 para 1. Se não mudarem, a interface e o sinal estão fora de sincronia.
Passo 4: testar o caminho do Global Privacy Control
Várias leis estaduais exigem que as empresas tratem um sinal Global Privacy Control como uma exclusão. Ative o GPC em um navegador ou extensão compatível, confirme que navigator.globalPrivacyControl retorna true no console e então carregue a página em uma sessão nova. Os campos de exclusão relevantes já devem indicar 1 sem que o visitante toque no banner. Algumas seções também incluem um campo indicando que a escolha veio de um sinal GPC.
Passo 5: observar eventos, não apenas instantâneos
Os scripts de anúncios não devem ler a string uma única vez no carregamento da página e esquecê-la. Registre um listener para ver o que os parceiros veem:
__gpp('addEventListener', function (evt) { console.log(evt.eventName, evt.pingData); });
Você deve observar eventos como listenerRegistered, signalStatus e sectionChange. Quando o visitante altera uma escolha, um evento sectionChange com uma string atualizada deve se seguir. Se o seu wrapper de header bidding ou a integração com o ad server só lê a string antes de signalStatus virar «ready», pode enviar um valor vazio ou desatualizado.
Passo 6: acompanhar a string até as requisições de anúncios
Por fim, abra a aba Network e filtre suas requisições de anúncios. Muitos endpoints de anúncios aceitam os parâmetros gpp e gpp_sid (a string e os IDs de seção aplicáveis). Verifique se:
- ambos os parâmetros estão presentes nas requisições de visitantes dos EUA;
- a string coincide com a retornada por ping no momento da requisição;
- após uma exclusão, as requisições seguintes carregam a nova string e não uma em cache.
Se você usa o Prebid.js, confirme que o módulo de gerenciamento de consentimento está configurado para GPP e inspecione as requisições de lance que saem do wrapper, além da chamada final ao ad server.
Padrões de falha comuns
- O stub carrega depois das tags de anúncios — os parceiros não veem nenhum CMP.
- Seção errada para a região — seção da UE enviada para tráfego dos EUA, ou nenhuma seção.
- Interface e sinal fora de sincronia — a chave muda, a string não.
- GPC ignorado — o sinal do navegador nunca se torna uma exclusão.
- Strings desatualizadas nas requisições — o wrapper guarda em cache o primeiro valor que viu.
Principais conclusões
- Comece pelo ping: versão, status, seções aplicáveis e a string contam a maior parte da história.
- Use getSection para ler os campos de exclusão; 1 significa que optou por sair, 2 significa que não optou.
- Teste separadamente o link de exclusão e o GPC e confirme que ambos alteram o sinal.
- Escute os eventos e espere um sinal «ready» antes que as requisições de anúncios leiam a string.
- Verifique gpp e gpp_sid em requisições de rede reais, antes e depois de uma exclusão.