En Color Vivo gestionamos más de cien sitios entre clientes y proyectos propios. WordPress casi todos, algún Astro, algún PrestaShop. Todos los meses toca revisar unos cuantos, y hasta este verano lo hacíamos con Screaming Frog, que es una herramienta estupenda y llevamos años pagando su licencia sin quejarnos.
El problema no era la herramienta. Era la pregunta.
Un rastreo responde a la pregunta equivocada
Cuando auditas un sitio por primera vez, un rastreo te lo cuenta todo: cuántas URLs hay, cuáles dan 404, qué títulos están duplicados. Perfecto. Entregas el informe, el cliente arregla parte de las cosas, y a las dos semanas vuelves a rastrear.
Y ahí te encuentras con mil filas otra vez. Las mismas mil filas, más o menos, con algunas diferencias que tendrías que localizar a mano. ¿Los 404 de la vez pasada están arreglados? ¿Ha aparecido algo nuevo tras el último despliegue? ¿El cambio de plantilla ha roto algo?
Puedes exportar los dos rastreos a Excel y compararlos con fórmulas. Lo hemos hecho. Es media mañana por sitio y te equivocas.
Con cien sitios, media mañana por sitio no existe.
Lo que acabamos haciendo
Durante un par de años nuestra rutina fue esta: rastrear solo cuando había una queja. Un cliente llamaba porque había bajado el tráfico, mirábamos, y encontrábamos algo que llevaba roto tres semanas. Siempre llegábamos tarde, y el motivo no era pereza sino aritmética: revisar cien sitios a fondo cada mes no cabe en el calendario de nadie.
Lo que hacía falta era otra cosa. No un informe más completo, sino un informe que empezara por lo que ha cambiado y dejara lo demás de fondo.
El diff
La primera versión de CrawlForge fue eso y nada más. Rastrear dos veces el mismo sitio y decir qué se había movido:
$ crawlforge diff antes.sqlite despues.sqlite
── Ha mejorado ──────────────────────────────
+ 11 HTTP-404-INTERNAL resueltos
404 → 301 /googlechrome
404 → 301 /internetexplorer
── Ha empeorado ─────────────────────────────
− 1 HTTP-REDIRECT-CHAIN nueva
/googlechrome → artículo → versión móvil
Esa salida es real, de una auditoría de colorvivo.com el 3 de agosto. Habíamos arreglado once enlaces rotos poniendo redirecciones, y una de esas redirecciones apuntaba a un artículo que a su vez ya estaba redirigido. Dos saltos en vez de uno.
Sin el diff no lo habríamos visto nunca. El recuento total de hallazgos subió de 2.834 a 2.856, así que leyendo solo el número la conclusión habría sido que el sitio empeoró.
Por qué no una extensión ni un servicio
Lo pensamos. Un servicio en la nube que rastree cada semana y te mande un correo es lo que pide el mercado, y probablemente venderíamos más.
Hay un problema: los rastreos son grandes. Uno de los sitios que llevamos, un medio con quince años de archivo, tiene 487.621 URLs. El fichero del rastreo completo ocupa 5,3 GB. Multiplicar eso por cien sitios y por cuatro semanas de histórico son cifras de infraestructura que no encajan con una herramienta de treinta euros al mes.
En tu ordenador, en cambio, 5,3 GB es un fichero. Lo abres, lo consultas, lo borras cuando ya no te sirve.
Rust y SQLite
Las dos decisiones técnicas que condicionan todo lo demás las tomamos el primer día.
El motor va en Rust porque el trabajo es parsear HTML a mucha velocidad y guardar millones de filas sin comerse la memoria. En el rastreo de esas 487.621 URLs la memoria se quedó plana en 202 MB, y no porque hayamos hecho magia: la memoria sigue a la cola de pendientes, no al total rastreado. Cuando la cola se vacía, baja.
Cada rastreo es un fichero SQLite, y eso resultó más importante de lo que parecía. Significa que puedes preguntarle cosas que a nosotros no se nos ocurrieron:
SELECT u.url, u.response_time_ms
FROM urls u
WHERE u.content_type LIKE 'text/html%'
ORDER BY u.response_time_ms DESC
LIMIT 20;
Ninguna interfaz cubre todos los casos. Un fichero abierto, sí.
Lo que Screaming Frog hace mejor
Conviene decirlo, porque lo llevamos usando años y sigue instalado en el portátil.
Su interfaz es mejor que la nuestra, entre otras cosas porque la nuestra todavía no existe: hoy CrawlForge es línea de comandos. Su catálogo de comprobaciones es más amplio, lleva quince años acumulándolas. Renderiza JavaScript, que nosotros no. Se integra con Search Console y con Analytics. Y tiene una comunidad enorme, con tutoriales para cualquier duda que se te ocurra.
Si auditas un sitio de vez en cuando y quieres una herramienta madura con interfaz gráfica, cómprala sin pensarlo. No estamos intentando sustituirla en ese caso, porque en ese caso no tenemos nada mejor que ofrecer.
Donde creemos que ganamos es en el nuestro: muchos sitios, revisiones repetidas, y la necesidad de saber qué se movió.
Qué hay hoy
La línea de comandos rastrea por HTTP, audita una carpeta compilada antes de publicar, y compara dos rastreos. Tiene 59 reglas de auditoría, cada una con su caso de prueba, porque una regla que se equivoca hace que dejes de fiarte del informe entero.
El código está publicado con licencia Apache 2.0: el rastreador, las reglas, la línea de comandos y los adaptadores de WordPress y Astro. Las aplicaciones de escritorio, si algún día existen, serán de pago. Una interfaz nativa es mucho trabajo y no prometemos fechas.
Mientras tanto vamos contando aquí lo que medimos y lo que se rompe. Esta semana, por ejemplo,
descubrimos que llevábamos meses devolviendo mal los <h1> que tienen un <br> dentro. Lo
encontramos comparando nuestra extracción con la de otro rastreador sobre las mismas 300 URLs, y da
para su propio artículo.