O consentimento WordPress
que bloqueia antes do clique.
O OW Consent neutraliza os rastreadores no HTML antes de o visitante escolher, aplica o regime legal da jurisdição dele e inscreve cada decisão num registo encadeado que podes verificar. Onze perfis de conformidade, nove regimes nomeados — do RGPD à CCPA. Gratuito, GPL, sem versão Pro.
Porquê mais um plugin de consentimento?
O banner nunca foi o problema. Quase todos os sites têm um, e os rastreadores arrancam na mesma logo ao primeiro byte: o script do Analytics está escrito à mão no tema, o pixel publicitário corre a partir do rodapé, o iframe do YouTube deposita os cookies dele enquanto o banner aparece por cima. O clique em «Aceitar tudo» já não autoriza nada — limita-se a ratificar o que aconteceu antes.
A segunda armadilha é a cache. Assim que um plugin decide o HTML a partir do cookie do visitante, torna-se incompatível com uma cache de página — ou, pior, serve as escolhas de um visitante a outro. A terceira é a prova: o artigo 7.º, n.º 1 exige demonstrar o consentimento, e uma caixa assinalada algures na base de dados não demonstra coisa nenhuma.
O OW Consent parte destas três restrições. A marcação servida é idêntica para toda a gente, rastreadores neutralizados incluídos, e é o browser que liberta aquilo que o visitante autorizou. Cada decisão é acrescentada a uma cadeia de hashes assinada. E o regime aplicado — opt-in ou opt-out, link «Do Not Sell», sinal GPC vinculativo ou não — segue a jurisdição, não uma caixa marcada por defeito.
No modo estrito, ativo por defeito, o documento é reescrito à saída: scripts neutralizados em text/plain, iframes passadas para about:blank atrás de um cartão clicável, pixels substituídos por um GIF transparente, sugestões de ligação removidas. O visitante que nunca clica nunca carrega estes recursos.
Nada no caminho de renderização lê o cookie. O estado do visitante é reconstruído no browser e colocado na etiqueta html antes da primeira pintura. LiteSpeed, WP Rocket, Varnish ou um CDN podem guardar a página em cache sem nunca misturar dois visitantes.
Cada evento entra numa tabela encadeada, cada linha assinada em HMAC com o hash da anterior, e a âncora de cabeça guardada fora da tabela. E se o registo recusar escrever, a API responde 503, anula o cookie e não liberta rastreador nenhum: um consentimento que o site não consegue provar é um consentimento que não reivindica.
O que muda concretamente
Sem slogans. Eis as decisões técnicas que distinguem este produto.
No modo estrito — ativo por defeito — o documento inteiro é capturado à saída e reescrito em cinco passagens: os scripts passam a type text/plain com o URL guardado em data-owc-src, as iframes vão para about:blank atrás de um cartão «Aceitar» com o nome do fornecedor, os pixels de medição são substituídos por um GIF 1×1 transparente, os preconnect e dns-prefetch são removidos (uma simples sugestão já abre uma ligação TLS e entrega o IP), e os media de terceiros já catalogados perdem o autoplay. O catálogo incluído tem 175 assinaturas para 71 fornecedores, e podes acrescentar, corrigir ou apagar regras a partir do backoffice. Por defeito, um script de terceiros desconhecido passa; uma iframe desconhecida é bloqueada.
Nada do que o servidor produz depende do cookie do visitante: as mesmas etiquetas neutralizadas são servidas a toda a gente, e o runtime restaura-as no browser, pela ordem do documento, apenas para as categorias autorizadas. O estado é carimbado na etiqueta html antes da primeira pintura, por isso não há banner a piscar. O token de escrita é obtido de fresco antes de cada envio, nunca embutido em HTML guardado em cache: a obtenção tem um teto de 4 segundos e a ausência dele nunca bloqueia uma escolha.
RGPD, UK PECR, nLPD suíça, Lei 25 do Quebec, LGPD, CCPA, POPIA, PIPL, DPDP indiana, mais um perfil australiano e um perfil norte-americano genérico. O perfil não é decorativo: decide o modelo legal (opt-in, ou concedido até à recusa para a CCPA, o perfil norte-americano genérico e a Austrália), a presença do link «Do Not Sell or Share» — um clique executa mesmo o opt-out, não abre um painel —, o carácter vinculativo ou não do sinal Global Privacy Control, e tanto a língua como a autoridade de controlo citadas nos documentos gerados. A deteção por país existe, desativada por defeito.
Cada aceitação, recusa, alteração ou retirada entra numa tabela dedicada: linha assinada em HMAC-SHA-256 (ou SHA3-256) com o hash da anterior, âncora de cabeça guardada fora da tabela para que um truncamento fique à vista. Ficam inscritos um token de browser pseudónimo, o IP truncado, um hash do user-agent, a página, o perfil em vigor, a revisão exata do banner mostrado e o hash das políticas ligadas — nunca um nome nem uma morada. Um botão verifica toda a cadeia e diz onde ela quebra; a exportação CSV ou JSON leva um envelope que permite a um terceiro voltar a verificar um extrato. Retenção por defeito: 5 anos.
Vem desativado, para ativares quando quiseres: o scanner percorre as tuas próprias páginas via WP-Cron (25 URL por defeito, ajustável até 500), alternando entre página inicial, páginas, artigos, tipos de conteúdo e taxonomias. Três fontes distintas e rastreadas: o HTML servido, os cabeçalhos Set-Cookie — os únicos cookies que um varrimento do servidor consegue provar, e os únicos que nada consegue bloquear — e uma sonda na página reservada aos administradores com sessão iniciada, que apanha o que um gestor de tags injeta em runtime. Uma deteção transforma-se em regra de catálogo com um clique. E o relatório diz o que não conseguiu ler, em vez de fazer passar um varrimento parcial por um inventário.
Quatro documentos gerados como páginas WordPress versionadas — política de cookies, política de privacidade, aviso legal, termos e condições — na língua da jurisdição (francês, inglês, português), com a autoridade de controlo e a tabela de rastreadores saída do varrimento. A publicação é recusada enquanto houver um campo legalmente obrigatório por preencher, e cada documento leva um aviso a lembrar que deve ser revisto. Do lado dos direitos, o shortcode owc_dsar_form abre sete tipos de pedidos, verificados por uma ida e volta por e-mail; o prazo do artigo 12.º, n.º 3 começa a contar na confirmação de identidade, e o pedido abre em paralelo um pedido nativo do WordPress para que a exportação ou o apagamento cubram todos os plugins do site.
Face às alternativas
Dados verificáveis. Marcar apenas o que existe realmente na concorrência.
| Critério | OW Consent | Complianz | CookieYes | Borlabs Cookie |
|---|---|---|---|---|
| Modelo de negócio | Gratuito, GPL-2.0-or-later | Freemium (Pro pago) | Freemium (Pro pago) | Não anunciado |
| Chave de licença a ativar | Nenhuma | Para a versão Pro | Para a versão Pro | Não anunciado |
| Método de bloqueio dos rastreadores | Reescrita do HTML no servidor, 175 assinaturas incluídas e editáveis | Não anunciado | Não anunciado | Não anunciado |
| Registo de provas encadeado e verificável | Cadeia HMAC-SHA-256, âncora fora da tabela, verificação num clique | Não anunciado | Não anunciado | Não anunciado |
| Perfis de conformidade incluídos | 11 perfis, 9 regimes nomeados | Não anunciado | Não anunciado | Não anunciado |
| Banner de consentimento configurável | 4 posições, tema claro / escuro / automático | |||
| Portal de pedidos de exercício de direitos | Incluído: formulário, verificação por e-mail, prazo do art. 12.º, n.º 3 | Não anunciado | Não anunciado | Não anunciado |
| Onde ficam os consentimentos registados | Na base de dados do teu alojamento, sem serviços de terceiros | Não anunciado | Não anunciado | Não anunciado |
Três formas de integrar um formulário
Sem page builder proprietário imposto. Escolha a abordagem que se adequa ao seu stack.
<!-- O que o teu tema imprime -->
<script src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<iframe src="https://www.youtube.com/embed/VIDEO_ID"></iframe>
<!-- O que o visitante recebe antes de qualquer consentimento (modo estrito, por defeito) -->
<script type="text/plain"
data-owc-cat="analytics"
data-owc-vendor="Google"
data-owc-src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<span class="owc-embed-placeholder" data-owc-cat="social" data-owc-vendor="Google">
<span class="owc-embed-text">Google content blocked: this content uses cookies…</span>
<button type="button" class="owc-embed-accept" data-owc-cat="social">Accept Google</button>
<iframe data-owc-cat="social"
data-owc-src="https://www.youtube.com/embed/VIDEO_ID"
src="about:blank"></iframe>
</span>
<!-- Esta marcação é a mesma para toda a gente, cache de página incluída.
É o runtime, no browser, que restaura as etiquetas das categorias
autorizadas, pela ordem do documento. Uma retirada de consentimento
recarrega a página: um script já executado não se descarrega. -->Dúvidas razoáveis, respostas diretas
Sim, e o bloqueio vive na marcação, não numa promessa. No modo estrito, ativo por defeito, o documento é capturado à saída e cinco passagens reescrevem scripts, iframes, pixels, sugestões de ligação e media de terceiros. Duas limitações que deves conhecer: o bloqueio real assenta no catálogo de 175 assinaturas e nas assinaturas de código inline — um script de terceiros desconhecido é autorizado por defeito, uma iframe desconhecida é bloqueada —, e se desativares o modo estrito, só os scripts registados pelo WordPress são tratados, não os que estão escritos à mão no tema. Por fim, um documento com mais de 8 MB ou uma falha do motor de expressões regulares é servido intacto, em vez de partido.
Sim, foi essa a restrição de partida. O HTML servido é idêntico para todos os visitantes, rastreadores neutralizados incluídos, e o estado de consentimento é reconstruído no browser a partir do cookie e aplicado antes da primeira pintura. Nenhuma cache pode, portanto, servir as escolhas de um visitante a outro. A contrapartida é explícita: o regime do visitante é decidido do lado do cliente, logo, sem JavaScript nada fica registado. Um visitante sem JavaScript vê um bloco noscript, não carrega nada de não essencial, e nunca fica preso atrás de uma janela que não consegue fechar.
Decide o modelo legal: opt-in para o RGPD, o UK PECR, a nLPD suíça, a Lei 25, a LGPD, a POPIA, a PIPL e a DPDP; concedido até à recusa para a CCPA, o perfil norte-americano genérico e a Austrália. Decide também se o link «Do Not Sell or Share» aparece (só CCPA e perfil norte-americano genérico), se o sinal GPC é vinculativo (os mesmos dois perfis: nos outros, o sinal é refletido no ecrã mas nada fica registado), e tanto a língua como a autoridade de controlo dos documentos gerados. A deteção por país é opcional e vem desativada; falha fechada, ou seja, para o regime mais estrito. Duas limitações assumidas: sem granularidade por estado norte-americano nem por província canadiana, e o ficheiro MaxMind não é descarregado nem carregável pelo plugin — és tu que o colocas em uploads/ow-geoip/.
Prova tanto quanto a chave que o assina, e o plugin diz-to sem rodeios. Cada linha é assinada em HMAC com o hash da anterior e a âncora de cabeça é guardada fora da tabela, de modo que uma alteração, um truncamento ou um esvaziamento se veem na verificação. Mas se AUTH_KEY e AUTH_SALT não estiverem no teu wp-config.php e não tiveres definido OWC_LEDGER_KEY, a chave vem da base de dados: quem tenha acesso à base de dados pode voltar a assinar a cadeia. Nesse caso o plugin mostra um aviso no backoffice e reporta ele próprio que a cadeia já não está à prova de adulteração, em vez de continuar a afirmá-lo.
Não, e é importante dizê-lo antes de o adotares, não depois. O módulo implementa o TCF v2.2 do lado do browser — API __tcfapi, string TC codificada, cookie euconsent-v2 — mas não fornece um CMP ID: esse é atribuído pelo IAB Europe após registo e, sem ele, o módulo não emite absolutamente nada. O perímetro também é limitado: apenas o segmento Core, nenhuma publisher restriction emitida, duas funcionalidades especiais suportadas, sem âmbito global. Na prática, funciona como um CMP compatível não oficial, o que chega para muitas integrações mas não substitui um registo oficial — a Google AdSense, em particular, recusa-o em produção no EEE. O módulo vem desativado por defeito.
Desativar não toca em dados nenhuns: limita-se a retirar as tarefas agendadas. Ao apagar, duas coisas vão-se sempre, seja qual for a tua definição: as tarefas agendadas e a tabela dos pedidos de exercício de direitos, a única que contém dados diretamente identificáveis de terceiros e que, uma vez o plugin fora, deixa de ter qualquer limite de retenção. O resto — registo de consentimento, deteções do scanner, catálogo de rastreadores — sobrevive, a não ser que tenhas assinalado explicitamente o apagamento completo, desmarcado por defeito: a tua prova de consentimento ao abrigo do artigo 7.º, n.º 1 não deve desaparecer com uma desinstalação.
Sem versão Pro, sem chave de licença.
O OW Consent é publicado sob licença GPL-2.0-or-later. Tudo o que esta página descreve está no .zip que descarregas: nenhum módulo reservado, nenhuma subscrição, nenhum limite ao número de páginas, de consentimentos ou de pedidos.
- Está tudo incluído: banner, bloqueio de rastreadores, scanner, catálogo editável, registo encadeado, gerador de documentos, portal de pedidos, Consent Mode v2, TCF v2.2 e Global Privacy Control.
- O .zip descarrega-se em optionweb.dev: instala-o em Plugins → Adicionar novo → Carregar plugin. WordPress 6.2 no mínimo — abaixo disso, o plugin recusa arrancar e di-lo, em vez de mostrar um banner que não bloqueia nada.
- Nenhum serviço de terceiros, nenhuma verificação de licença, nenhum rastreador acrescentado: consentimentos, pedidos e documentos ficam na base de dados do teu alojamento.
- O código está sob GPL-2.0-or-later, legível e modificável, com os pontos de extensão documentados: filtros owc_settings, owc_scripts_catalog, owc_blocker_allowlist, owc_policy_template, e as ações do registo.