Cómo instalar Screaming Frog en un VPS

Screaming Frog suele asociarse a una aplicación de escritorio. Abres, lanzas un rastreo, revisas las pestañas y cierras. Pero esa es solo una pequeña parte de lo que puede hacer.

Existe otra forma de utilizarla, mucho menos conocida, en la que deja de depender de un ordenador para ejecutarse de forma autónoma en un servidor, incluso de madrugada y sin intervención humana.

Interfaz gráfica de Screaming Frog SEO Spider, el punto de partida antes de pasar al modo headless en un VPS
La versión de escritorio: útil para configurar, prescindible para rastrear. Es el mundo que voy a dejar atrás.

Ese es el terreno del modo Headless y la línea de comandos (CLI).

Al ejecutarse sin interfaz gráfica, Screaming Frog deja de ocupar tu pantalla para ocupar un eslabón: el rastreo pasa a ser una etapa más dentro de una cadena que no lo necesita a él en primer plano ni a ti delante.

Se integra en tareas programadas con cron, en flujos de n8n, en scripts de Python o PowerShell, y encadena sus exportaciones con los procesos que vengan después.

A esa integración se suma otra capa: cada rastreo puede enriquecerse con datos de Search Console, GA4, PageSpeed, métricas de enlaces o extracciones personalizadas.

No obstante, antes de llegar ahí hay que superar el primer obstáculo: conseguir que Screaming Frog funcione correctamente en un VPS.

Esta guía recoge las notas y procedimientos que voy validando mientras aprendo a trabajar con el modo Headless y la CLI.

No es la documentación oficial de Screaming Frog ni pretende serlo: es una referencia práctica, construida a base de prueba, error y muchos logs, con la esperanza de que a otros les evite las horas que a mí nadie me ahorró.

Antes de empezar, necesitarás dos cosas:

  1. Una licencia de Screaming Frog SEO Spider (el modo Headless solo está disponible en la versión de pago).
  2. Un VPS al que puedas acceder por SSH.

Instalación de Screaming Frog SEO Spider en un VPS

Este es el primer detalle importante que conviene entender. La instalación en sí no es complicada.

La diferencia es que Screaming Frog no forma parte de los repositorios habituales de Linux.

Aunque no es un problema, sí cambia ligeramente la forma de instalarlo y de mantenerlo actualizado.

Esa diferencia explica varias de las decisiones que veremos durante la instalación y también la forma de mantener Screaming Frog actualizado en el futuro.

En su lugar, el paquete debe descargarse desde el sitio oficial de Screaming Frog e instalarse manualmente.

Aunque apt será el encargado de instalar el programa y resolver sus dependencias, el paquete no procederá de un repositorio configurado en el sistema, sino de una dirección que tú le indicarás.

Esta diferencia tiene una consecuencia importante: el sistema no actualizará automáticamente Screaming Frog cuando aparezcan nuevas versiones.

Más adelante veremos cómo solucionar este inconveniente.

Descargar el paquete del software Screaming Frog desde el servidor

No es necesario descargar el archivo .deb a tu ordenador para volver a subirlo después al VPS.

Como el paquete está disponible desde una URL pública, lo más sencillo es que el propio servidor lo descargue directamente desde la web de Screaming Frog.

Asegúrate únicamente de elegir el paquete correspondiente a la arquitectura de tu servidor (amd64 para la mayoría de VPS con procesadores Intel o AMD, y arm64 para servidores ARM).

Instalar el paquete con apt

Aunque pueda parecer un detalle menor, conviene utilizar apt en lugar de dpkg.

Ambos pueden instalar un paquete .deb, pero apt tiene la ventaja de resolver automáticamente las dependencias necesarias cuando alguna de ellas no esté presente en el sistema.

Ejecuta los siguientes comandos para descargar el paquete e instalarlo en el sistema:

wget https://download.screamingfrog.co.uk/products/seo-spider/screamingfrogseospider_24.3_amd64.deb

sudo apt install ./screamingfrogseospider_24.3_amd64.deb

Sustituye 24.3 por la versión disponible en el momento de realizar la instalación.

Fíjate también en el prefijo ./ delante del nombre del archivo.

Tiene una función importante: indica a apt que el paquete se encuentra en el directorio actual.

Si se omite, apt intentará buscar un paquete con ese nombre en los repositorios configurados del sistema y mostrará un error indicando que no puede localizarlo.

Aunque el paquete no proceda de ningún repositorio, apt seguirá resolviendo correctamente las dependencias necesarias.

En el caso de Screaming Frog, Java no es una de ellas, ya que viene incluido en el propio paquete.

