Como um texto envelhece sem ninguém tocar nele

Em 22 de julho publiquei um post cujo título é uma afirmação sobre este site: Medir sem cookies: por que este blog não tem banner de consentimento. Era compromisso público, no presente do indicativo, sobre o que este endereço faz com o navegador do leitor.

Em 1º de setembro submeti a conta do Google AdSense, que segue em análise. Hoje, 4 de setembro, nenhum anúncio está no ar e o site não grava cookie de publicidade. Por isso dá para escrever este texto na janela entre a decisão e o efeito; depois da ativação, ele seria justificativa.

Quando um compromisso público passa a ter data para deixar de valer, o que se deve ao leitor não é uma correção no dia seguinte ao vencimento. É o inventário, datado, do que vai deixar de ser verdade, publicado antes. Fiz esse inventário. O defeito do artigo de julho tinha prazo e tinha causa errada, escrita desde julho.

Uma página que se corrige sozinha

O portão por variável de ambiente é doutrina antiga aqui. Em os gates que barraram erro real neste blog contei que os seis espaços de anúncio já ficavam inertes com a variável vazia. Setembro estendeu o portão ao texto legal e ao consentimento.

A variável PUBLIC_ADSENSE_CLIENT governa seis pontos do código e hoje está vazia. Enquanto estiver vazia, nenhum renderiza: carregador do AdSense, componente de consentimento, seis espaços de anúncio, botão do rodapé, a seção da política que descreve tudo isso e a frase sobre cookies do arquivo servido a modelos de linguagem, que entrou no portão nesta rodada. Quando existir, a política ganha a seção de cookies e anúncios, a numeração se desloca por uma função e o item que hoje nega anúncios e cookies some sozinho.

A segunda camada é nova. É uma guarda de compilação, instância do contrato executável. A data do texto legal mora na constante DATA_TEXTO_ANUNCIOS, hoje vazia; se a variável existir e ela continuar vazia, a compilação reprova e nada é publicado. Preencher a variável hoje reprovaria a compilação, e nenhum anúncio iria ao ar. O código sequer solicita anúncio, porque a chamada ao Google existe só como comentário e o consentimento está fixado em falso.

O aviso chegou antes do inventário

Nada disso é hipótese de laboratório. O carregador esteve sem portão nenhum no ramo principal por 2 dias, 11 horas e 27 minutos, do momento em que entrou ao momento em que foi corrigido. O código de editor da conta (ca-pub-…) estava escrito direto no arquivo. O tempo em produção acompanha esse intervalo, com a defasagem de cada implantação. São quatro datas de calendário tocadas, de 1º a 4 de setembro, e menos de dois dias e meio decorridos. A régua que declarei em agosto — não entrar aqui o que não dá para auditar — vale contra arredondamento a meu favor.

O registro público prova o carregador sem condição no ramo principal e a etapa de Core Web Vitals reprovando. O LCP da página inicial ficou em 7.092 ms, contra a meta de 2.500 ms. Essa etapa roda com continue-on-error por decisão que expliquei naquele texto de agosto. Medida com variância informa, invariante bloqueia, e o vermelho visível bastaria para a decisão humana. Em setembro o vermelho apareceu em quatro integrações seguidas e ninguém olhou. A parte da decisão que dependia de alguém ver não funcionou.

O registro público não prova o cookie de terceiro. O test_cookie de googleads.g.doubleclick.net apareceu naqueles dias na auditoria que rodei na minha máquina e ficou na mensagem da correção. É evidência de dono, não auditoria independente. Depois do portão, deixou de aparecer. A mesma ressalva vale hoje: minhas medições rodam contra o servidor local, não contra o domínio ao vivo, e cookie de infraestrutura da hospedagem não se prova neste repositório.

O que cai e o que fica

O método foi mecânico. Cruzei cada afirmação do artigo com o código, uma por vez. Uma afirmação cai quando, mantida a redação atual, passa a descrever errado o site no dia da ativação; a queda é de escopo, não de princípio. Pela minha contagem, doze cairão na ativação e doze continuam valendo depois dela. O número é meu, não é objetivo. Cai o que tem como sujeito este site, fica o que descreve a ferramenta de medição, a LGPD ou o Google Analytics.

O custo se concentrará nas três peças mais visíveis. Uma é o título. Outra é a abertura (“Este blog não tem banner de consentimento e ainda assim mede visitas, páginas e Core Web Vitals reais”). A terceira é a citação destacada (“Não é uma zona cinzenta: sem identificador persistente, não existe o que consentir”). O endereço da página também carrega a promessa, e trocá-lo quebraria ligações externas e uma interna.

Uma frase se salva por detalhe gramatical. Em “não grava nada no seu navegador”, o sujeito é o Cloudflare Web Analytics, não o site, que guarda a preferência de tema no armazenamento local.

E aqui declaro o que a auditoria encontrou contra mim. O contador de visitas escreve a chave sessionStorage['fluxonar-viewed:<id>'] com o valor '1', nas 46 páginas geradas. A escrita acontece sem clique nenhum, na primeira página de cada aba, assim que o endereço de contagem responde. Não é cookie, não é identificador, some ao fechar a aba e não vai a lugar nenhum. Ainda assim, não estava declarado na seção 2 da política, que listava três itens de armazenamento e não esse. Era a única divergência entre o que o site grava e o que dizia gravar, e foi corrigida nesta mesma rodada: a seção agora descreve a marca de sessão, com a chave, o valor e o momento em que é escrita.

A palavra que envelheceu foi “porque”

