Tech Contra Bolsonaro: SEO técnico e LGPD em 18 dias
SEO & AEODestaque

Tech Contra Bolsonaro: SEO técnico e LGPD em 18 dias

Resumo para IA

Paulo H. Alkmin foi um dos cerca de dez voluntários do Tech Contra Bolsonaro (techcontrabolsonaro.dev), um hub de mobilização feito em 18 dias para o segundo turno da eleição presidencial de 2026 no Brasil. O coletivo fala sempre como grupo e Paulo nunca foi porta-voz dele; na parte técnica, definiu a ordem do trabalho de SEO e tomou várias das decisões de segurança e privacidade. Auditou o site em Next.js 16 para SEO, AEO e GEO e transformou os achados em 28 issues priorizadas que guiaram o time. Corrigiu rastreamento e indexação (404 real no lugar de soft-404, lista de ferramentas renderizada no servidor, noindex nas páginas de envio), criou dados estruturados em JSON-LD, um sitemap com lastmod real, o llms.txt e uma linha Content-Signal declarando busca e respostas de IA liberadas e treinamento de modelos vetado. Escreveu a política de privacidade de acordo com a LGPD e implementou a remoção de metadados das fotos e vídeos enviados, eliminando GPS e dados do aparelho sem reencodar os arquivos. Abriu 25 pull requests, todos mergeados. Segundo o Google Search Console, os cliques orgânicos foram de cerca de 2 para 67 por dia entre 9 e 29 de outubro de 2026. A janela começa dois dias depois do início do projeto e cobre semanas de muita busca ligada às eleições, então o número mistura o trabalho de SEO com a indexação de um site novo e a demanda eleitoral.

Trabalho voluntário de SEO, AEO e privacidade num hub em Next.js feito em 18 dias pro segundo turno de 2026. Os cliques orgânicos foram de 2 pra 67 por dia na eleição.

31 de outubro de 2026
SEO & AEO
Tecnologias
Next.js 16Technical SEOJSON-LDllms.txtSupabaseLGPDContent Security PolicyVercel

Em 7 de outubro de 2026, um grupo de trabalhadores de tecnologia começou a construir um site com um prazo que não ia mudar de jeito nenhum: o segundo turno da eleição presidencial, 18 dias depois. Dali saiu o Tech Contra Bolsonaro, um hub com ferramentas interativas de mobilização, um manifesto aberto pra assinaturas, um feed moderado de fotos e vídeos enviados pela comunidade e um blog editorial.

Eu era um dos cerca de dez voluntários. Peguei a parte de busca (SEO, AEO e GEO) e acabei ficando também com privacidade e segurança. O coletivo fala sempre como grupo, e eu nunca fui porta-voz dele. Dentro do time, defini a ordem do trabalho de SEO, escrevi a política de privacidade que o coletivo assina e tomei várias das decisões em que o padrão "seguro" era a escolha errada pra esse site. Também escrevi boa parte do código, e continuo ajudando a manter a infraestrutura do projeto.

O site que o Google via

A engenharia por baixo era cuidadosa. O navegador nunca escrevia direto no banco: todo envio passava por uma Edge Function no Supabase que conferia o token do Cloudflare Turnstile, os campos, o tipo e o tamanho do arquivo, e o conteúdo novo ficava pendente até alguém aprovar. O CI aplicava as migrations antes de liberar o deploy de produção, e um ambiente em Docker Compose com dados de seed deixava qualquer pessoa rodar tudo na própria máquina.

O Google via outra coisa. O catálogo de ferramentas só existia depois que o JavaScript rodava, página inexistente respondia com status 200 e um H1 dizia "Carregando...".

Pra um robô de busca, o site estava quase vazio.

Quem decidiu a ordem foi o calendário

Auditei o site e separei o que encontrei em 28 issues, cada uma com severidade, estimativa de esforço, ganho esperado, dependências e critérios de aceite. Uma página que o Google encontra no dia 16 faz muito pouco por um voto no dia 18, então tudo o que travava o rastreamento veio primeiro. Essas correções entraram em 10 e 11 de outubro: 404 de verdade, a lista de ferramentas renderizada no servidor, o H1 "Carregando..." fora do ar, noindex nas páginas de envio e og:image em toda página interna, pra que o link compartilhado tivesse uma prévia decente.

Com umas dez pessoas contribuindo no tempo livre, a lista de issues fez um segundo trabalho. Qualquer pessoa pegava um item e sabia o que contava como "pronto" sem precisar me perguntar antes.

Explicando pras máquinas o que cada página é

Com o rastreamento resolvido, faltava o Google entender o que encontrava. Criei JSON-LD da organização e do site, um WebApplication pra cada ferramenta interativa, ItemList pro catálogo, breadcrumbs, WebPage e ImageObject com creditText, pra que a foto da comunidade leve o crédito que o autor escolheu. O sitemap ganhou datas lastmod reais e URLs estáveis pras mídias. Página com menos de 40 palavras de texto recebe noindex automático, e assim envio de uma linha só não dilui as páginas que importam.