Una vez finalizada la instalación, ya podrás ejecutar la CLI de Screaming Frog desde la terminal mediante el comando:

screamingfrogseospider

Consejo: si apt muestra un error durante la instalación, no pases inmediatamente a dpkg. En la mayoría de los casos, el propio mensaje de apt indica qué dependencia falta o qué acción debes realizar para resolver el problema.

Licencia y EULA en modo Headless, sin interfaz gráfica

La instalación no termina cuando el programa queda instalado.

Para poder utilizar el modo Headless también es necesario registrar la licencia y aceptar el acuerdo de licencia (EULA).

En un entorno con interfaz gráfica estos pasos se realizan desde la propia aplicación, pero en un VPS deben hacerse manualmente mediante archivos de configuración.

En un VPS no existe una ventana donde introducir la licencia.

Este paso se realiza mediante un fichero de configuración y solo es necesario hacerlo una vez.

La licencia se almacena en el fichero ~/.ScreamingFrogSEOSpider/licence.txt. La primera línea contiene el nombre de usuario y la segunda, la clave de licencia.

Cuidado con las mayúsculas. El nombre es .ScreamingFrogSEOSpider, con esas mayúsculas exactas. Y aquí Linux te tiende una trampa doble: la ruta en minúsculas también existe — es ~/.screamingfrogseospider, el fichero donde se configura la RAM, que veremos enseguida —, así que al equivocarte no recibes un «no existe» que te ponga sobre aviso, sino errores desconcertantes de otro tipo: fichero y carpeta son objetos distintos con nombre casi idéntico.

Copia el nombre tal cual y te ahorras pelearte con una ruta que responde, pero no es la que buscas.

Errores de bash al escribir en minúsculas la ruta de la carpeta .ScreamingFrogSEOSpider en Linux: la misma ruta responde distinto según las mayúsculas
La misma ruta en minúsculas falla de dos formas distintas; solo responde escrita con las mayúsculas exactas.

mkdir -p ~/.ScreamingFrogSEOSpider
printf "tu-usuario\nTU-CLAVE-DE-LICENCIA\n" > ~/.ScreamingFrogSEOSpider/licence.txt

Igual que ocurre con la licencia, la aceptación del acuerdo de licencia (EULA) también debe realizarse mediante un fichero de configuración. Basta con añadir la línea eula.accepted al archivo spider.config de esa misma carpeta.

¿Cómo sabes que la aceptación surtió efecto? Screaming Frog deja su propia huella: tras la primera ejecución genera los ficheros eula.properties y eula.txt en esa misma carpeta, con la versión del acuerdo y accepted=true.

Si están ahí, el trámite quedó cerrado.

Cuando en una versión futura cambie el EULA, el propio programa lo indicará durante la ejecución, mostrando el número de versión del acuerdo que espera encontrar.

Aceptar el EULA desde un VPS fue probablemente la parte que más tiempo me llevó durante todo el proceso de instalación.

Si se te resiste, no desesperes: una vez que entiendes cómo funciona, solo tendrás que hacerlo una única vez.

Ficheros eula.properties y eula.txt generados por Screaming Frog en un VPS tras aceptar el EULA en modo headless, con version=15 y accepted=true
La huella de la aceptación: SF genera sus propios ficheros eula con accepted=true. Si aparecen, el EULA quedó cerrado. Solo se hace una vez.

Memoria y modo de almacenamiento para rastreos Headless

Una vez instalado y licenciado, merece la pena revisar dos parámetros que influyen directamente en el rendimiento del rastreo:

  • RAM asignada: Screaming Frog se ejecuta sobre Java y la memoria máxima disponible se controla mediante el parámetro -Xmx del fichero ~/.screamingfrogseospider. Por ejemplo, -Xmx4g limita Java a un máximo de 4 GB de RAM. Como regla práctica, deja siempre memoria suficiente para el sistema operativo.
  • Modo base de datos: En sitios con decenas de miles de URLs, utilizar el modo de almacenamiento en base de datos (Database Storage) ayuda a evitar agotar la memoria RAM. Este ajuste se guarda en el fichero de configuración .seospiderconfig, que veremos en el siguiente apartado. A cambio de utilizar más disco, reduce considerablemente el consumo de memoria RAM.

En un caso real, un rastreo de 10.041 URLs en modo memoria con -Xmx2g tocó techo en el 12 % (unos 240 MB).

Ojo con generalizar: eso es con 10.000 URLs.

El modo memoria escala mal, y en sitios de cientos de miles de URLs ese margen desaparece rápido.

Por eso, a partir de cierto tamaño, el modo base de datos deja de ser opcional.

