Cookies

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.

Post Recentes

Módulos PHP 8.3 faltando na Saúde do site do WordPress: como instalar

A tela Saúde do site avisa que faltam extensões como intl, imagick ou zip: instale no PHP 8.3, reinicie o…

5 horas atrás

Caso de teste PHPUnit a partir do bug: do relato solto para o teste que falha

Chegou um chamado sem passo a passo e sem exemplo. Veja como virar esse relato em um caso de teste…

1 dia atrás

Bloquear .env e .git no nginx: as regras que ainda deixam o arquivo vazar

Negar /.env no nginx parece resolvido até alguém pedir /wp-content/uploads/.env ou backup.sql. As regras que testei e os furos que…

3 dias atrás

Canonical errado no Yoast: corrigindo pelo filtro wpseo_canonical

O Search Console marca suas páginas 2, 3 e 4 como alternativas da página 1? Ajuste a tag canônica do…

3 dias atrás

Layout XML do Magento 2: remover bloco de módulo de terceiro

Um módulo de terceiro plantou um banner no topo da loja e você não quer desinstalar nada: tire o bloco…

3 dias atrás

Restaurar dump do Magento 2 em outro servidor: trocar a base_url no SQL

Importou o banco de produção e o site pula para o domínio antigo? Rode o UPDATE em core_config_data, limpe o…

4 dias atrás