Cómo puntuamos: 23 comprobaciones y por qué unas pesan más

Una nota sobre 100 es una afirmación, y casi ninguna se puede rebatir: un número sin método detrás, sin versión encima y sin forma de saber después si cambió tu web o cambió la herramienta.

La nuestra son 23 comprobaciones repartidas en cinco dimensiones ponderadas, y está todo en un único fichero: packages/engine/src/scorer.js. Esto es lo que mide cada parte, lo que vale y lo que no te puede decir.

Las cinco dimensiones

Accesibilidad, 30%, 3 comprobaciones. Si una máquina puede leer la página siquiera. Si el contenido existe sin JavaScript, si el contenido principal empieza cerca del principio del HTML, si la página es lo bastante pequeña como para traérsela entera. Es la dimensión que más pesa porque lo demás es decoración si el rastreador recibe una cáscara vacía.

Visibilidad para la IA, 25%, 6 comprobaciones. Si los clientes de IA pueden entrar y orientarse: si existe robots.txt, si permite a los bots de búsqueda de IA, si hay sitemap, si la web responde a Accept: text/markdown, si hay llms.txt, si declaras Content-Signal.

Datos estructurados, 20%, 5 comprobaciones. Schema.org/JSON-LD, Open Graph, meta description, URL canónica y el lang del <html>. Lo que le dice a una máquina qué es la página, no qué cuenta.

HTML semántico, 15%, 5 comprobaciones. Jerarquía de encabezados, <article> o <main>, proporción de elementos semánticos frente a divs, textos alternativos que describan algo y profundidad de anidamiento de divs. Es de donde saca la extracción qué partes de la página son la página.

Eficiencia de contenido, 10%, 4 comprobaciones. Reducción de tokens al pasar de HTML a Markdown, proporción de contenido frente a ruido, peso de la página y estilos en línea. Cuánto de lo que envías es contenido.

Por qué no todas cuentan igual

Cada comprobación lleva un nivel de evidencia junto al peso, y ese nivel es lo que fija el peso:

  • probada: lo documenta el propio proveedor del modelo, o lo demuestra una medición. 3 de las 23.
  • plausible: razonamiento sólido y coherente con cómo funciona la extracción, pero sin confirmación de ningún proveedor. 13 de las 23.
  • especulativa: la convención existe y el sector se la cree, pero nadie ha demostrado que ningún bot la consuma. 7 de las 23.

Llevado hasta la nota final, eso deja unos 32 de los 100 puntos en comprobaciones probadas, 51 en plausibles y 17 en especulativas.

Las tres probadas: la página se renderiza sin JavaScript, el robots.txt permite a los bots de búsqueda de IA y la página lleva marcado Schema.org. La primera es la señal mejor documentada de todo este campo, porque ningún rastreador de IA importante ejecuta JavaScript. La segunda es la única puerta que cierra de verdad: si bloqueas un bot de búsqueda, no apareces en ese asistente.

En el otro extremo están llms.txt y Content-Signal. Los sirven muchísimos dominios, ningún proveedor ha confirmado que los lea y Google ha dicho que llms.txt no tiene ningún efecto. Los seguimos puntuando, porque que no haya pruebas no prueba que no sirvan, pero al 10% de su dimensión cada uno en vez del 20% que llegó a llevar llms.txt. La eficiencia de contenido es especulativa de principio a fin: las tuberías de recuperación pasan una extracción tipo Readability antes de que el modelo vea nada, así que un HTML limpio compra menos de lo que el sector supone.

Ese reequilibrio es lo que fue la rúbrica v2. Con la v1, «se renderiza sin JavaScript» valía un 6% de la nota final mientras que la reducción de tokens, que ningún proveedor ha mencionado jamás, valía un 10%: la comprobación mejor documentada del tablero contaba menos que una corazonada.

La rúbrica lleva número de versión

El scorer exporta RUBRIC_VERSION, ahora mismo 2. La v1 eran los pesos originales, de febrero de 2026. La v2 es el reequilibrio por evidencia, de julio de 2026.

Sin ese número la nota no es reproducible. Analizas y te sale 90. Seis meses después te sale 85. ¿Ha empeorado tu web o hemos movido nosotros la portería? Un certificado que no dice con qué regla se midió es un número que nadie puede comprobar.

Ese error lo cometimos. La versión existía en el scorer y viajaba en el objeto del resultado, pero nunca llegaba a la base de datos, así que el ranking ordenaba notas entre sí sin saber si estaban medidas igual, con filas de la v1 por encima de filas de la v2 como si la comparación significase algo.

La migración 007_add_rubric_version_to_analyses.js añadió la columna con un valor por defecto de 1 para todas las filas existentes. Ese 1 no era una suposición: todas las filas eran anteriores a la v2, así que es el dato. También indexa (rubric_version, score) para poder acotar un ranking a una sola rúbrica. Lo delicado era el momento, porque tenía que entrar antes de que se escribiera el primer análisis con la v2 o las filas nuevas habrían dicho que eran v1 sin serlo.

Lo que no puntuamos a propósito

Una página, no una web. Un análisis lee una URL. El robots.txt, el sitemap y el llms.txt son de todo el sitio, y lo demás es esa página y solo esa. Una página bien hecha en una web floja saca buena nota, y está bien que sea así.

Lo que el modelo haya hecho contigo. No podemos ver si ChatGPT te ha citado, si Claude ha montado su respuesta con tu página ni si alguien te ha mencionado. Eso no lo ve nadie desde fuera. Cada comprobación es una propiedad de lo que sirves, no de lo que otro hizo con ello.

Si el rastreador ha entrado de verdad. Cuando sondeamos haciéndonos pasar por un bot de IA y algo en el borde nos echa mientras el robots.txt dice que somos bienvenidos, no sabemos con cuál de los dos se encuentra un rastreador verificado. Esa comprobación se queda con un techo de 60, un aprobado con matiz y no un suspenso, y el detalle explica qué ha pasado. Un número es mala forma de decir «no lo sé».

Aquí no se comprueba si lo que has escrito vale algo. Una nota alta es un buen indicio de partida: una máquina puede leer la página y sabe qué es. No es una promesa de que te vayan a citar.

Nos la aplicamos a nosotros

agentready.md saca 94/100. Esa cifra sale de la base de datos, del último análisis de nuestro propio dominio y enlazada a su certificado, no está escrita a mano en la plantilla. Cuando se mueve, se mueve la página. Cuando no hay análisis, la página no enseña nada en vez de enseñar un número viejo.

Ya nos ha bajado. Durante meses nuestro servidor devolvía 404 en /robots.txt mientras la Content Signals Policy gestionada de Cloudflare respondía en el borde con un 200 y un fichero que no habíamos escrito. Nuestro propio scorer leía ese 200 y nos aprobaba. Al arreglar el origen y quitar el fichero gestionado pasamos de 93 a 90. El número bajo era el honesto: esos tres puntos medían el fichero de Cloudflare, no el nuestro.

Cómo se construye la nota · Qué puntúan los demás