Parámetro -Xmx de RAM y modo de almacenamiento de Screaming Frog headless verificados en el log del rastreo: Max=2048MB y Storage Mode MEMORY
La RAM se fija en el fichero del -Xmx; el modo de almacenamiento lo confirma el log en ejecución. El log no opina: ejecuta.

El primer rastreo Headless desde la CLI

Con el programa instalado, licenciado y configurado, ya puedes ejecutar el primer rastreo en modo Headless. Un ejemplo completo sería el siguiente:


nohup /usr/bin/screamingfrogseospider \
 --headless \
--config "/srv/sf_config/blackflags-suave.seospiderconfig" \
 --crawl https://temassobresalud.com \
 --export-tabs "Internal:All" \
 --output-folder "/srv/sf_exports" \
 --export-format csv \
 --timestamped-output \
 --save-crawl \
 > /srv/sf_exports/sf_log_both.txt 2>&1 &

Aunque el comando pueda parecer largo, cada flag de la CLI cumple una función concreta:

  • --headless inicia Screaming Frog sin interfaz gráfica.
  • --config es el fichero que lleva el mandato del rastreo: velocidad, modo de almacenamiento y APIs. En headless no ajustas nada sobre la marcha; SF obedece lo que diga ese .seospiderconfig. En este ejemplo, blackflags-suave limita el rastreo a 1 URL/s.
  • --output-folder junto con --timestamped-output crea una carpeta independiente para cada rastreo, lo que facilita comparar ejecuciones con el paso del tiempo.
  • --save-crawl guarda el archivo .seospider para poder abrir posteriormente el rastreo desde la versión de escritorio (su inverso, --load-crawl, permite recargar un rastreo ya guardado).
  • --export-tabs permite exportar en CSV únicamente las pestañas que te interesen.

El resultado es una carpeta independiente para cada rastreo, con el rastreo completo, las exportaciones en CSV y toda la información preparada para analizarla manualmente o integrarla en automatizaciones.

El uso de nohup permite que el rastreo continúe ejecutándose aunque cierres la sesión SSH, mientras que la redirección final guarda tanto la salida estándar como los posibles mensajes de error en un único archivo de registro.

Y aquí va un detalle que cuesta ver: en headless no trabajas a ciegas. Cada cierto tiempo, SF escribe una línea Crawl update con la velocidad real del rastreo (mAverageUrlsPerSecond).

No hace falta restar timestamps a mano: el config te dice a qué velocidad le permitiste ir; esta línea te dice a qué velocidad fue de verdad.

En un sitio rápido coinciden.

En uno lento, el log baja del tope, y ese hueco es información. La diferencia con la GUI es sutil pero real: la interfaz te pone ese número delante quieras o no; el log te lo deja ahí y tú decides si lo miras.

Log de un rastreo headless de Screaming Frog completado: 10.042 URLs en 14 minutos y el export CSV escrito en su carpeta con timestamp
Un rastreo real de principio a fin: 10.042 URLs en 14 minutos, el CSV escrito en su carpeta con timestamp, y el log contándolo todo en cuatro líneas.

El fallo silencioso de los exports (y el –help que lo evita)

El síntoma es desconcertante: el log termina en verde, «Application Exited», todo en orden… y en la carpeta de exports no hay nada nuevo.

Ni CSV, ni siquiera la carpeta con timestamp de esa ejecución. Si el nombre que pasas a --export-tabs o --bulk-export no coincide carácter a carácter con la etiqueta de la pestaña, Screaming Frog completa el rastreo y descarta en silencio el export mal escrito.

Lo comprobé provocándolo: pedí «Internal:Todo» en lugar de «Internal:All», y el log no registró ni un aviso — grepear errores solo devuelve falsos positivos. En un cron nocturno, eso es creer que tienes datos hasta la mañana en que los necesitas.

Fallo silencioso de Screaming Frog headless: el rastreo con un nombre de pestaña inválido termina sin avisos, no crea carpeta de export, y --help export-tabs muestra el nombre correcto
El experimento: el rastreo con «Internal:Todo» terminó a las 10:56 sin una sola queja, pero la única carpeta del día es la del cron de las 5. Mi export no existe. Debajo, el –help con el nombre que SF esperaba.

El antídoto vive en la propia CLI. En Headless no existen pestañas donde comprobar una etiqueta: los nombres válidos son, exactamente, los que imprima --help en tu versión instalada.

screamingfrogseospider --help export-tabs lista las pestañas exportables, y el mismo patrón sirve para --help bulk-export y --help save-report. De ahí se copian; de memoria, jamás.

Conectar APIs y enriquecer los rastreos

Una de las grandes ventajas del modo Headless es que puede reutilizar la misma configuración de APIs que utilizas en la versión de escritorio.