Encontrei mais que frases com prazo: uma explicação errada. “A diferença não é uma zona cinzenta de conformidade: é a ferramenta de medição escolhida.” O fecho do texto repete a ideia. Um erro que aparece na abertura e no fecho está na premissa do raciocínio.

A ausência do banner sempre dependeu de duas condições: medir sem identificador e não haver outro código de terceiro com identificador no site. O artigo enxergou a primeira e a tratou como causa, porque em julho não havia anúncio para tornar a segunda visível. A demonstração está no que já foi construído e continua desligado. Na ativação, a ferramenta de medição não mudará uma linha e o consentimento passará a ser exigido assim mesmo. A mensagem em si vem da plataforma de consentimento do painel do Google, de conta em análise, e este repositório não a prova.

Confundi condição necessária com condição suficiente. Foi preciso uma mudança que ainda não aconteceu para o erro ficar visível.

A régua que sobreviveu foi a que escrevi contra mim mesmo

A metade que fica é exame. O post de julho define quando um identificador exige consentimento e acrescenta uma exigência. É preciso honrar a recusa de verdade, não apenas exibir o banner e ignorar o clique em “recusar”. Escrevi isso quando não havia anúncio nenhum aqui, e continua não havendo. A conta foi submetida em 1º de setembro e segue em análise.

O código responde assim: quando a variável existir, os quatro sinais entram negados por padrão, declarados no <head> antes do carregador do Google. Hoje o componente está atrás do mesmo portão e não emite uma linha. Nenhuma das 46 páginas geradas contém dataLayer. Continua pendente a origem dos nomes e do formato desses sinais, vindos de documentação secundária; a confirmação exige a conta aprovada. É implementação com dívida registrada, ainda sem conformidade validada.

A política tem portão; o texto publicado não

O código tem portão e guarda de compilação. O texto publicado é markdown estático, e nenhuma das doze afirmações que caem se corrige sozinha.

E não é só o artigo de julho. Outro texto do acervo repete a promessa por ligação interna, afirmando que este blog não usa cookie nem identificador de visitante. E o /llms.txt, servido a modelos de linguagem, trazia a mesma promessa numa linha escrita à mão.

As duas são verdadeiras hoje e ficariam falsas na ativação, mas só uma tinha conserto possível. O /llms.txt é gerado por código, então recebeu o mesmo portão nesta rodada; era o pior lugar para deixar uma afirmação envelhecer, porque nenhum humano passa por ali para conferir. O post continua sendo markdown estático, e não há onde pendurar a trava. A peça que escapa do portão não é a invisível: é a que não tem estado.

Duas incoerências dessa família estavam no ar, sem depender de ativação. A página de divulgação de afiliados dizia que a política de privacidade “também cobre o uso do Google AdSense”, enquanto a política publicada ia da seção 1 à 9 sem seção de cookies ou anúncios; a frase foi reescrita nesta rodada para descrever o que a política de fato cobre. A segunda não tem conserto de código: o orçamento anti-CLS do AdSense, de 10 de julho, descreve no presente do indicativo um carregamento que hoje não acontece. Nos dias em que aconteceu, aconteceu do jeito que aquele texto dizia evitar, com 7.092 ms de LCP. Esse já envelheceu, sem esperar a ativação.

Sequência, não errata

Errata conserta a frase e apaga o raciocínio; o erro da causa única é conferível apenas se o post original continuar de pé, lado a lado com este. Das quatro peças que precisam existir antes de a variável ser preenchida, duas estão construídas. Faltam o tratamento editorial do texto de julho e a revisão de um advogado — que não sou. Este texto não é avaliação jurídica.

Como achar as frases que já têm data para morrer

  1. Separe as afirmações sobre a ferramenta das afirmações sobre o produto. Envelhecem em ritmos diferentes.
  2. Marque o sujeito gramatical de cada promessa. “A ferramenta não grava cookie” e “o site não grava cookie” não são a mesma frase.
  3. Conte as causas. Onde há “por isso”, há cadeia causal declarada: confira se a causa apontada é suficiente ou apenas necessária.
  4. Liste as decisões tomadas e ainda não executadas. Cada uma é o prazo de validade de alguma frase publicada.
  5. Pergunte de cada frase quem a corrige quando a decisão entrar em vigor: a compilação ou a memória de alguém.

Em agosto escrevi que a trava tem de ser estado do sistema, e não lembrete na memória de alguém. Setembro acrescenta o limite da regra. Texto publicado não tem estado onde pendurar a trava. Markdown não tem variável de ambiente. Para a prosa, o único substituto do portão é o inventário datado, escrito antes de o efeito chegar. Depois, já não é inventário: é conserto.

Fontes

O repositório deste blog é privado, então apontar para os arquivos seria proveniência e não fonte pública: o link não abriria para quem lê. Por isso os números e os trechos de que este texto depende estão reproduzidos na íntegra num extrato autocontido, que qualquer leitor abre sem acesso ao repositório.

  • Extrato público desta medição, com a janela sem portão, o registro do gate de Core Web Vitals, as contagens de página com e sem a variável, a marca de sessão do contador e as duas afirmações colaterais citadas literalmente — extrato de 2026-09-04, material próprio, verificado em 2026-09-04.
  • A contagem de doze e doze é minha, pelo critério exposto no texto, e não é medida objetiva. A observação do cookie de terceiro foi auditoria local, não artefato de integração contínua. As medições de desempenho rodam contra o servidor local do projeto, não contra o domínio ao vivo, e cookie eventualmente gravado pela camada de hospedagem não é observável por esse método. Os limites estão declarados no próprio extrato.