Detector Enlaces Rotos Automático | n8n
Revisar manualmente los enlaces de un sitio web es una tarea ingrata. Con decenas o cientos de páginas, cada una conteniendo múltiples enlaces internos, el proceso manual consume horas que podrían invertirse en tareas de mayor valor. Además, la revisión manual es propensa a errores humanos y rara vez se realiza con la frecuencia necesaria.
La automatización completa, en tu bandeja
Etapa 1: Configurar el Disparador Programado
Detector Automático de Enlaces Rotos con n8n: Escanea tu Web y Genera Informes en Google Sheets (Workflow n8n Gratuito + Vídeo + Tutorial + Descarga)
Prerrequisitos: instancia n8n y claves API.
! NecesitasPrerrequisitos: instancia n8n y claves API.
- A self-hosted n8n instance with terminal access.
- API credentials for the services used in this workflow.
La automatización completa, en tu bandeja
Desglose paso a paso del workflow n8n.
01 Paso 01Configurar el Disparador Programado.
El nodo Schedule Trigger es el punto de partida de toda la automatización. Define cuándo se ejecuta el workflow, permitiendo que el análisis de enlaces rotos se realice de forma completamente autónoma sin necesidad de intervención manual.
En este caso, el disparador está configurado para ejecutarse diariamente a medianoche. Este horario es estratégico: aprovecha las horas de menor tráfico web para realizar el escaneo sin afectar el rendimiento del sitio ni competir con los visitantes reales.
Parámetros- Trigger Interval (Intervalo de activación):
Days– El workflow se ejecutará basándose en intervalos diarios - Days Between Triggers (Días entre ejecuciones):
1– Se ejecuta cada día (valores válidos: 1-31) - Trigger at Hour (Hora de ejecución):
Midnight– La ejecución comienza a las 00:00 - Trigger at Minute (Minuto de ejecución):
0– Exactamente al inicio de la hora especificada
- Trigger Interval (Intervalo de activación):
02 Paso 02Definir la URL del Sitemap y el Dominio.
Este nodo Set establece los valores fundamentales que el workflow necesita para funcionar: la URL de su sitemap XML y su dominio. Estos datos se utilizarán en múltiples etapas posteriores para recuperar las páginas y filtrar correctamente los enlaces internos.
Es crucial configurar estos valores correctamente desde el principio, ya que determinan qué sitio web se analizará y cómo se identificarán los enlaces internos versus externos.
Parámetros- Mode (Modo):
Manual Mapping– Los valores se definen manualmente - site_map_url (URL del sitemap):
[SU_URL_SITEMAP]– Ejemplo:https://sudominio.com/page-sitemap.xml - domain (Dominio):
[SU_DOMINIO]– Ejemplo:sudominio.com - Include Other Input Fields (Incluir otros campos): Desactivado – Solo se pasan los campos definidos
- Mode (Modo):
03 Paso 03Crear el Documento Google Sheets para el Informe.
Este nodo crea automáticamente un nuevo documento Google Sheets cada vez que se ejecuta el workflow. El título incluye la fecha actual, lo que facilita organizar los informes cronológicamente y comparar la evolución de los enlaces rotos a lo largo del tiempo.
Tener un documento separado por día permite mantener un historial limpio y detectar si ciertos enlaces rotos son recurrentes o si aparecen nuevos problemas tras actualizaciones del sitio.
Parámetros- Credential to connect with (Credencial): Seleccione su credencial Google Sheets configurada en n8n
- Resource (Recurso):
Document– Crea un documento completo de Google Sheets - Operation (Operación):
Create– Genera un nuevo documento - Title (Título):
{{ $now.toFormat('MM-dd-yyyy') }}– Nombre dinámico con fecha (ejemplo:01-17-2026)
04 Paso 04Preparar la Estructura de Datos para Enlaces Rotos.
Este nodo Set define la estructura de datos que se utilizará para almacenar la información de cada enlace roto detectado. Establece dos campos fundamentales: la URL de origen (la página donde se encontró el enlace) y el enlace roto en sí.
Esta preparación estructural es esencial para que los datos fluyan correctamente hacia Google Sheets en el formato esperado, con columnas claramente definidas.
Parámetros- Mode (Modo):
Manual Mapping– Configuración manual de campos - source_url (URL de origen): Campo de tipo
String– Almacenará la página donde se detectó el enlace roto - broken_link (Enlace roto): Campo de tipo
String– Almacenará la URL que devuelve error - Include Other Input Fields (Incluir otros campos): Desactivado – Solo se pasan estos dos campos
- Mode (Modo):
05 Paso 05Configurar la Inserción de Filas en Google Sheets.
El nodo Append Row se encarga de añadir cada enlace roto detectado al documento Google Sheets creado anteriormente. Mapea los datos de origen y el enlace roto a columnas específicas de la hoja de cálculo.
Esta configuración garantiza que cada error detectado quede documentado con su contexto completo: tanto la URL problemática como la página donde aparece.
Parámetros- Credential to connect with (Credencial): Seleccione su credencial Google Sheets
- Resource (Recurso):
Sheet Within Document– Opera sobre una hoja específica dentro del documento - Operation (Operación):
Append Row– Añade una nueva fila al final de la hoja - Document (Documento):
By IDcon expresión{{ $('Create Report').item.json.spreadsheetId }}– Referencia dinámica al documento recién creado - Sheet (Hoja):
By IDcon valor0– Primera hoja del documento - Mapping Column Mode (Modo de mapeo):
Map Each Column Manually– Configuración manual de columnas - Columna A1: Campo para
source_url - Columna B1: Campo para
broken_link
06 Paso 06Mover el Informe a una Carpeta Organizada.
Una vez generado el informe, este nodo lo mueve automáticamente desde la raíz de Google Drive a una carpeta dedicada. Esto mantiene su Drive organizado y facilita encontrar los informes históricos cuando necesite consultarlos.
La organización automática de archivos es un detalle que marca la diferencia entre una automatización básica y una verdaderamente profesional.
Parámetros- Credential to connect with (Credencial): Seleccione su credencial Google Drive
- Resource (Recurso):
File– Opera sobre archivos - Operation (Operación):
Move– Mueve el archivo a otra ubicación - File (Archivo):
By IDcon expresión{{ $('Create Report').item.json.spreadsheetId }}– El documento recién creado - Parent Drive (Unidad destino):
From list→My Drive– Su unidad principal de Google Drive - Parent Folder (Carpeta destino):
From list→[SU_CARPETA_INFORMES]– Seleccione o cree una carpeta dedicada
07 Paso 07Recuperar el Sitemap XML.
Este nodo HTTP Request descarga el contenido de su sitemap XML. El sitemap contiene la lista de todas las páginas de su sitio web que deben ser analizadas, sirviendo como el mapa de navegación para el resto del workflow.
La solicitud GET recupera el XML completo que posteriormente será parseado para extraer cada URL individual.
Parámetros- Method (Método):
GET– Solicitud de lectura - URL:
{{ $('Set Domain').item.json.site_map_url }}– URL del sitemap definida en la Etapa 2 - Authentication (Autenticación):
None– Los sitemaps suelen ser públicos - Send Query Parameters (Enviar parámetros): Desactivado
- Send Headers (Enviar cabeceras): Desactivado
- Send Body (Enviar cuerpo): Desactivado
- Method (Método):
08 Paso 08Convertir el XML del Sitemap a JSON.
El sitemap se descarga en formato XML, pero n8n trabaja de forma nativa con JSON. Este nodo transforma la estructura XML en un objeto JSON manipulable, permitiendo acceder fácilmente a cada URL listada en el sitemap.
Esta conversión es fundamental para poder iterar sobre las URLs en los siguientes pasos del workflow.
Parámetros- Mode (Modo):
XML to JSON– Conversión de XML a JSON - Property Name (Nombre de propiedad):
data– El XML se almacenará en este campo
- Mode (Modo):
09 Paso 09Separar las URLs del Sitemap.
Este nodo extrae cada URL individual del sitemap y las separa en items independientes. El sitemap tiene una estructura donde todas las URLs están agrupadas bajo
urlset.url, y este nodo las descompone para procesarlas una por una.Cada URL del sitemap se convertirá en un item separado que fluirá por el resto del workflow.
Parámetros- Fields To Split Out (Campos a separar):
urlset.url– Ruta al array de URLs en la estructura del sitemap - Include (Incluir):
No Other Fields– Solo se conservan las URLs, descartando metadatos innecesarios
- Fields To Split Out (Campos a separar):
10 Paso 10Procesar URLs en Lotes Individuales.
Este nodo controla el flujo de procesamiento, enviando las URLs de una en una para evitar sobrecargar el servidor web o alcanzar límites de rate limiting. Procesar en lotes de 1 garantiza un análisis ordenado y controlado.
El procesamiento secuencial es especialmente importante cuando se trabaja con sitios que tienen cientos de páginas.
Parámetros- Batch Size (Tamaño del lote):
1– Procesa una URL a la vez
- Batch Size (Tamaño del lote):
11 Paso 11Descargar el Contenido HTML de Cada Página.
Para cada URL del sitemap, este nodo descarga el contenido HTML completo de la página. Este HTML será analizado en la siguiente etapa para extraer todos los enlaces internos que contiene.
La solicitud GET recupera el código fuente de la página tal como lo vería un navegador.
Parámetros- Method (Método):
GET– Solicitud de lectura - URL:
{{ $json.loc }}– URL de la página actual extraída del sitemap - Authentication (Autenticación):
None– Páginas públicas del sitio - Send Query Parameters (Enviar parámetros): Desactivado
- Send Headers (Enviar cabeceras): Desactivado
- Send Body (Enviar cuerpo): Desactivado
- Method (Método):
12 Paso 12Extraer Enlaces Internos con Filtrado Inteligente.
Este nodo Code contiene la lógica JavaScript que extrae todos los enlaces del HTML descargado. Utiliza expresiones regulares para encontrar URLs en atributos href y src, y aplica filtros inteligentes para excluir recursos CDN, endpoints de API y archivos estáticos que no necesitan verificación.
El código también deduplica los enlaces encontrados para evitar verificar la misma URL múltiples veces.
Parámetros- Mode (Modo):
Run Once for All Items– El código se ejecuta una vez con todos los datos - Language (Lenguaje):
JavaScript - Código JavaScript:
- Extrae el HTML desde
$input.item.json.data - Obtiene el dominio del nodo ‘Set Domain’
- Usa regex para encontrar URLs en atributos href/src
- Deduplica resultados con
Set - Filtra patrones CDN comunes (cloudflare, jsdelivr, cdnjs, fonts.googleapis, etc.)
- Extrae el HTML desde
- Mode (Modo):
13 Paso 13Consolidar Todos los Enlaces Extraídos.
El nodo Merge recopila todos los enlaces extraídos de todas las páginas y los consolida en una única lista. Esto prepara los datos para ser enviados al sub-workflow que realizará la verificación de cada enlace.
La agregación permite procesar todos los enlaces de forma eficiente en un solo paquete.
Parámetros- Aggregate (Agregar):
All Item Data (Into a Single List)– Combina todos los items en una lista - Put Output in Field (Campo de salida):
data– La lista consolidada se almacena en este campo - Include (Incluir):
All Fields– Se conservan todos los campos de cada item
- Aggregate (Agregar):
14 Paso 14Enviar Enlaces al Sub-Workflow de Verificación.
Este nodo envía la lista completa de enlaces al sub-workflow de verificación mediante una solicitud POST a un webhook. El payload incluye tanto los enlaces a verificar como el ID del documento Google Sheets donde se registrarán los errores.
Esta arquitectura de dos workflows permite escalar el procesamiento y manejar grandes volúmenes de enlaces.
Parámetros- Method (Método):
POST– Envío de datos - URL:
[SU_URL_WEBHOOK]/brokenlinkcheck– URL del webhook del sub-workflow - Authentication (Autenticación):
None - Send Body (Enviar cuerpo): Activado
- Body Content Type (Tipo de contenido):
JSON - Specify Body (Especificar cuerpo):
Using JSON - JSON:
{{ { spreadsheet_id: $('Create Report').item.json.spreadsheetId, data: $json.data } }}– Incluye ID del documento y lista de enlaces
- Method (Método):
15 Paso 15Configurar el Webhook Receptor del Sub-Workflow.
Este nodo Webhook es el punto de entrada del sub-workflow. Recibe los datos enviados por el workflow principal y los pasa a los nodos siguientes para la verificación individual de cada enlace.
El webhook actúa como puente entre los dos workflows, permitiendo una arquitectura modular y mantenible.
Parámetros- HTTP Method (Método HTTP):
POST– Acepta solicitudes POST - Path (Ruta):
brokenlinkcheck– Identificador único del webhook - Authentication (Autenticación):
None– Sin autenticación requerida - Respond (Responder):
Using 'Respond to Webhook' Node– La respuesta se gestiona con un nodo dedicado
- HTTP Method (Método HTTP):
16 Paso 16Separar los Datos Recibidos del Webhook.
Este nodo extrae el array de enlaces del cuerpo de la solicitud webhook. Los datos llegan agrupados y este nodo los separa para que cada enlace pueda ser procesado individualmente.
La separación de datos es el primer paso del sub-workflow para iniciar la verificación enlace por enlace.
Parámetros- Fields To Split Out (Campos a separar):
body.data– Ruta al array de enlaces en el payload del webhook - Include (Incluir):
No Other Fields– Solo se conservan los enlaces
- Fields To Split Out (Campos a separar):
17 Paso 17Procesar Enlaces Individualmente.
Similar al nodo anterior en el workflow principal, este controla el ritmo de verificación de enlaces. Procesar de uno en uno evita saturar el servidor y permite manejar correctamente los timeouts y errores.
El procesamiento secuencial es crucial para obtener resultados precisos sin falsos positivos por sobrecarga.
Parámetros- Batch Size (Tamaño del lote):
1– Verifica un enlace a la vez
- Batch Size (Tamaño del lote):
18 Paso 18Verificar el Estado HTTP de Cada Enlace.
Este nodo realiza una solicitud HTTP HEAD a cada enlace. El método HEAD es más eficiente que GET porque solo recupera las cabeceras de respuesta sin descargar el contenido completo, permitiendo verificar rápidamente si el enlace funciona.
El código de estado HTTP de la respuesta indicará si el enlace está activo (200) o roto (404, 500, etc.).
Parámetros- Method (Método):
HEAD– Solo recupera cabeceras, más rápido que GET - URL:
{{ $json.url }}– URL del enlace a verificar - Authentication (Autenticación):
None - Send Query Parameters (Enviar parámetros): Desactivado
- Send Headers (Enviar cabeceras): Activado (sin cabeceras personalizadas configuradas)
- Send Body (Enviar cuerpo): Desactivado
- Options → Ignore SSL Issues (Ignorar problemas SSL): Activado – Evita fallos por certificados no válidos
- Method (Método):
19 Paso 19Filtrar Solo los Enlaces con Error.
Este nodo IF evalúa el código de estado HTTP de cada respuesta. Solo los enlaces que NO devuelven un código 200 pasan al siguiente paso para ser registrados como enlaces rotos. Los enlaces funcionales se descartan del flujo.
Este filtrado es el corazón de la lógica de detección: cualquier código diferente a 200 (incluyendo 404, 500, 301, etc.) se considera problemático.
Parámetros- Condition (Condición):
{{ $json.statusCode }}is not equal to200 - Convert types where required (Convertir tipos): Activado – Garantiza comparación correcta de tipos de datos
- Condition (Condición):
20 Paso 20Registrar el Enlace Roto en Google Sheets.
Cuando se detecta un enlace roto, este nodo añade una nueva fila al documento Google Sheets creado al inicio del workflow. Registra tanto la URL de la página donde se encontró el enlace (source_url) como el enlace roto en sí (broken_link).
Este registro detallado facilita localizar y corregir cada enlace problemático.
Parámetros- Credential to connect with (Credencial): Seleccione su credencial Google Sheets
- Resource (Recurso):
Sheet Within Document - Operation (Operación):
Append Row - Document (Documento):
By IDcon expresión{{ $('Receive Link').item.json.body.spreadsheet_id }}– Referencia al documento desde el webhook - Sheet (Hoja):
By IDcon valor0– Primera hoja - Mapping Column Mode (Modo de mapeo):
Map Each Column Manually - source_url:
{{ $('Loop Over Items').item.json.sourcePage }}– Página de origen - broken_link:
{{ $('Loop Over Items').item.json.url }}– URL del enlace roto
21 Paso 21Consolidar Resultados para la Respuesta.
Este nodo Merge agrega todos los resultados del procesamiento en una estructura unificada antes de enviar la respuesta al webhook. Consolida la información de todos los enlaces verificados.
La agregación final prepara los datos para la respuesta que confirmará al workflow principal que el procesamiento ha terminado.
Parámetros- Aggregate (Agregar):
All Item Data (Into a Single List) - Put Output in Field (Campo de salida):
data - Include (Incluir):
All Fields
- Aggregate (Agregar):
22 Paso 22Responder al Webhook Principal.
Este nodo final envía una respuesta al workflow principal, confirmando que el procesamiento de verificación de enlaces ha concluido. Cierra el ciclo de comunicación entre ambos workflows.
La respuesta indica al workflow principal que puede continuar o finalizar su ejecución.
Parámetros- Respond With (Responder con):
First Incoming Item– Devuelve los datos del primer item procesado como confirmación
- Respond With (Responder con):
Consigue el JSON n8n listo para importar + la guía
Deja tu email y te enviamos el escenario completo.
- JSON n8n listo para importar
- Guía de setup escrita
- Tutorial en video incluido
Por Qué Automatizar la Detección de Enlaces Rotos es un Game-Changer para Especialistas SEO y Webmasters
Los enlaces rotos son uno de los factores más subestimados que afectan tanto la experiencia del usuario como el posicionamiento en buscadores. Google interpreta los errores 404 como señales de un sitio mal mantenido, lo que puede impactar negativamente en su ranking.
Problemas comunes con la verificación manual de enlaces:- Consume horas que podrían dedicarse a tareas estratégicas de mayor valor
- Se realiza con poca frecuencia, permitiendo que los problemas se acumulen
- Es propensa a errores humanos y omisiones involuntarias
- No escala cuando el sitio crece a cientos de páginas
- Dificulta identificar patrones recurrentes o causas raíz
- Monitoreo diario completamente automático sin intervención manual
- Detección temprana de problemas antes de que afecten al SEO
- Informes organizados por fecha que permiten seguimiento histórico
- Escalabilidad ilimitada independiente del tamaño del sitio
- Filtrado inteligente que excluye recursos CDN y archivos estáticos
- Integración con Google Sheets para análisis y colaboración
Implementar este workflow transforma una tarea tediosa en un proceso invisible que trabaja constantemente para mantener la salud de su sitio web. Los especialistas SEO y webmasters pueden centrarse en estrategias de crecimiento mientras n8n vigila silenciosamente cada enlace.
La automatización completa, en tu bandeja.
JSON n8n, guía escrita y tutorial en video, todo para desplegar en menos de 15 minutos.
- Escenario n8n JSON completo
- Documentación de setup paso a paso
- Tutorial en video completo