Teve encanamento também. Migrei o domínio canônico com redirecionamentos 301 que preservam o caminho, criei os campos seo_title e seo_description pra quem edita escrever o texto de busca sem mexer em código, e modelei um template pras páginas completas de ferramenta.

Pros buscadores com IA, o site publica um llms.txt e uma linha Content-Signal no robots.txt: search=yes, ai-input=yes, ai-train=no. Ela diz que buscadores e respostas de IA podem usar o conteúdo do coletivo e que treinar modelo com ele não pode. Cada robô decide se respeita ou não, mas a preferência fica registrada. Já escrevi sobre por que entidades e dados estruturados pesam tanto hoje no cenário de SEO em 2026.

Assinatura é opinião política

Quem assina um manifesto político revela uma opinião política. A LGPD coloca opinião política entre os dados pessoais sensíveis (art. 5º, II) e restringe como esses dados podem ser tratados (art. 11). Num site político, com adversário motivado do outro lado, cada campo de formulário vira risco.

Escrevi a política de privacidade: bases legais, operadores, transferência internacional, prazos de retenção e os direitos do titular do art. 18. O coletivo assina como grupo, sem nomes. O telefone virou opcional, o formulário de envio passou a avisar que o crédito é público (e sugere usar pseudônimo), e a política diz quem é o responsável legal pelos dados e como falar com ele.

Depois vieram os uploads. Foto de celular tirada num ato de rua pode carregar as coordenadas de GPS de onde foi feita e o modelo do aparelho. Escrevi a remoção de metadados direto nos bytes do arquivo, sem reencodar nada, pra JPEG (inclusive progressivo e MPF), PNG, WebP, GIF e MP4. Cada formato usa uma lista de permissão, que mantém só o que o arquivo precisa pra ser exibido e joga fora todo o resto. Sai o GPS, sai o XMP, saem os boxes específicos de fabricante, e sai junto o que algum celular novo inventar de gravar no ano que vem. Os pixels decodificados e o framemd5 de cada vídeo ficaram idênticos aos originais.

Sai também o C2PA, o dado de procedência que pode provar que uma foto é autêntica. Em foto de gente num protesto, escolhi a privacidade das pessoas.

O mesmo trabalho pegou um problema maior: o CI nem publicava a Edge Function de envio.

A correção dos metadados ia passar em todos os testes e nunca chegar à produção.

Duas decisões de segurança

Endureci a Content Security Policy: tirei o unsafe-eval, restringi connect-src e frame-src, defini object-src 'none' e mantive o cache ISR da home funcionando no meio disso tudo.

O HSTS ficou sem preload, de propósito. Tirar um domínio da lista de preload dos navegadores leva meses, e o preload exige includeSubDomains, então a regra prenderia todos os subdomínios junto. A duas semanas de uma eleição, com a infraestrutura mudando todo dia, eu não queria que o site fizesse uma promessa que não dava pra desfazer. Qualquer scanner vai apontar a falta do preload, e pra esse site tudo bem.

Todo PR meu passou pela suíte completa de testes, lint, tsc, build e uma verificação num build de produção local. A suíte foi de cerca de 368 pra mais de 390 testes no caminho.

O que os números dizem, e o que não dizem

Tech Contra Bolsonarotechcontrabolsonaro.dev
Período7 a 25 de outubro de 2026, até o dia da votação
EquipeCerca de 10 voluntários, 127 pull requests e 108 issues no total
Minha parte25 pull requests, todos mergeados (cerca de 20% do total), e 33 issues, o segundo maior volume
StackNext.js 16, React 19, TypeScript, Supabase (Postgres com RLS, Storage, Edge Functions), Cloudflare Turnstile, Vercel
TestesVitest, Testing Library e Playwright
Cliques orgânicos do GoogleDe cerca de 2 pra 67 por dia, de 9 a 29 de outubro (Search Console)

O número de cliques precisa de contexto. Em 9 de outubro o projeto tinha dois dias, e as semanas seguintes tiveram muita busca ligada à eleição. O salto mistura um site novo sendo indexado, a demanda eleitoral e o trabalho de SEO, e o Search Console não separa uma coisa da outra. O que o SEO pode reivindicar é mais estreito: quando as pessoas buscaram, as páginas podiam ser rastreadas e indexadas, e o Google e as respostas de IA recebiam uma descrição certa de cada uma.

A maioria das auditorias que eu faço vem com meses pra resolver a lista. Essa teve 18 dias, com as correções de rastreamento prontas no quarto. Nas mesmas semanas também contribuí com o Radar da Virada, e no fim do mês construí o Voto Livre.

Se a data do seu lançamento também não pode mudar, o que o Google enxerga no terceiro dia?