Fiz um verificador de SEO que só mede o que dá para medir
Toda ferramenta de SEO devolve uma nota. “Seu conteúdo é 73/100.” O problema é o que está dentro desse número: contagem de caracteres do title, que é objetiva, somada a “densidade da palavra-chave”, que é folclore, somada a “legibilidade”, que é uma fórmula criada em 1948 para textos em inglês. Três coisas incomparáveis viram um número só, e aí você não sabe o que corrigir.
Escrevi um verificador que faz o oposto: checa treze itens objetivos, mostra o limite usado em cada um e não dá nota nenhuma. É um arquivo PHP, roda na linha de comando, não tem dependência e funciona em qualquer site — não só em WordPress.
O que ele checa
| Item | Critério |
|---|---|
| title | presente, 30–60 caracteres; acima de 70 é erro (o Google corta) |
| meta description | presente, 120–158 caracteres |
| H1 | exatamente um, 20–80 caracteres |
| H2 | pelo menos dois |
| hierarquia | sem salto de nível (H2 direto para H4) |
| canonical | presente e absoluta |
| Open Graph | og:title, og:description e og:image |
| imagens | pelo menos 90% com alt |
| palavras | 300 mínimo, 600 desejável |
| FAQ | se existir a seção, três perguntas ou mais |
| JSON-LD | presente e com JSON válido |
| hreflang | presente e com autorreferência |
| links | internos e externos — texto sem fonte citada vira aviso |
Os limites estão numa constante no topo do arquivo. Se você discorda de algum, edite — esse é o ponto de ter os critérios visíveis em vez de escondidos atrás de uma pontuação.
Como usar
php dr-seo-check.php https://exemplo.com/post/
php dr-seo-check.php pagina.html
php dr-seo-check.php https://exemplo.com/post/ --json
A saída é uma lista, um item por linha:
ok title 50 caracteres
Surface Laptop Ultra: preço, specs e data de venda
ok description 158 caracteres
ok h1 71 caracteres
ok h2 12 subtítulos
ok canonical https://digitalradar.com.br/surface-laptop-ultra...
aviso imagens 82% com alt — 2 sem texto alternativo
ok palavras 977
ok faq 4 perguntas
ok json-ld Organization, Article, BreadcrumbList, FAQPage
ok hreflang pt-BR, en-US, x-default
ok links 53 internos, 9 externos
12 ok · 1 avisos · 0 erros
Esse relatório é real: é um post deste site. E o aviso também — o script achou duas imagens sem alt numa página que eu considerava pronta. É para isso que serve.
O modo --json existe para automação: dá para rodar em todos os posts antes de publicar e falhar o processo se houver erro. O script sai com código 1 quando encontra erro e 0 quando não encontra, que é o que um pipeline espera.
O que ele deliberadamente não checa
Essa lista importa tanto quanto a outra:
- Densidade de palavra-chave. Não existe percentual ideal. O Google abandonou isso há mais de uma década, e otimizar por densidade produz texto pior.
- Legibilidade. As fórmulas usadas (Flesch e derivadas) foram calibradas para o inglês nos anos 1940, contando sílabas. Aplicadas ao português, medem pouca coisa útil.
- Backlinks e autoridade. São importantes e não são on-page. Outra ferramenta, outro trabalho.
- Nota agregada. Somar “title com 55 caracteres” e “tem JSON-LD” num número só joga fora a informação que interessa.
Por que linha de comando
Porque a verificação útil é a que roda antes de publicar, não a que você abre num painel depois. Com o script local você checa um rascunho salvo em arquivo, sem subir nada, sem cadastro e sem limite de consultas.
Ele precisa de PHP 7.4 ou superior com as extensões dom e json, que vêm por padrão. Para ler endereços https, o PHP precisa da extensão openssl ou da curl; se faltarem as duas, o script avisa e sugere o contorno — salvar a página com curl -s URL -o pagina.html e rodar no arquivo.
Baixar
dr-seo-check (PHP) — baixe e renomeie de .php.txt para .php. O arquivo sobe aqui com extensão dupla porque o WordPress bloqueia upload de .php, por segurança.
Uso livre, inclusive comercial. Se melhorar alguma checagem, escreva — a versão boa de uma ferramenta assim é a que muita gente usou.
Perguntas frequentes
Funciona em site que não é WordPress?
Funciona. Ele lê o HTML entregue pela página, então serve para qualquer site ou arquivo local.
Preciso instalar alguma biblioteca?
Não. Só PHP com dom e json, que são padrão. Não há Composer nem pacote externo.
Posso mudar os limites?
Pode e deve, se discordar. Eles ficam numa constante no topo do arquivo, justamente para serem editados.
Por que não dar uma nota de 0 a 100?
Porque a nota mistura o que é medição com o que é opinião e esconde as duas. Treze itens com limite declarado dizem o que corrigir; um número não diz.
No DigitalRadar, publicamos as ferramentas que usamos internamente. Fique no radar.
Apurado a partir das fontes citadas e verificado antes da publicação. Veja a nossa Política Editorial.