Como pontuamos: 23 verificações e o peso de cada uma
Uma nota de 0 a 100 é uma afirmação, e quase nenhuma é contestável: um número sem método por trás, sem versão em cima e sem forma de saber depois se foi o teu site que mudou ou a ferramenta.
A nossa são 23 verificações em cinco dimensões ponderadas, e está tudo num único ficheiro: packages/engine/src/scorer.js. Aqui fica o que cada parte mede, quanto vale e o que não te consegue dizer.
As cinco dimensões
Acessibilidade — 30%, 3 verificações. Se uma máquina consegue sequer ler a página. Se o conteúdo existe sem JavaScript, se o conteúdo principal começa perto do início do HTML, se a página é pequena o suficiente para ser obtida inteira. É a dimensão mais pesada porque tudo o resto é decoração se o crawler receber uma casca vazia.
Descoberta por IA — 25%, 6 verificações. Se os clientes de IA podem entrar e orientar-se: se existe robots.txt, se permite os bots de pesquisa de IA, se há sitemap, se o site responde a Accept: text/markdown, se há llms.txt, se declaras Content-Signal.
Dados estruturados — 20%, 5 verificações. Schema.org/JSON-LD, Open Graph, meta description, URL canónico e o lang no <html>. Aquilo que diz a uma máquina o que a página é, e não o que conta.
HTML semântico — 15%, 5 verificações. Hierarquia de cabeçalhos, <article> ou <main>, proporção entre elementos semânticos e divs, textos alternativos que descrevam alguma coisa, profundidade de aninhamento de divs. É daqui que a extração decide que partes da página são a página.
Eficiência de conteúdo — 10%, 4 verificações. Redução de tokens de HTML para Markdown, proporção entre conteúdo e ruído, peso da página, estilos em linha. Quanto daquilo que envias é conteúdo.
Porque nem todas contam o mesmo
Cada verificação carrega um nível de evidência ao lado do peso, e é esse nível que fixa o peso:
- provada — um fornecedor de modelos documenta-a, ou uma medição demonstra-a. 3 das 23.
- plausível — raciocínio sólido, coerente com o funcionamento da extração, mas sem confirmação de nenhum fornecedor. 13 das 23.
- especulativa — a convenção existe e o setor acredita nela, mas ninguém mostrou que algum bot a consuma. 7 das 23.
Levado até à nota final, isso põe cerca de 32 dos 100 pontos em verificações provadas, 51 em plausíveis e 17 em especulativas.
As três provadas: a página renderiza sem JavaScript, o robots.txt permite os bots de pesquisa de IA e a página tem marcação Schema.org. A primeira é o sinal mais bem documentado de todo este campo, porque nenhum crawler de IA importante executa JavaScript. A segunda é a única porta que fecha mesmo: bloqueia um bot de pesquisa e passas a estar ausente desse assistente.
No outro extremo estão o llms.txt e o Content-Signal. São servidos por imensos domínios, nenhum fornecedor confirmou lê-los e a Google afirmou que o llms.txt não tem qualquer efeito. Continuamos a pontuá-los — a ausência de prova não prova a ausência — mas a 10% da sua dimensão cada um, em vez dos 20% que o llms.txt chegou a valer. A eficiência de conteúdo é especulativa de ponta a ponta: os sistemas de recuperação correm uma extração ao estilo Readability antes de um modelo ver seja o que for, por isso HTML enxuto compra menos do que o setor supõe.
Esse reequilíbrio foi exatamente a versão 2 da grelha. Na v1, «renderiza sem JavaScript» valia 6% da nota final enquanto a redução de tokens, que nenhum fornecedor alguma vez mencionou, valia 10%: a verificação mais bem documentada do quadro contava menos do que um palpite.
A grelha tem número de versão
O scorer exporta RUBRIC_VERSION, neste momento 2. A v1 eram os pesos originais, fevereiro de 2026. A v2 é o reequilíbrio por evidência, julho de 2026.
Sem esse número, uma nota não é reproduzível. Fazes uma análise e dá 90. Seis meses depois dá 85. Foi o teu site que piorou ou fomos nós que mudámos a baliza? Um certificado que não diz com que régua foi medido é um número que ninguém pode confirmar.
Foi esse o erro que pusemos em produção. A versão existia no scorer e viajava no objeto do resultado, mas nunca chegava à base de dados — o ranking ordenava notas umas contra as outras sem saber se tinham sido medidas da mesma maneira, com linhas da v1 acima de linhas da v2 como se a comparação quisesse dizer alguma coisa.
A migração 007_add_rubric_version_to_analyses.js acrescentou a coluna, com 1 por omissão em todas as linhas existentes. Esse valor não era um palpite: todas as linhas eram anteriores à v2, portanto 1 é o facto. Também indexa (rubric_version, score) para que um ranking possa ser limitado a uma só grelha. O momento é que era delicado — tinha de entrar antes de a primeira análise em v2 ser escrita, ou as linhas novas teriam dito que eram v1 sem o serem.
O que não pontuamos de propósito
Uma página, não um site. Uma análise lê um URL. O robots.txt, o sitemap e o llms.txt são de todo o site; o resto é aquela página e só aquela. Uma página bem feita num site fraco tem boa nota, e é assim que deve ser.
O que o modelo fez contigo. Não conseguimos ver se o ChatGPT te citou, se o Claude construiu a resposta a partir da tua página, se alguém sequer te mencionou. Isso ninguém vê de fora. Cada verificação é uma propriedade daquilo que serves, não daquilo que fizeram com isso.
Se o crawler entrou mesmo. Quando sondamos a fazer-nos passar por um bot de IA e alguma coisa na periferia nos manda embora enquanto o robots.txt diz que somos bem-vindos, não sabemos com qual dos dois se depara um crawler verificado. Essa verificação fica limitada a 60 — um aprovado com ressalva, não um chumbo — e a linha de detalhe diz o que aconteceu. Um número é má maneira de dizer «não se sabe».
Nada aqui verifica se aquilo que escreveste presta. Uma nota alta é um bom indício de partida: uma máquina consegue ler a página e percebe o que ela é. Não é promessa nenhuma de que vais ser citado.
Aplicamo-la a nós próprios
O agentready.md tira 94/100. Esse valor sai da base de dados — a análise mais recente do nosso próprio domínio, ligada ao seu certificado — em vez de estar escrito à mão no template. Quando se mexe, a página mexe-se. Quando não há análise, a página não mostra nada em vez de mostrar um número velho.
Já desceu. Durante meses a nossa origem devolvia 404 em /robots.txt enquanto a Content Signals Policy gerida da Cloudflare respondia na periferia com 200 e um ficheiro que nunca tínhamos escrito. O nosso próprio scorer lia esse 200 e dava-nos aprovação. Ao corrigir a origem e desligar o ficheiro gerido, passámos de 93 para 90. O número mais baixo era o honesto: aqueles três pontos estavam a medir o ficheiro da Cloudflare, não o nosso.