Saltar al contenido
crawlforgeEnglish
Se rompió12 de octubre de 20265 min de lecturaRead in English

Cincuenta dominios que contaban como un sitio

La 0.15.0 hace que el panel de cartera cuente sitios y no ficheros. Una lista con cincuenta dominios pasaba por un solo sitio, tope incluido.

La entrada anterior arreglaba el título del informe de una lista de URLs que mezcla varios sitios, y terminaba con algo que se quedaba como estaba a propósito, porque no era un fallo de un título sino una pregunta de producto. El panel de cartera enseñaba esa misma lista de dos sitios así:

── Panel de cartera ─────────────────────────
  1 sitio · rastreos del 2026-10-12 al 2026-10-12
  ...
  alto      ASSET-IMG-EMPTY-ALT-LINK       1 de 1 sitio

La fila de la tabla ya nombraba los dos sitios, pero la cabecera decía uno.

El panel contaba ficheros. Eso estaba bien mientras un fichero de rastreo era un sitio, y dejó de estarlo en la 0.11.0, cuando una lista pasó a auditar todos los dominios que lleva. Nadie volvió al panel a mirar qué significaba eso para sus números.

Por qué no era cosa de redacción

Una cabecera que dice «1 sitio» cuando hay dos se puede ver como un detalle cosmético. El problema es que ese mismo número hacía otros dos trabajos.

El primero es la columna que le da sentido al panel. portfolio está para responder qué falla en todos tus sitios a la vez. Si una regla salta en nueve de doce blogs, casi nunca es el contenido: es el tema o un plugin que comparten, y con un arreglo se resuelven todos. Contando ficheros, una lista de cincuenta blogs rastreada en un solo fichero sale como «1 de 1 sitio» en todas sus reglas, y el problema de plantilla que venías a buscar desaparece.

El segundo es el tope del nivel. Pro admite diez sitios en el panel y la comprobación contaba ficheros, así que cincuenta dominios en una lista pasaban como uno. Todavía no paga nadie, así que nadie se estaba llevando nada de más, pero un tope que se salta con un fichero de texto con una URL por línea no limita nada.

En aquella entrada lo dejé como decisión pendiente, y la decisión fue contar sitios.

Una fila por fichero, y las cuentas por sitio

Lo primero que se le ocurre a uno para contar sitios es poner una fila por sitio en la tabla general, partiendo el fichero en sus dominios. No fui por ahí. La sección «Qué cambió» del panel compara cada fichero con el .prev.sqlite que tiene al lado, y ese diff es de una pareja de ficheros. Partir las filas obligaría a partir también los diffs, y eso ya es otro trabajo más grande.

Así que una lista con varios sitios sigue siendo una fila, con todos ellos en la etiqueta como en la 0.14.0, y las cuentas suman sus sitios. Ahora cuentan sitios la cabecera, la columna «salta en N de M sitios», la línea de cuántos tienen un rastreo anterior y el tope. La misma lista de antes:

── Panel de cartera ─────────────────────────
  2 sitios · rastreos del 2026-10-12 al 2026-10-12
  ...
  alto      ASSET-IMG-EMPTY-ALT-LINK       1 de 2 sitios

Dice 1 de 2 porque los tres hallazgos de ese fichero son de colorvivo.com y ninguno de especialmundial.com, y eso el panel lo tiene que saber. Una regla que salta en un fichero con varios sitios no salta en todos ellos, así que los hallazgos se reparten por el sitio de la URL de la que cuelgan, con la misma regla que usa el motor: host y puerto.

Ese reparto se hace en SQL, recortando la autoridad de la URL guardada. Uno de nuestros rastreos de diariodelamancha.com tiene más de 278.000 hallazgos, y el panel no debería analizar cada una de esas URLs para contar hasta tres. Además solo se hace con los ficheros que auditaron más de un sitio, y un fichero de un solo sitio sigue el camino de siempre.

Dos agujeros en mi primera versión

La primera versión de esa consulta tenía dos fallos, y los vi al releerla, antes de escribir ningún test.

Hay hallazgos que son del sitio y no de una URL. INDEX-SITEMAP-MISSING es uno y INDEX-SECTION-DISCONNECTED es otro (nuestro rastreo de colorvivo.com tiene uno). Se guardan sin URL, así que no hay nada que recortar, y la consulta los contaba como un sitio más, uno vacío. Una regla con hallazgos en páginas y también a nivel de sitio habría salido en un sitio más de los que tocaba.

El otro era peor. Un hallazgo puede apuntar a cualquier fila de urls, también a las externas, y HTTP-404-EXTERNAL, el enlace saliente roto, hace justo eso: su hallazgo cuelga de la URL externa muerta y no de la página que la enlaza. La consulta contaba el host de esa URL como un sitio, así que cada enlace roto a otro dominio habría sumado un sitio al reparto.

Ahora solo cuentan los sitios que auditó el fichero, los mismos que nombra su título. Una regla cuyos hallazgos no caen en ninguno, como pasa con los de nivel de sitio, cuenta una vez. En algún caso raro eso puede quedarse corto, pero nunca se inventa un reparto que no existe, y en una tabla que sirve para decidir en qué gastar la mañana es mejor equivocarse por abajo.

Los rastreos incompletos necesitaban el mismo cambio. Una lista nunca construye el grafo completo de enlaces, así que las reglas que lo necesitan no se pueden evaluar ahí, y el panel dice «no concluyente» para esos sitios en vez de darlos por limpios. Eso se contaba por fichero y ahora se cuenta por sitio: en una lista de tres sitios con una página huérfana en uno de ellos, la regla salta en 1 y no es concluyente en 2.

Romperlo cuatro veces

Hay dos tests nuevos. Uno monta una lista de tres sitios más un fichero normal y comprueba el total, cuatro sitios, el reparto de dos reglas y que una lista de once sitios no cabe en el tope de Pro. El otro comprueba el recuento de no concluyentes por sitio.

Después rompí cada pieza y miré que fallara. Con el total contando ficheros otra vez, el primer test se puso en rojo. Con todas las reglas de un fichero contando como un sitio, en rojo. Sin el filtro de hosts externos, en rojo. Y el recuento antiguo de no concluyentes puso en rojo el segundo. Un solo test cubre tres de esas roturas y falla cada vez en una línea distinta.

De paso, Ubuntu 26

Desde el 19 de octubre el runner ubuntu-latest de GitHub pasa a Ubuntu 26, y el primer push después podría romper por algo que no tiene nada que ver con nosotros. Antes de esta versión lancé el CI entero en una rama de usar y tirar con la imagen ubuntu-26.04: tests, fixtures de reglas y la regresión de rendimiento. Pasó todo, y la rama ya está borrada.

Esta versión no toca ni el motor ni las reglas, solo la línea de comandos. La prueba de rendimiento de antes de publicar dio 64.858 elementos por segundo, con la carga media del Mac rondando 20 cuando la miré justo después, y verificar.sh pasó entero.

Corregido el mismo día: la primera versión de esta entrada decía que ninguna regla cuelga hallazgos de URLs externas, y HTTP-404-EXTERNAL lo hace. Lo había comprobado con ficheros de agosto, de antes de que se sondearan los enlaces externos. El código estaba bien; la frase no.

Se construye en público

Cada dos semanas: mediciones, fallos y ejemplos de uso. Nada más.

← Volver a la bitácora