
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.
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.
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.
A tela Saúde do site avisa que faltam extensões como intl, imagick ou zip: instale no PHP 8.3, reinicie o…
Chegou um chamado sem passo a passo e sem exemplo. Veja como virar esse relato em um caso de teste…
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…
O Search Console marca suas páginas 2, 3 e 4 como alternativas da página 1? Ajuste a tag canônica do…
Um módulo de terceiro plantou um banner no topo da loja e você não quer desinstalar nada: tire o bloco…
Importou o banco de produção e o site pula para o domínio antigo? Rode o UPDATE em core_config_data, limpe o…