Gracias a ello, cada URL rastreada puede enriquecerse con datos procedentes de Google Search Console, Google Analytics 4, PageSpeed Insights, Ahrefs y otros servicios compatibles.

El rastreo deja de limitarse al estado HTTP o a los enlaces internos y pasa a incorporar métricas de visibilidad, rendimiento y uso real.

La configuración de estas integraciones se realiza una sola vez en la versión de escritorio, se guarda en un fichero .seospiderconfig y posteriormente se reutiliza desde el VPS en cada ejecución.

Sobre el comando del primer rastreo, enriquecerlo con Google son dos flags más:

--use-google-analytics-4 "Cuenta GA4" "Mi cuenta" "temassobresalud.com" "All Data Streams" \
--use-google-search-console "Cuenta GSC" "https://temassobresalud.com/"

Cada parámetro tiene su porqué —la cuenta, la propiedad, el data stream— y las credenciales se configuran una única vez.

En un próximo artículo veremos paso a paso cómo conectar estas APIs, subir las credenciales al servidor y ejecutar rastreos enriquecidos en modo Headless. (Aquí irá el enlace cuando el artículo esté publicado).

Programar rastreos Headless con cron

Una de las principales ventajas de ejecutar Screaming Frog en modo Headless en un VPS es poder programar rastreos automáticos mediante cron.

Así puedes lanzar auditorías periódicas sin depender de que tu ordenador esté encendido.

Un ejemplo sería el siguiente:

0 2 * * * /usr/bin/screamingfrogseospider --headless --crawl https://tudominio.com --config /home/usuario/configs/rastreo-con-apis.seospiderconfig --output-folder /home/usuario/crawls --timestamped-output --export-tabs "Internal:All" >> /home/usuario/crawls/cron.log 2>&1

Dos recomendaciones importantes:

  • Guarda siempre el archivo de log: cuando un rastreo nocturno falla, ese fichero suele ser la única pista para averiguar qué ocurrió. Además de la redirección del ejemplo, la CLI ofrece --save-logs para volcar los registros a una carpeta concreta.
  • Limita la velocidad de rastreo en la configuración: un rastreo demasiado agresivo puede hacer que el servidor de destino interprete tu auditoría como un comportamiento anómalo o incluso como un ataque.
Crontab de un VPS filtrado con grep mostrando el rastreo semanal programado de Screaming Frog y la limpieza diaria de exports
Mi crontab real (filtrado): rastreo cada lunes de madrugada y limpieza diaria de exports. Con el tiempo, el comando kilométrico del ejemplo acaba viviendo en un script — el patrón es el mismo.

Mantener Screaming Frog Headless actualizado

Como adelanté al principio, instalar Screaming Frog desde fuera de los repositorios tiene una consecuencia importante: apt no actualizará Screaming Frog solo.

Cuando salga una versión nueva, el procedimiento es repetir la descarga y la instalación:

wget https://download.screamingfrog.co.uk/products/seo-spider/screamingfrogseospider_25.2_amd64.deb

sudo apt install ./screamingfrogseospider_25.2_amd64.deb

La configuración, la licencia y el perfil sobreviven a la actualización: se almacenan en tu carpeta de usuario, no en el paquete.

Un truco que debo agradecer a Chris Lever, adaptado aquí a Linux: guarda la salida de --help en un fichero por versión (por ejemplo, screamingfrogseospider --help export-tabs > help-25.2.txt) y haz un diff al actualizar.

Detectarás flags nuevos o renombrados antes de que rompan tu pipeline, y no cuando el cron vuelva con la carpeta vacía.

Un último consejo: no actualices la víspera de un rastreo importante. Instala primero la nueva versión, ejecuta un rastreo de prueba y, cuando compruebes que todo funciona correctamente, vuelve a activar la tarea programada.

El siguiente paso

Llegados a este punto, y gracias a la CLI, Screaming Frog deja de ser una aplicación de escritorio para convertirse en un proceso automatizado que trabaja por sí solo desde el VPS.

Ese cambio de enfoque es, probablemente, la mayor ventaja de utilizar la versión Headless.

Diagrama del flujo completo de Screaming Frog headless: configuración de APIs en el escritorio, config que viaja al VPS, rastreo programado con cron, exports con timestamp y automatización posterior
El circuito completo, de la GUI al dato procesado: configuras una vez, el VPS rastrea cada semana, y el log acompaña cada etapa.

A partir de aquí empieza otra historia: enriquecer los rastreos agregando las APIs GSC & GA4, procesar las exportaciones e integrarlas en automatizaciones. Esa parte merece una guía propia.

Tabla de contenidos

Últimas entradas