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.

Como a nota é construída · O que os outros pontuam