Verificador de Enlaces Rotos: Documentación
Detección de enlaces muertos, imágenes rotas y archivos de imagen ausentes del disco en PrestaShop 8 y 9. Instalación, ajustes del análisis, lectura de resultados, corrección y solución de problemas.
Instalación
Requisitos
- PrestaShop 8.0 a 9.x
- PHP 7.4 mínimo, 8.1 o superior recomendado
- Extensión PHP cURL para la comprobación HTTP
- Extensión PHP DOM recomendada para la extracción de enlaces (si falta, toma el relevo un método por expresiones regulares)
Instalar el módulo
- Descarga
dfbrokenlinks.zipdesde tu cuenta de cliente. - Ve a Módulos, Gestor de módulos, Subir un módulo y suelta el ZIP. También puedes subir la carpeta
dfbrokenlinks/a/modules/por FTP. - Pulsa Instalar.
La instalación crea cuatro tablas SQL (ps_dfbl_scan, ps_dfbl_url, ps_dfbl_occurrence, ps_dfbl_ignore) y una pestaña de back-office.
Dónde encontrarlo
El escáner está en Catálogo, Enlaces e imágenes rotos. La página de configuración del módulo, en el gestor de módulos, muestra un resumen del último análisis y un botón que lleva al escáner.
Lanzar un primer análisis
Abre Catálogo, Enlaces e imágenes rotos y pulsa Iniciar un nuevo análisis. Los ajustes por defecto valen para la mayoría de tiendas, ya los afinarás después.
Las dos fases
Un análisis se desarrolla en dos tiempos:
- Recolección. El módulo recorre los contenidos que has marcado, extrae cada enlace y cada imagen, deduplica los URL y comprueba en disco los archivos de imagen referenciados en la base de datos.
- Verificación. Los URL restantes se consultan por HTTP, varios a la vez, para leer su código de respuesta.
El navegador pilota el avance mediante llamadas sucesivas. Cada llamada trabaja durante el tiempo fijado en los ajustes (12 segundos por defecto), guarda su posición en la base de datos y devuelve el control. Es lo que permite procesar un catálogo grande sin superar nunca max_execution_time.
Seguir el progreso
La barra de progreso muestra la fase en curso. Durante la verificación, un contador indica el número de URL ya probados sobre el total recolectado. Los seis indicadores bajo la barra se actualizan sobre la marcha.
Parar y reanudar
El botón Parar interrumpe el análisis de forma limpia. Cerrar la pestaña del navegador tiene el mismo efecto, sin pérdida: la posición se guarda tras cada lote. Un análisis detenido conserva los resultados ya obtenidos, visibles en la tabla.
Ajustes
El panel Ajustes del análisis está plegado por defecto y se abre con el icono de la esquina superior derecha del bloque.
Contenidos a analizar
Cada casilla es una fuente. Las fuentes con la etiqueta archivos no generan ninguna petición HTTP: comprueban la presencia de los archivos en el disco.
- Productos: descripción, descripción corta, mensajes de disponibilidad con y sin stock
- Categorías: descripción y
additional_descriptionsi tu versión de PrestaShop tiene esa columna - Páginas CMS: contenido
- Categorías CMS: descripción
- Marcas: descripción y descripción corta
- Proveedores: descripción
- Tiendas: nota, dirección línea 1 y línea 2
- Bloques de enlaces del pie de página: contenido personalizado del módulo
ps_linklist - Archivos de imagen de producto: presencia en
img/p/ - Archivos de imagen de categorías, marcas, proveedores y tiendas: presencia en
img/c/,img/m/,img/su/,img/st/ - Archivos adjuntos de producto: presencia en la carpeta
download/
Una fuente cuya tabla no existe en tu instalación, por ejemplo los bloques de enlaces si falta ps_linklist, sencillamente no aparece en la lista.
Idiomas
Por defecto se analizan todos los idiomas activos. Desmarcar idiomas acorta la recolección, pero deja enlaces sin comprobar en las traducciones descartadas. Útil para una primera pasada rápida, conviene volver a la cobertura completa después.
Opciones HTTP
- Tiempo de espera: máximo concedido a una respuesta completa. 10 segundos por defecto. Pasado ese límite el URL cuenta como muerto con un mensaje de tiempo agotado.
- Tiempo de conexión: máximo para establecer la conexión. 5 segundos por defecto. Un dominio cuyo DNS ya no resuelve falla aquí.
- Peticiones en paralelo: de 1 a 20, 6 por defecto. Subirlo acelera el análisis pero aumenta la carga saliente y el riesgo de limitación de tasa en los servidores remotos.
- Comprobar los URL internos: activado por defecto. Los URL locales que apuntan a un archivo estático presente en disco se validan igualmente sin petición de red, así que esta opción solo afecta a los URL que pasan por el enrutador de PrestaShop.
- Comprobar los URL externos: activado por defecto. Desactivarlo da un análisis muy rápido, limitado a tus propios contenidos.
- Seguir las redirecciones: activado por defecto, cinco saltos como máximo. El código final es entonces el del destino.
- Señalar los URL redirigidos como advertencia: activado por defecto. Un URL que responde 200 tras una redirección aparece como advertencia, lo que permite detectar los enlaces que conviene actualizar aunque sigan funcionando.
- Verificar los certificados SSL: desactivado por defecto. Actívalo si quieres detectar certificados caducados, teniendo en cuenta que algunos servidores mal configurados aparecerán entonces como error.
- Analizar solo los elementos activos: desactivado por defecto. Una vez marcado, los productos y categorías desactivados quedan fuera del perímetro.
- User agent: cadena enviada en la cabecera. Algunos sitios responden 403 a los robots identificados. Sustituir el valor por el de un navegador reciente resuelve buena parte de esos casos.
Ritmo y lotes
Segundos de trabajo por lote fija la duración de trabajo de cada llamada. 12 segundos por defecto. Este valor debe quedar claramente por debajo del max_execution_time de tu alojamiento, margen de seguridad incluido.
URL excluidos
Un patrón por línea. Se aceptan tres notaciones:
- Texto simple: coincidencia por subcadena.
staging.midominio.comexcluye todos los URL que contengan esa cadena. - Comodines:
*sustituye cualquier secuencia de caracteres,?uno solo.https://*.socio.tld/*excluye todos los subdominios del socio. - Expresión regular: prefijo
re:. El patrón se aplica tal cual, sin delimitadores.
Una lista típica tiene este aspecto:
localhost
127.0.0.1
staging.midominio.com
https://*.red-socios.tld/*
re:^https://[a-z0-9-]+[.]cdn-interno[.]net/
Escribir un punto literal como [.] dentro de una expresión regular evita problemas de escapado y equivale a la forma escapada.
Los URL excluidos aparecen en la tabla con el estado ignorado y no consumen ninguna petición.
Leer los resultados
Los seis indicadores
- URL encontradas: URL únicos recolectados en todas las fuentes
- Muertas: URL y archivos fallidos, todas las categorías juntas
- Advertencias: casos que merecen un vistazo, sin urgencia
- Imágenes muertas: entre las muertas, las detectadas en una etiqueta de imagen dentro de un contenido
- Archivos faltantes: entre las muertas, los archivos ausentes del disco
- Correctas: todo lo que responde bien
Los estados
- Correcto: código 2xx, o archivo local presente en disco
- Advertencia: redirección, 401, 403, 429, o URL alcanzado tras una redirección cuando la opción correspondiente está activa
- Muerto: 404, 410, otros 4xx, 5xx, tiempo agotado, error DNS, conexión rechazada, o archivo ausente del disco
- Ignorado: URL cubierto por tus exclusiones, o añadido a la lista de ignorados desde la tabla
- No comprobado: URL de una categoría que has desactivado en los ajustes, interna o externa
La tabla se ordena por gravedad y después por número de usos. Los problemas más extendidos en el catálogo suben a la cabeza.
Filtros y búsqueda
El filtro de estado se abre en Solo problemas, que combina muertos y advertencias. Los demás filtros cubren el tipo de recurso (enlace, imagen, archivo local) y la fuente. El campo de búsqueda consulta a la vez el URL y el mensaje de error, así que puedes aislar todos los Connection timed out de una vez.
Detalle de las ubicaciones
El icono de ojo abre la lista de contenidos que usan ese URL. Cada fila indica:
- el tipo de fuente (Productos, Páginas CMS, Marcas…)
- el nombre del elemento y su identificador
- el campo afectado (
description,description_short,content) - el idioma
- el texto de anclaje del enlace, o el atributo alt de la imagen
- un botón Modificar que abre la ficha en una pestaña nueva
Un URL presente en 34 fichas de producto aparece como una sola fila en la tabla, con 34 ubicaciones en el detalle. Ves la magnitud del problema antes de empezar a corregir.
Corregir
Enlaces muertos dentro de un contenido
Abre el detalle, pulsa Modificar en la ubicación que quieras tratar, corrige o quita el enlace en el editor y guarda. Si el mismo URL aparece en varios idiomas del mismo producto, cada idioma se lista por separado: PrestaShop almacena un contenido por idioma, así que hay que corregir cada versión.
Archivos de imagen faltantes
Estas filas muestran una ruta en lugar de un URL, por ejemplo img/p/4/2/9/429.jpg. El archivo ha desaparecido mientras la base de datos sigue referenciándolo. Tres salidas posibles:
- El archivo existe en una copia de seguridad: restáuralo en la ruta indicada.
- La imagen ya no existe: bórrala desde la pestaña Imágenes del producto para que la base deje de referenciarla y sube un reemplazo.
- También faltan las miniaturas: tras restaurar o volver a subir, regenéralas desde Diseño, Configuración de imágenes.
PS_IMAGE_FORMAT. El módulo da el archivo por presente en cuanto encuentra una de las extensiones jpg, jpeg, png, webp, avif o gif. Solo se señala como faltante cuando no existe ninguna de esas variantes.
Volver a comprobar un URL
El icono de actualización relanza la comprobación de una sola fila. El estado y el código se actualizan en el sitio, sin relanzar el análisis completo. Práctico después de que un socio haya arreglado una página o de haber vuelto a subir un archivo.
Ignorar un URL
El icono de prohibición añade el URL a la lista de ignorados. Desaparece de la tabla y no volverá a señalarse en los análisis siguientes. La lista de ignorados se conserva de forma independiente a los análisis, así que sobrevive a la purga automática.
Exportación CSV
El botón Exportar CSV exporta el conjunto de resultados tal como está filtrado en pantalla. El archivo usa el punto y coma como separador y empieza por un BOM UTF-8, de modo que Excel abre los acentos directamente sin pasar por el asistente de importación.
Columnas exportadas: URL, tipo, alcance, estado, código HTTP, error, redirección, tiempo de respuesta en milisegundos, número de usos, fuentes, elementos afectados.
Catálogos grandes y rendimiento
Dónde se va el tiempo
La recolección es rápida: lee la base de datos y analiza HTML. El tiempo del análisis viene casi por completo de la verificación HTTP y, más concretamente, de lo que tardan en responder los servidores remotos. Dos mecanismos contienen la factura:
- Deduplicación. Un URL presente 400 veces se comprueba una vez. En un catálogo donde el mismo enlace a la guía de tallas está copiado en todas las fichas, la diferencia es considerable.
- Validación local. Un URL de tu propio dominio que apunta a un archivo estático existente se valida leyendo el sistema de archivos, sin petición de red. Eso cubre la mayoría de las imágenes de las descripciones.
Ajustes sugeridos según el tamaño
- Menos de 500 productos: los ajustes por defecto valen, no cambies nada.
- De 500 a 5.000 productos: de 6 a 8 peticiones en paralelo, de 12 a 15 segundos por lote.
- Más de 5.000 productos: empieza con un análisis con los URL externos desactivados para tratar primero tus propios enlaces e imágenes, y luego lanza un análisis completo fuera del horario de actividad.
Alojamiento compartido
En alojamiento compartido, baja las peticiones en paralelo a 2 o 3 y mantén 10 segundos por lote. Si notas que la tienda se ralentiza durante el análisis, desactiva la comprobación de los URL internos: los archivos estáticos locales se siguen verificando en disco, solo pierdes la prueba de los URL que pasan por el enrutador.
Multitienda
El perímetro del análisis sigue el contexto de tienda seleccionado en la barra superior del back-office. Las tablas que llevan una columna de identificador de tienda, como ps_product_lang o ps_category_lang, se filtran en consecuencia. Para cubrir una red de tres tiendas, lanza tres análisis cambiando de contexto entre cada uno.
Solución de problemas
El análisis parece bloqueado en la fase de recolección
La recolección no muestra contador detallado, así que puede parecer congelada en un catálogo muy grande cuando en realidad avanza. Mira la pestaña de red de tu navegador: deben sucederse llamadas cada doce segundos aproximadamente. Si una llamada devuelve un error 500, baja los segundos de trabajo por lote y vuelve a empezar.
Muchos 403 en enlaces que funcionan en el navegador
Cloudflare y las protecciones antibots bloquean las peticiones que no se identifican como navegador. Sustituye el user agent por el de un Chrome o Firefox reciente. Si el dominio sigue bloqueado, añádelo a las exclusiones: no es un enlace muerto, es un enlace que no se puede verificar desde un script.
Error SSL certificate problem
El certificado del sitio remoto no lo valida el almacén de certificados de tu servidor. Si no necesitas comprobar certificados, desmarca Verificar los certificados SSL. Si el mensaje afecta a tu propio dominio, es un problema real que hay que tratar en el servidor.
Todos los URL internos dan error
Tu servidor no consigue llamarse a sí mismo, algo frecuente detrás de un proxy inverso o con una resolución DNS interna particular. Desmarca Comprobar los URL internos. Los archivos de imagen faltantes y los enlaces externos se siguen detectando con normalidad.
Se señalan imágenes faltantes que sí se ven
Comprueba la ruta indicada en la tabla. Si el archivo existe en esa ubicación, la causa es casi siempre una restricción de lectura de PHP: revisa los permisos de la carpeta img/ y la directiva open_basedir.
El aviso dice que cURL no está disponible
La extensión PHP cURL no está instalada en tu alojamiento. Pide a tu proveedor que la active. Mientras tanto el módulo sigue siendo útil para los archivos de imagen faltantes en disco, que no pasan por la red.
Referencia técnica
Tablas SQL
ps_dfbl_scan: una fila por análisis, con su fase, su posición de reanudación y sus contadoresps_dfbl_url: los URL únicos de un análisis, con su huella, su estado y su resultado HTTPps_dfbl_occurrence: las ubicaciones, ligadas a un URL y a un contenido del catálogops_dfbl_ignore: la lista de ignorados, independiente de los análisis
Solo se conservan los tres últimos análisis. Al iniciar uno nuevo, los más antiguos se eliminan junto con sus URL y sus ubicaciones.
Atributos extraídos
El módulo lee los siguientes atributos en el HTML de tus contenidos:
- etiqueta a:
href - etiqueta area:
href - etiqueta img:
src,data-src,data-original,data-lazy,srcset - etiquetas source y video:
src,srcset,poster - etiquetas audio, iframe, embed:
src - etiqueta object:
data - etiquetas link y script:
href,src - atributo
style: losbackground-image: url(...)
Se descartan antes de cualquier comprobación: mailto:, tel:, sms:, callto:, javascript:, los URI de datos, los anclajes sueltos, los esquemas distintos de HTTP y HTTPS, y cualquier valor con llaves o corchetes, que delata un resto de Smarty o de shortcode.
Los URL relativos se resuelven contra el URL base de la tienda, respetando los segmentos . y ... Los URL sin protocolo que empiezan por dos barras heredan el esquema de la tienda. El fragmento situado tras la almohadilla se elimina antes de la petición.
Controlador y arquitectura
Un único controlador de administración, AdminDfBrokenLinks, sirve la página y los puntos de entrada AJAX. El módulo no declara ningún hook. Las clases se cargan por inclusión directa, sin Composer ni dependencias externas.
Desinstalación
Desde el gestor de módulos, desinstala Broken Links & Images Checker. Se eliminan las cuatro tablas, la pestaña de back-office y todas las claves de configuración.
ps_dfbl_ignore se elimina al desinstalar. Si has construido una lista larga de exclusiones manuales, expórtala o copia el campo de URL excluidos antes de desinstalar.
Preguntas frecuentes
¿El módulo modifica mis contenidos?
No. Lee tus contenidos y solo escribe en sus propias tablas. Todas las correcciones pasan por el back-office estándar de PrestaShop.
¿Puedo programar un análisis automático?
La versión 1.0.0 lanza los análisis desde el back-office, con el navegador como director de orquesta. No hay tarea cron. En la práctica, un análisis mensual lanzado a mano basta para la mayoría de catálogos.
¿Por qué un URL aparece como advertencia si responde 200?
Porque se ha alcanzado tras una redirección y la opción Señalar los URL redirigidos como advertencia está activa. El enlace funciona, pero hace dar un salto inútil a tus visitantes y a Google. Es preferible poner el URL de destino directamente en el contenido.
¿Detecta los enlaces de módulos de terceros?
Analiza los contenidos almacenados en las tablas estándar de PrestaShop y los bloques de enlaces de ps_linklist. Un módulo de terceros que guarde sus propios textos en sus propias tablas no está cubierto.
¿Los análisis consumen mucho ancho de banda?
Cada comprobación empieza con una petición HEAD, que solo recupera las cabeceras. El ripiego en GET, usado cuando el servidor remoto rechaza HEAD, limita la descarga a los dos primeros kilobytes. El volumen es marginal.
¿Cuántos análisis se conservan?
Los tres últimos. Suficiente para comparar un estado antes y después de corregir sin dejar crecer la base de datos indefinidamente.
¿El módulo cumple el RGPD?
No almacena ningún dato personal: solo URL, códigos HTTP y referencias a tus contenidos. No se transmite nada a DataFirefly.