Meu blog foi reprovado no AdSense por conteúdo raso gerado por IA: o que eu mudei
Meu blog rodado com IA foi reprovado no Google AdSense por conteúdo de baixo valor. Veja os 6 problemas reais que encontrei e como corrigi cada um.
Sumário do artigo
- O que "conteúdo de baixo valor" significa pro Google, na prática
- Como cheguei no diagnóstico
- O erro raiz: gerar posts a partir de um resumo, não da notícia inteira
- As 3 rodadas de correção
- O que corrigi manualmente, não só no código
- Onde meu site está agora
- O que eu faria diferente se começasse do zero hoje
- Checklist rápido pra revisar o seu site agora
- Perguntas frequentes

Meu blog é gerado majoritariamente com IA (notícias diárias automáticas, mais tutoriais e reviews escritos com apoio de IA) e foi reprovado no Google AdSense mais de uma vez. O motivo não foi "usar IA". Foi conteúdo raso, gerado a partir de resumos curtos demais pra sustentar um post de verdade. Se você monetiza ou pretende monetizar um site parecido, o problema provavelmente é o mesmo, e este post é o relato completo do diagnóstico e da correção, não uma versão resumida dele.
O que "conteúdo de baixo valor" significa pro Google, na prática
Antes de contar o que encontrei no meu site, vale entender o que essa reprovação realmente aponta. O sistema de avaliação de conteúdo útil do Google não olha se um texto foi escrito por IA ou por uma pessoa. Ele olha pro resultado: se aquela página existe pra satisfazer uma busca ou só pra preencher espaço.
Três padrões costumam cair nessa categoria, e os três apareciam no meu site ao mesmo tempo:
Conteúdo gerado em escala sem revisão: posts publicados automaticamente, sem checagem humana ou de qualidade no meio do caminho.
Conteúdo raso (thin content): páginas curtas, genéricas, que repetem o que já existe em qualquer outro lugar sem acrescentar nada.
Conteúdo com informação não verificada: dados, números ou afirmações que soam concretas mas não vêm de lugar nenhum confiável.
Meu pipeline de notícias automáticas conseguia produzir os três ao mesmo tempo, sem eu perceber, porque cada post individualmente parecia "normal".
Como cheguei no diagnóstico
Não teve atalho. Fiz uma auditoria completa do site: li o blog publicado como um visitante veria, abri vários tipos de post diferentes (notícia, review, tutorial), e depois fui direto no código: rotas, o componente que renderiza o markdown, os prompts de geração, o sitemap, o robots.txt, o ads.txt e as edge functions que geram o conteúdo.
Foi ali, comparando o que o prompt recebia como entrada com o que ele devolvia como post publicado, que o problema ficou óbvio.
O erro raiz: gerar posts a partir de um resumo, não da notícia inteira
Meu pipeline de notícias automáticas puxava só o título e duas ou três frases de resumo de uma API de notícias, e pedia pra IA transformar isso num post de 400 a 1.400 palavras. Na prática, o prompt recebia algo do tipo:
Título: "Empresa X lança nova funcionalidade de IA"
Resumo: "A empresa anunciou hoje uma atualização que promete melhorar a produtividade dos usuários."
Tarefa: escreva um post de 800 palavras sobre isso.
O resultado óbvio, em retrospecto: pra chegar em 800 palavras a partir de duas frases, a IA precisava inventar contexto. E ela inventava, com números e detalhes que soavam plausíveis mas não vinham de lugar nenhum verificável. Essa é a definição prática de conteúdo de baixo valor: informação que não agrega nada além do que já existe, e às vezes nem está correta.
A correção estrutural foi criar uma função (fetch-source.ts) que busca e extrai o texto completo do artigo original antes de qualquer geração. O prompt passou a receber o artigo inteiro como contexto, não um resumo de duas linhas, e uma regra explícita de que nenhum número ou fato pode aparecer no post se não estiver no texto-fonte. Sem fonte completa, sem post.
As 3 rodadas de correção
Depois do diagnóstico, as correções não vieram todas de uma vez. Foram três rodadas, cada uma pegando uma camada diferente do problema.
Rodada 1: o pipeline de conteúdo e os erros técnicos mais graves
O que encontrei | O que corrigi |
|---|---|
Um post publicado com o placeholder literal | Removi direto no banco e criei uma trava ( |
Notícias geradas a partir de resumo de 2-3 frases, com estatísticas inventadas | Criei a função |
H1 duplicado nas páginas de notícia | Corrigi o template pra renderizar só um H1 por página |
Links de afiliado sem | Adicionei detecção automática de |
FAQ em accordion só-JavaScript, invisível pro robô de indexação | Troquei por |
Slugs cortados no meio da palavra (ex: | Corrigi a função de slugify pra sempre cortar num espaço |
Preço exibido errado, tipo "R$ Grátis" | Corrigi a regra de formatação de preço no prompt e nos dados |
Rodada 2: estrutura de indexação e identidade visual
O que encontrei | O que corrigi |
|---|---|
Categorias existiam só como filtro ( | Criei 5 rotas dedicadas ( |
Imagem de compartilhamento (OG image) em SVG, formato que a maioria das redes sociais não renderiza | Gerei uma nova imagem em PNG (1200x630) e atualizei a referência em 11 lugares do código |
Avatar genérico no lugar do autor | Troquei pela foto real, no componente de biografia e na página "Sobre" |