Samuel Arendt

Consentimento também entra no orçamento de performance

O banner de cookies é a primeira coisa que o usuário vê no seu site. E provavelmente a mais lenta.

O OneTrust, que é o padrão de mercado, entrega um LCP de 491ms. O c15t, uma alternativa open source, entrega 30ms. São 0.6 KB de bundle total contra 1.1 KB do OneTrust. E roda inteiro no seu domínio, sem cookies de terceiros, sem scripts externos, sem dados saindo da sua infra.

Eu fico pensando em quantos times gastam semanas otimizando Core Web Vitals, cortando KB de JavaScript, lazy-loading imagens, e depois colam um script de consent de terceiro que destrói o LCP na primeira visita. É o tipo de coisa que ninguém questiona porque "todo mundo usa".

O c15t é headless. Você controla a UI inteira. Funciona com React, Next.js, Vue, Svelte, Astro. Tem integração com GTM, PostHog, Meta Pixel, TikTok, LinkedIn. É tree-shakable, tipado em TypeScript, e tem suporte a SSR. A licença é GPL-3.0.

Para quem precisa de compliance real com GDPR, o modelo é opt-in estrito: nenhum tracking acontece antes do consentimento explícito. Tem geo-detection, audit logging, e internacionalização embutidos.

Contexto importante. O OneTrust é uma plataforma de governança de privacidade com legal review, scanning automatizado de cookies, relatórios de compliance e suporte jurídico. Se o time precisa disso tudo, o c15t não substitui. Agora, se a necessidade é um banner de consent que não destrua a performance e que você controle de verdade, é outra conversa.

1.6k stars no GitHub. Última release em março de 2026.

Medir o banner no mesmo teste que o resto do LCP

Os 30 ms do c15t e os 491 ms do OneTrust vêm do CookieBench. Servem para mostrar que o script de consentimento entra no LCP. Não fecham a decisão sozinhos. O número que importa é o do seu site, na primeira visita, com cache frio, na mesma geografia em que o tráfego chega.

Nesse recorte o banner compete com hero, fontes e qualquer tag que o marketing já colocou no <head>. Se o time já trabalha com um teto de LCP no mobile, o CMP precisa caber nele. Medir só a home autenticada, ou só a visita que já aceitou cookies, esconde o pico: ele acontece no visitante novo.

Além do LCP, olhe origem das requisições, handshake TLS extra, bytes de JavaScript no thread principal e o INP do próprio diálogo. O c15t entra como pacote no bundle da aplicação. O OneTrust, no benchmark citado, chega como runtime de terceiro. A diferença prática está aí: um passa pelo seu build, o outro abre conexão nova antes do conteúdo.

Repita o teste depois de cada alteração no GTM. Times que cortam KB no app e deixam o container de tags solto perdem o ganho na semana seguinte. Field data (CrUX ou RUM) confirma o laboratório; laboratório sozinho anima slide.

Quem guarda o registro quando o script deixa o CDN

Tirar o CMP de um domínio de terceiro muda o lugar da prova. O c15t pode rodar no seu domínio, com audit logging e geo-detection. Isso é útil. Também traz a pergunta para dentro da casa: onde o registro vive, por quanto tempo, quem consulta depois de um incidente, qual versão da política estava vigente naquele clique.

Armazenar a escolha só no browser resolve preview e site estático. Não responde, sozinho, a um pedido que pede evidência de opt-in de um usuário específico meses depois. Se o time precisa desse rastro, precisa de backend próprio, do hosted da c15t, ou de outro sistema de registro. Essa escolha é de dados, não de CSS do banner.

A UI headless ajuda o design system. Não escreve a política. Alguém ainda redige as categorias (necessário, analytics, marketing), o texto em português, o comportamento para menor de idade, e o que acontece quando a pessoa recusa. Sem isso o componente fica alinhado ao layout e o site continua disparando pixel.

Liste um responsável por política, um por implementação e um por auditoria. Se os três forem "o frontend", o registro vai apodrecer no localStorage até o primeiro questionário de cliente enterprise.

Pixels e GTM só carregam depois da escolha

O repositório lista integração com GTM, PostHog, Meta Pixel, TikTok e LinkedIn. O valor aparece só se o carregamento estiver condicionado. Um container GTM com tags em All Pages ignora o banner, qualquer que seja a biblioteca.

A regra é chata de auditar: nenhum script de medição ou anúncio sobe antes do opt-in explícito, no recorte GDPR que o produto adotou. Isso inclui tag "só de teste", chat de terceiro e heatmap. A revisão precisa olhar o HTML inicial, o GTM e os imports que sobem SDK no cliente.

Se o marketing depende de Consent Mode v2, a troca do CMP tem que preservar os sinais denied por padrão e a atualização depois da escolha. Senão a performance melhora e a atribuição quebra. Ou a atribuição segue e o opt-in vira teatro.

Tree-shaking e TypeScript reduzem superfície no bundle. O inventário de tags ainda cabe numa tabela com origem, categoria de consentimento e dono. Sem dono, a tag volta. SSR no c15t evita flash de banner sem estado; não impede um useEffect órfão de importar o pixel.

A suíte de privacidade cobre um trabalho que o banner não faz

OneTrust, na prática de mercado, é plataforma de governança: revisão jurídica, scanning de cookies, relatórios, suporte. O c15t não promete esse pacote. Se o jurídico já opera em cima desses relatórios, remover a suíte porque o LCP está alto abre um buraco no dia seguinte.

Dá para separar as peças. Banner e orquestração no frontend; scanning e lista de vendors em outra ferramenta; DSR e contratos onde já estão. Performance, prova de consentimento e parecer jurídico são três custos. O c15t compete no primeiro e, com backend, no segundo. No terceiro, só se o time interno absorver o trabalho.

Antes do npm install, o jurídico lê a licença do repositório e o DPO descreve o que considera prova suficiente. Sem essa conversa, engenharia otimiza milissegundos e compliance descobre a troca no trimestre seguinte, em cima de um questionário de cliente.

Critério para sair do script de terceiro neste trimestre

A troca entra no sprint quando quatro coisas coincidem: RUM ou CrUX mostra LCP ruim na primeira visita; o frontend já é dono do <head>; o jurídico aceita registro no stack da aplicação; existe dono para o inventário de tags. Se faltar a terceira, o time ganha milissegundos e perde a narrativa de compliance.

Comece por um site, não por todos. Compare uma semana de campo antes e depois, no mesmo canal de tráfego. Se o LCP de primeira visita não mexer, o CMP talvez não fosse o vilão. Se mexer e os pixels continuarem disparando sem opt-in, a troca foi cosmética.

1.6k stars e release em março de 2026 dizem que o projeto está ativo. Não dizem que o suporte vai atender o seu DPO no prazo de um incidente. Orçamento de performance e orçamento de risco jurídico precisam estar na mesma reunião. Sem isso cada área otimiza a própria métrica e o banner segue sendo o script que ninguém questiona.

Referências

#Arquitetura, #Estratégia, #Performance