Canibalização de Blog - Detecção de Sobreposição de Palavras-chave
Detecta quando múltiplos posts de blog competem pelas mesmas palavras-chave de busca. Dois modos: análise local (padrão) e modo API DataForSEO para dados de nível SERP.
Dois Modos
| Modo | Flag | Custo | Fonte de Dados |
|---|---|---|---|
| Local | (padrão) | Gratuito | Análise de conteúdo de arquivos via Grep/Read |
| API | --api | ~$0,01/chamada | Page Intersection + Palavras-chave Rankeadas da DataForSEO |
O modo local funciona sem nenhuma chave de API. O modo API requer credenciais DataForSEO
definidas como variáveis de ambiente: DATAFORSEO_LOGIN e DATAFORSEO_PASSWORD.
Fluxo de Trabalho do Modo Local
Passo 1: Escanear Arquivos do Blog
Use Glob para encontrar todos os arquivos de conteúdo no diretório alvo:
- Padrões:
**/*.md,**/*.mdx,**/*.html - Pular arquivos em
node_modules/,.git/,drafts/
Passo 2: Extrair Palavras-chave Primárias
Para cada arquivo, leia e extraia sinais de palavras-chave de:
- Tag Title ou cabeçalho H1 (maior peso)
- Cabeçalhos H2 (peso médio)
- Primeiro parágrafo (sinal de suporte)
- Meta descrição se presente no frontmatter
Método de extração de palavra-chave primária:
- Tokenize o título e H1 em frases de 1, 2 e 3 palavras
- Pontue cada frase pela frequência no título + H2s + primeiro parágrafo
- Selecione a frase de 2-3 palavras com maior pontuação como palavra-chave primária
- Registre palavras-chave secundárias dos cabeçalhos H2
Passo 3: Agrupar por Similaridade
Agrupe posts em clusters usando estas regras de correspondência (em ordem de prioridade):
- Correspondência exata - palavra-chave primária idêntica em 2+ posts
- Correspondência de radical - mesma raiz (ex.: "otimizar" vs "otimização")
- Sobreposição semântica - Claude determina que duas palavras-chave visam a mesma intenção de busca (ex.: "melhor software CRM" vs "principais ferramentas CRM 2026")
- Correspondência de subconjunto - uma palavra-chave contém outra (ex.: "email marketing" vs "email marketing para startups")
Passo 4: Pontuar e Sinalizar
Para cada cluster com 2+ posts, avalie a severidade e gere uma recomendação.
Passo 5: Gerar Relatório
Exiba a tabela de resultados e recomendações por cluster.
Fluxo de Trabalho do Modo API (DataForSEO)
Requer a flag --api. Usa WebFetch para chamar endpoints da DataForSEO.
Endpoints Utilizados
Page Intersection - encontra palavras-chave onde múltiplas URLs ranqueiam:
POST https://api.dataforseo.com/v3/dataforseo_labs/google/page_intersection/live
Autorização: Basic <base64(login:password)>
{
"pages": {
"1": "https://exemplo.com/post-a",
"2": "https://exemplo.com/post-b"
},
"language_code": "en",
"location_code": 2840
}
Custo: ~$0,01 por chamada. Retorna palavras-chave sobrepostas com posição, volume, CPC.
Ranked Keywords - obtém todas as palavras-chave que uma única URL ranqueia:
POST https://api.dataforseo.com/v3/dataforseo_labs/google/ranked_keywords/live
{
"target": "https://exemplo.com/post-a",
"language_code": "en",
"location_code": 2840
}
Etapas de Análise da API
- Colete todas as URLs publicadas do usuário (ou sitemap)
- Execute Ranked Keywords para cada URL para construir perfis de palavras-chave
- Execute Page Intersection para pares de URLs que compartilham clusters de palavras-chave
- Calcule a severidade usando a fórmula abaixo
- Gere relatório enriquecido com dados de volume de busca e posição
Pontuação de Severidade
Quatro níveis de severidade baseados em sinais de sobreposição:
| Nível | Critério | Urgência da Ação |
|---|---|---|
| Crítico | Mesma palavra-chave exata, ambas as páginas no top 20 | Imediata |
| Alto | Mesmo cluster de palavras-chave, uma página supera a outra | Esta semana |
| Médio | Palavras-chave relacionadas com sobreposição parcial de SERP | Este mês |
| Baixo | Similaridade semântica, mas intenções confirmadas diferentes | Monitorar |
Fórmula de Severidade (Modo API)
severity_score = overlap_count x avg_search_volume x (1 / position_gap)
Onde:
overlap_count= número de palavras-chave compartilhadas no rankingavg_search_volume= volume médio mensal das palavras-chave compartilhadasposition_gap= diferença absoluta na posição média de ranking (mínimo 1)
Pontuação mais alta = problema de canibalização mais urgente.
Heurística de Severidade (Modo Local)
Sem dados de SERP, use uma pontuação simplificada:
- Crítico: Correspondência exata de palavra-chave primária entre posts
- Alto: Correspondência de radical na palavra-chave primária, ou 3+ palavras-chave H2 compartilhadas
- Médio: Sobreposição semântica na palavra-chave primária
- Baixo: Apenas correspondência de subconjunto, ou palavras-chave secundárias compartilhadas
Formato de Saída
Tabela de Resumo
| Post A | Post B | Palavras-chave Compartilhadas | Severidade | Recomendação |
|--------|--------|-------------------------------|------------|---------------|
| /melhores-ferramentas-crm | /top-software-crm | melhor crm, ferramentas crm, software crm | Crítico | MESCLAR |
| /dicas-email | /guia-marketing-email | email marketing | Alto | DIFERENCIAR |
| /basico-seo | /seo-para-iniciantes | basico seo, seo iniciante | Crítico | CANÔNICO |
| /react-hooks | /gerenciamento-estado-react | react, estado | Baixo | NENHUMA AÇÃO |
Detalhamento por Cluster
Para cada cluster sinalizado, forneça:
- Títulos e URLs de ambos os posts
- Lista completa de palavras-chave sobrepostas (com volume se modo API)
- Qual post é mais forte (mais abrangente, melhor estruturado)
- Recomendação específica com justificativa
Recomendações
Quatro ações possíveis para cada cluster de canibalização:
MESCLAR
Quando ambas as páginas são superficiais ou cobrem a mesma intenção com profundidade similar.
- Combine o melhor conteúdo de ambos em um post abrangente
- Faça um redirecionamento 301 da URL mais fraca para o post mesclado
- Preserve todos os links internos que apontam para qualquer uma das URLs
DIFERENCIAR
Quando as páginas servem intenções diferentes, mas há sobreposição de segmentação de palavras-chave.
- Mude a palavra-chave primária do post mais fraco para uma cauda longa relacionada
- Atualize o título, H1 e meta descrição para refletir o novo foco
- Adicione links internos entre os dois posts para sinalizar tópicos distintos
CANÔNICO
Quando um post é claramente a autoridade e o outro é uma duplicata inferior.
- Adicione
rel="canonical"na página mais fraca apontando para a autoridade - Considere noindexar a página mais fraca se ela não agregar valor único
- Link da página mais fraca para a página de autoridade
NENHUMA AÇÃO
Quando a intenção é genuinamente diferente, apesar da similaridade superficial de palavras-chave.
- Documente a justificativa para auditorias futuras
- Monitore os rankings trimestralmente para quaisquer mudanças de posição
- Reavalie se algum dos posts cair nos rankings
Tratamento de Erros
- Nenhum arquivo de blog encontrado: Se o diretório não contiver arquivos .md, .mdx ou .html, reporte "Nenhum arquivo de blog encontrado em [diretório]" e sugira verificar o caminho
- Credenciais DataForSEO ausentes: No modo API, se as credenciais não estiverem configuradas, volte para o modo local automaticamente e notifique o usuário
- Limites de taxa da API: DataForSEO tem limites de taxa por minuto. Se uma resposta 429 for recebida, aguarde e tente novamente uma vez. Se persistir, mude para o modo local para as URLs restantes
- Falhas no WebFetch: Se uma URL de origem estiver inacessível, pule-a e anote "Não foi possível verificar - fonte indisponível" no relatório
- Diretório com post único: Se existir apenas um post de blog, reporte "A análise de canibalização requer pelo menos 2 posts" e saia graciosamente