Google Consent Mode v2 no WordPress: default denied antes do gtag rodar

O Google Ads acusa falta de sinal de consentimento, o GA4 avisa que o Consent Mode não está configurado e o banner de cookies está lá, funcionando. O problema é ordem de carregamento: o gtag.js subiu e mediu antes de o banner existir na página. O comando default tem que ser a primeira coisa do head.

Prioridade 1 no wp_head

add_action('wp_head', function () {
    echo '<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag("consent", "default", {
  ad_storage: "denied",
  ad_user_data: "denied",
  ad_personalization: "denied",
  analytics_storage: "denied",
  wait_for_update: 500
});
if (localStorage.getItem("rt_consent") === "granted") {
  gtag("consent", "update", {
    ad_storage: "granted",
    ad_user_data: "granted",
    ad_personalization: "granted",
    analytics_storage: "granted"
  });
}
</script>';
}, 1);

A prioridade 1 é o pulo do gato. Plugin de GA4 e container do GTM se penduram no wp_head com a prioridade padrão 10, então qualquer número menor garante que o default chegue antes. O wait_for_update: 500 dá meio segundo para o banner responder antes de o gtag mandar o ping sem cookie.

O update no clique do banner

document.addEventListener('DOMContentLoaded', function () {
  var botao = document.getElementById('aceitar-cookies');
  if (!botao) { return; }

  botao.addEventListener('click', function () {
    localStorage.setItem('rt_consent', 'granted');
    gtag('consent', 'update', {
      ad_storage: 'granted',
      ad_user_data: 'granted',
      ad_personalization: 'granted',
      analytics_storage: 'granted'
    });
  });
});

Três armadilhas me custaram tempo aqui. O update precisa usar a mesma função gtag declarada no default, empurrando para o mesmo dataLayer: se o plugin de cookies cria um dataLayer próprio, o update cai no vazio. ad_user_data e ad_personalization são campos que a v2 trouxe, e mandar só ad_storage e analytics_storage bastava na v1, hoje não basta. E sem guardar a escolha, o granted morre na próxima página — por isso o default relê o localStorage.

Para conferir, abra o Tag Assistant e olhe o status de cada chave antes e depois do clique. Se já aparecer concedido no primeiro carregamento de quem nunca clicou, tem outro ponto do tema injetando consentimento.

Se travou nisso e precisa de ajuda, me chama aqui.

Dúvidas? Faça um comentário logo abaixo ou envie uma mensagem clicando aqui.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *