Relatório de densidade SEO e alerta de sobre-otimização
Um relatório de densidade transforma uma impressão vaga de repetição em medidas pequenas e reproduzíveis.
Executar grátis
Cole o texto da página, informe uma palavra ou expressão-alvo e escolha o percentual que deve gerar um aviso. O relatório retorna a contagem exata, a parcela do texto ocupada pela palavra-chave e um sinal de sobre-otimização. O processamento é local e determinístico, ideal para revisões editoriais, fluxos de publicação e regras de qualidade repetíveis, sem baixar uma página nem tentar adivinhar o conteúdo visível dela.
Meça a expressão-alvo com consistência
A revisão de palavras-chave costuma ficar subjetiva: uma pessoa conta expressões exatas, outra inclui partes de palavras e outra estima a frequência ao ler o rascunho. Este relatório usa uma regra estável. Ele normaliza maiúsculas, minúsculas e formas Unicode compatíveis, separa o texto e a palavra-chave em termos e procura a sequência completa. “Sapato” não conta “sapatos”, e “tênis de corrida” só conta essas palavras juntas e nessa ordem. A pontuação entre termos não impede a correspondência. Ocorrências podem se sobrepor, o que preserva a integridade matemática em construções repetidas. A contagem responde, portanto, a uma pergunta precisa. total_words apresenta o denominador junto ao percentual. Sempre que possível, envie a versão visível final: navegação, marcação oculta e conteúdo ausente da entrada não interferem. Como a capacidade analisa o texto fornecido e não busca uma URL, a mesma entrada sempre gera a mesma resposta e pode ser reproduzida na revisão.
Entenda a densidade e o limite de alerta
A densidade corresponde ao número de palavras ocupadas pelas ocorrências, dividido pelo total de palavras e multiplicado por 100. Uma expressão de três palavras encontrada duas vezes acrescenta seis palavras ao numerador. Essa definição permite comparar expressões com termos únicos sem subestimar frases longas. O resultado é arredondado para duas casas decimais. Defina threshold como o percentual máximo aceito pelo seu processo; o padrão é 3. over_optimized fica verdadeiro apenas quando a densidade supera o limite, e não quando é exatamente igual, tornando as regras automáticas previsíveis. O aviso pede análise humana e não comprova penalização de posicionamento. Buscadores não publicam uma densidade ideal universal, e a repetição natural varia conforme tema, formato, marca e vocabulário técnico. Use o limite como regra interna, compare páginas semelhantes e leia os trechos sinalizados antes de editar. Remover toda repetição mecanicamente pode prejudicar a clareza de um texto correto.
Inclua o relatório no fluxo editorial
Execute o relatório depois da edição substancial, quando títulos, chamadas, legendas e corpo estiverem próximos da publicação. Sua equipe pode guardar contagem, percentual, limite e sinal junto de cada rascunho e repetir a solicitação após alterações para mostrar o que mudou. Agências podem aplicar limites diferentes a produtos, glossários e artigos longos sem alterar o cálculo. Você também pode incluí-lo em uma verificação pré-publicação: envie o texto e a palavra-chave, consulte over_optimized e devolva o rascunho sinalizado à edição com uma explicação. Os campos brutos tornam a decisão auditável. Texto vazio é válido e retorna zero palavras, ocorrências e densidade; palavra-chave vazia é recusada por não haver alvo mensurável. O algoritmo não usa rede, aleatoriedade, relógio nem modelo, então lotes permanecem determinísticos. Cada solicitação API custa US$ 0,002; o navegador pode usar o mesmo cálculo puro antes da automação.
Casos de uso
Revise um rascunho antes da publicação
Meça a expressão principal na versão final e encaminhe repetições inesperadas para uma revisão editorial humana.
Aplique uma regra de qualidade de conteúdo
Use um limite explícito em todo o fluxo e preserve a contagem e o percentual que justificam cada alerta.
Compare revisões de modo consistente
Use configurações idênticas antes e depois da edição para confirmar a redução sem mudar o método de medição.
Perguntas frequentes
Como a densidade da palavra-chave é calculada?
As palavras ocupadas por correspondências exatas são divididas pelo total, multiplicadas por 100 e arredondadas para duas casas.
A correspondência ignora maiúsculas e minúsculas?
Sim. Texto e palavra-chave são normalizados sem distinção de caixa, mas limites completos e ordem da expressão continuam relevantes.
Quando uma página é marcada como sobre-otimizada?
O sinal fica verdadeiro quando a densidade supera estritamente o limite informado, cujo padrão é 3 por cento.
Um alerta prova que o posicionamento cairá?
Não. É um aviso editorial baseado na regra escolhida por você, não uma previsão ou alegação de penalidade do buscador.
Quanto custa uma solicitação API?
Cada solicitação custa US$ 0,002. O cálculo determinístico dispensa download de páginas e modelos externos.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/seo/keyword-density-report \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Technical SEO helps a site become easier to crawl. A practical technical SEO review checks structure without forcing technical SEO into every sentence.","keyword":"technical SEO"}'const res = await fetch("https://api.kit.forhosting.com/seo/keyword-density-report", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Technical SEO helps a site become easier to crawl. A practical technical SEO review checks structure without forcing technical SEO into every sentence.",
"keyword": "technical SEO"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/seo/keyword-density-report",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Technical SEO helps a site become easier to crawl. A practical technical SEO review checks structure without forcing technical SEO into every sentence.",
"keyword": "technical SEO"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/seo/keyword-density-report", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Technical SEO helps a site become easier to crawl. A practical technical SEO review checks structure without forcing technical SEO into every sentence.","keyword":"technical SEO"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Technical SEO helps a site become easier to crawl. A practical technical SEO review checks structure without forcing technical SEO into every sentence.","keyword":"technical SEO"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/seo/keyword-density-report", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"text": "Technical SEO helps a site become easier to crawl. A practical technical SEO review checks structure without forcing technical SEO into every sentence.",
"keyword": "technical SEO"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "seo.keyword_density_report",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |