Vérificateur de Liens Morts : Documentation
Détection des liens morts, des images cassées et des fichiers images absents du disque sur PrestaShop 8 et 9. Installation, réglages du scan, lecture des résultats, correction et dépannage.
Installation
Prérequis
- PrestaShop 8.0 à 9.x
- PHP 7.4 minimum, 8.1 ou plus recommandé
- Extension PHP cURL pour la vérification HTTP
- Extension PHP DOM recommandée pour l’extraction des liens (un repli par expressions régulières prend le relais si elle manque)
Installer le module
- Récupérez
dfbrokenlinks.zipdepuis votre compte client. - Allez dans Modules, Gestionnaire de modules, Téléverser un module et déposez le ZIP. Vous pouvez aussi uploader le dossier
dfbrokenlinks/dans/modules/par FTP. - Cliquez sur Installer.
L’installation crée quatre tables SQL (ps_dfbl_scan, ps_dfbl_url, ps_dfbl_occurrence, ps_dfbl_ignore) et un onglet de back-office.
Où le trouver
Le scanner est accessible depuis Catalogue, Liens & images morts. La page de configuration du module, dans le gestionnaire de modules, affiche un résumé du dernier scan et un bouton qui renvoie vers le scanner.
Lancer un premier scan
Ouvrez Catalogue, Liens & images morts et cliquez sur Lancer un nouveau scan. Les réglages par défaut conviennent à la plupart des boutiques, vous pouvez les affiner ensuite.
Les deux phases
Un scan se déroule en deux temps :
- Collecte. Le module parcourt les contenus que vous avez cochés, extrait chaque lien et chaque image, dédoublonne les URL et vérifie sur le disque les fichiers images référencés en base.
- Vérification. Les URL restantes sont interrogées en HTTP, plusieurs en parallèle, pour récupérer leur code de réponse.
Le navigateur pilote l’avancement par appels successifs. Chaque appel travaille pendant la durée fixée dans les réglages (12 secondes par défaut), enregistre sa position en base, puis rend la main. C’est ce qui permet de traiter un gros catalogue sans jamais dépasser max_execution_time.
Suivre la progression
La barre de progression affiche la phase en cours. Pendant la vérification, un compteur indique le nombre d’URL déjà testées sur le total collecté. Les six indicateurs sous la barre se mettent à jour au fil de l’eau.
Arrêter et reprendre
Le bouton Arrêter interrompt le scan proprement. Fermer l’onglet du navigateur a le même effet, sans perte : la position est enregistrée en base après chaque lot. Un scan arrêté conserve les résultats déjà obtenus, consultables dans le tableau.
Réglages
Le panneau Réglages du scan, replié par défaut, s’ouvre par l’icône en haut à droite du bloc.
Contenus à analyser
Chaque case correspond à une source. Les sources marquées d’un badge fichiers ne génèrent aucune requête HTTP : elles vérifient la présence des fichiers sur le disque.
- Produits : description, description courte, messages de disponibilité en stock et hors stock
- Catégories : description, et
additional_descriptionsi votre version de PrestaShop possède cette colonne - Pages CMS : contenu
- Catégories CMS : description
- Marques : description et description courte
- Fournisseurs : description
- Magasins : note, adresse ligne 1 et ligne 2
- Blocs de liens du pied de page : contenu personnalisé du module
ps_linklist - Fichiers images produits : présence dans
img/p/ - Fichiers images catégories, marques, fournisseurs, magasins : présence dans
img/c/,img/m/,img/su/,img/st/ - Fichiers joints produits : présence dans le dossier
download/
Une source dont la table n’existe pas sur votre installation, par exemple les blocs de liens si ps_linklist est absent, n’apparaît simplement pas dans la liste.
Langues
Par défaut, toutes les langues actives sont analysées. Décocher des langues réduit le temps de collecte, mais laisse des liens non vérifiés dans les traductions écartées. Utile pour un premier passage rapide, à repasser en couverture complète ensuite.
Options HTTP
- Délai d’attente : temps maximum accordé à une réponse complète. 10 secondes par défaut. Au-delà, l’URL est comptée comme morte avec un message de dépassement de délai.
- Délai de connexion : temps maximum pour établir la connexion. 5 secondes par défaut. Un domaine dont le DNS ne résout plus échoue ici.
- Requêtes en parallèle : de 1 à 20, 6 par défaut. Monter accélère le scan mais augmente la charge sortante et le risque de limitation de débit chez les serveurs distants.
- Vérifier les URL internes : activé par défaut. Les URL locales qui pointent vers un fichier statique présent sur le disque sont de toute façon validées sans requête réseau, cette option ne concerne donc que les URL passant par le routeur PrestaShop.
- Vérifier les URL externes : activé par défaut. Le désactiver donne un scan très rapide, limité à vos propres contenus.
- Suivre les redirections : activé par défaut, cinq sauts maximum. Le code final est alors celui de la destination.
- Signaler les URL redirigées comme avertissements : activé par défaut. Une URL qui répond 200 après redirection remonte en avertissement, ce qui permet de repérer les liens à mettre à jour même s’ils fonctionnent encore.
- Vérifier les certificats SSL : désactivé par défaut. À activer si vous voulez détecter les certificats expirés, en sachant que certains serveurs mal configurés remonteront alors en erreur.
- N’analyser que les éléments actifs : désactivé par défaut. Une fois coché, les produits et catégories désactivés sortent du périmètre.
- User agent : chaîne envoyée dans l’en-tête. Certains sites répondent 403 aux robots identifiés. Remplacer la valeur par celle d’un navigateur récent règle une bonne partie de ces cas.
Cadence et lots
Secondes de traitement par lot fixe la durée de travail de chaque appel. 12 secondes par défaut. Cette valeur doit rester nettement sous le max_execution_time de votre hébergement, marge de sécurité comprise.
URL exclues
Un motif par ligne. Trois écritures possibles :
- Texte simple : correspondance sur une sous-chaîne.
staging.mondomaine.comexclut toutes les URL qui contiennent cette chaîne. - Jokers :
*remplace n’importe quelle suite de caractères,?un seul.https://*.partenaire.tld/*exclut tous les sous-domaines du partenaire. - Expression régulière : préfixe
re:. Le motif est appliqué tel quel, sans les délimiteurs.
Exemple de liste typique :
localhost
127.0.0.1
staging.mondomaine.com
https://*.reseau-partenaire.tld/*
re:^https://[a-z0-9-]+[.]cdn-interne[.]net/
Écrire un point littéral sous la forme [.] dans une expression régulière évite les problèmes d’échappement et équivaut à la forme avec antislash.
Les URL exclues apparaissent dans le tableau avec le statut ignoré et ne consomment aucune requête.
Lire les résultats
Les six indicateurs
- URL trouvées : nombre d’URL uniques collectées sur l’ensemble des sources
- Morts : URL et fichiers en échec, toutes catégories confondues
- Avertissements : cas à regarder sans urgence
- Images mortes : parmi les morts, ceux détectés dans une balise image d’un contenu
- Fichiers manquants : parmi les morts, les fichiers absents du disque
- Valides : tout ce qui répond correctement
Les statuts
- Valide : code 2xx, ou fichier local présent sur le disque
- Avertissement : redirection, 401, 403, 429, ou URL atteinte après redirection quand l’option correspondante est active
- Mort : 404, 410, autres 4xx, 5xx, dépassement de délai, erreur DNS, connexion refusée, ou fichier absent du disque
- Ignoré : URL couverte par vos exclusions, ou mise en liste d’ignorés depuis le tableau
- Non testé : URL appartenant à une catégorie désactivée dans les réglages, interne ou externe
Le tableau est trié par gravité décroissante, puis par nombre d’usages. Les problèmes les plus répandus dans le catalogue remontent donc en tête.
Filtres et recherche
Le filtre de statut est positionné sur Problèmes uniquement à l’ouverture, ce qui combine morts et avertissements. Les autres filtres portent sur le type de ressource (lien, image, fichier local) et sur la source. Le champ de recherche interroge à la fois l’URL et le message d’erreur, ce qui permet par exemple d’isoler tous les Connection timed out d’un coup.
Détail des emplacements
L’icône en forme d’oeil ouvre la liste des contenus qui utilisent l’URL. Chaque ligne indique :
- le type de source (Produits, Pages CMS, Marques…)
- le nom de l’élément et son identifiant
- le champ concerné (
description,description_short,content…) - la langue
- le texte d’ancre du lien, ou l’attribut alt pour une image
- un bouton Modifier qui ouvre la fiche dans un nouvel onglet
Une URL présente dans 34 fiches produit apparaît sur une seule ligne du tableau, avec 34 emplacements dans le détail. Vous voyez immédiatement l’ampleur du problème avant de commencer à corriger.
Corriger
Liens morts dans un contenu
Ouvrez le détail, cliquez sur Modifier pour l’emplacement à traiter, corrigez ou retirez le lien dans l’éditeur, enregistrez. Si la même URL apparaît dans plusieurs langues du même produit, chaque langue est listée séparément : PrestaShop stocke un contenu par langue, il faut donc corriger chaque version.
Fichiers images manquants
Ces lignes affichent un chemin plutôt qu’une URL, par exemple img/p/4/2/9/429.jpg. Le fichier est absent alors que la base le référence encore. Trois issues possibles :
- Le fichier existe dans une sauvegarde : restaurez-le à l’emplacement indiqué.
- L’image n’existe plus : supprimez-la depuis l’onglet Images du produit pour que la base cesse d’y faire référence, puis réuploadez une image de remplacement.
- Les miniatures manquent aussi : après restauration ou réupload, régénérez les vignettes depuis Design, Paramètres des images.
PS_IMAGE_FORMAT. Le module considère le fichier présent dès qu’une des extensions jpg, jpeg, png, webp, avif ou gif est trouvée. Un fichier n’est signalé manquant que si aucune de ces variantes n’existe.
Revérifier une URL
L’icône de rafraîchissement relance la vérification d’une seule ligne. Le statut et le code se mettent à jour sur place, sans relancer le scan complet. Pratique après avoir corrigé une page côté partenaire ou remis un fichier en ligne.
Ignorer une URL
L’icône d’interdiction ajoute l’URL à la liste d’ignorés. Elle disparaît du tableau et ne sera plus signalée lors des scans suivants. La liste d’ignorés est conservée indépendamment des scans, elle survit donc à la purge automatique.
Export CSV
Le bouton Exporter en CSV exporte le jeu de résultats tel que filtré à l’écran. Le fichier utilise le point-virgule comme séparateur et commence par un BOM UTF-8, ce qui permet à Excel d’ouvrir directement les accents sans passer par l’assistant d’import.
Colonnes exportées : URL, type, portée, statut, code HTTP, erreur, redirection, temps de réponse en millisecondes, nombre d’usages, sources, éléments concernés.
Gros catalogues et performance
Ce qui coûte du temps
La collecte est rapide : elle lit la base et parse du HTML. Le temps du scan vient presque entièrement de la vérification HTTP, et plus précisément du temps de réponse des serveurs distants. Deux mécanismes limitent la facture :
- Dédoublonnage. Une URL présente 400 fois est testée une fois. Sur un catalogue où le même lien de guide des tailles est recopié dans toutes les fiches, la différence est considérable.
- Validation locale. Une URL de votre domaine qui pointe vers un fichier statique existant est validée par lecture du système de fichiers, sans requête réseau. Cela couvre la majorité des images de descriptions.
Réglages suggérés selon la taille
- Moins de 500 produits : réglages par défaut, rien à changer.
- 500 à 5 000 produits : 6 à 8 requêtes en parallèle, 12 à 15 secondes par lot.
- Plus de 5 000 produits : commencez par un scan avec les URL externes désactivées pour traiter d’abord vos propres liens et images, puis relancez un scan complet en dehors des heures d’activité.
Hébergement mutualisé
Sur un mutualisé, descendez les requêtes en parallèle à 2 ou 3 et gardez 10 secondes par lot. Si vous constatez un ralentissement du front pendant le scan, désactivez la vérification des URL internes : les fichiers statiques locaux restent contrôlés sur le disque, vous ne perdez que le test des URL passant par le routeur.
Multi-boutique
Le périmètre du scan suit le contexte boutique sélectionné dans la barre supérieure du back-office. Les tables qui portent une colonne d’identifiant de boutique, comme ps_product_lang ou ps_category_lang, sont filtrées en conséquence. Pour couvrir un réseau de trois boutiques, lancez trois scans en changeant de contexte entre chacun.
Dépannage
Le scan reste bloqué sur la phase de collecte
La collecte n’affiche pas de compteur détaillé, elle peut donc sembler figée sur un très gros catalogue alors qu’elle avance. Vérifiez l’onglet réseau de votre navigateur : des appels doivent se succéder toutes les douze secondes environ. Si un appel retourne une erreur 500, réduisez la durée de traitement par lot et relancez.
Beaucoup de 403 sur des liens qui fonctionnent dans le navigateur
Cloudflare et les protections anti-bot bloquent les requêtes non identifiées comme un navigateur. Remplacez le user agent par celui d’un Chrome ou Firefox récent. Si le domaine reste bloqué, ajoutez-le aux exclusions : ce n’est pas un lien mort, c’est un lien invérifiable depuis un script.
Erreur SSL certificate problem
Le certificat du site distant n’est pas validé par le magasin de certificats de votre serveur. Si vous n’avez pas besoin de contrôler les certificats, décochez Vérifier les certificats SSL. Si le message concerne votre propre domaine, c’est un vrai problème à traiter côté serveur.
Toutes les URL internes remontent en erreur
Votre serveur n’arrive pas à s’appeler lui-même, cas fréquent derrière un reverse proxy ou avec une résolution DNS interne particulière. Décochez Vérifier les URL internes. Les fichiers images manquants et les liens externes restent détectés normalement.
Des images sont signalées manquantes alors qu’elles s’affichent
Vérifiez le chemin indiqué dans le tableau. Si le fichier existe bien à cet emplacement, la cause est presque toujours une restriction de lecture PHP : contrôlez les droits du dossier img/ et la directive open_basedir.
Le bandeau signale que cURL n’est pas disponible
L’extension PHP cURL n’est pas installée sur votre hébergement. Demandez son activation à votre hébergeur. En attendant, le module reste utilisable pour les fichiers images manquants sur le disque, qui ne passent pas par le réseau.
Référence technique
Tables SQL
ps_dfbl_scan: un enregistrement par scan, avec sa phase, sa position de reprise et ses compteursps_dfbl_url: les URL uniques d’un scan, avec leur empreinte, leur statut et leur résultat HTTPps_dfbl_occurrence: les emplacements, reliés à une URL et à un contenu du catalogueps_dfbl_ignore: la liste d’ignorés, indépendante des scans
Seuls les trois derniers scans sont conservés. Au lancement d’un nouveau scan, les plus anciens sont supprimés avec leurs URL et leurs emplacements.
Attributs extraits
Le module lit les attributs suivants dans le HTML de vos contenus :
- balise a :
href - balise area :
href - balise img :
src,data-src,data-original,data-lazy,srcset - balises source et video :
src,srcset,poster - balises audio, iframe, embed :
src - balise object :
data - balises link et script :
href,src - attribut
style: lesbackground-image: url(...)
Sont écartés avant toute vérification : mailto:, tel:, sms:, callto:, javascript:, les URI de données, les ancres seules, les schémas autres que HTTP et HTTPS, et toute valeur contenant des accolades ou des crochets, qui signalent un reste de Smarty ou de shortcode.
Les URL relatives sont résolues contre l’URL de base de la boutique, en respectant les segments . et ... Les URL sans protocole commençant par deux barres obliques héritent du schéma de la boutique. Le fragment situé après le dièse est retiré avant la requête.
Contrôleur et architecture
Un seul contrôleur d’administration, AdminDfBrokenLinks, expose la page et les points d’entrée AJAX. Le module ne déclare aucun hook. Les classes sont chargées par inclusion directe, sans Composer ni dépendance externe.
Désinstallation
Depuis le gestionnaire de modules, désinstallez Broken Links & Images Checker. Les quatre tables, l’onglet de back-office et l’ensemble des clés de configuration sont supprimés.
ps_dfbl_ignore est supprimée à la désinstallation. Si vous avez constitué une longue liste d’exclusions manuelles, exportez-la ou recopiez le champ des URL exclues avant de désinstaller.
FAQ
Le module modifie-t-il mes contenus ?
Non. Il lit vos contenus et n’écrit que dans ses propres tables. Toutes les corrections passent par le back-office standard de PrestaShop.
Puis-je programmer un scan automatique ?
La version 1.0.0 déclenche les scans depuis le back-office, avec le navigateur comme chef d’orchestre. Il n’y a pas de tâche cron. En pratique, un scan mensuel lancé manuellement suffit pour la plupart des catalogues.
Pourquoi une URL apparaît-elle en avertissement alors qu’elle répond 200 ?
Parce qu’elle a été atteinte après une redirection et que l’option Signaler les URL redirigées comme avertissements est active. Le lien fonctionne, mais il fait faire un saut inutile à vos visiteurs et à Google. Mettre l’URL de destination directement dans le contenu est préférable.
Le module détecte-t-il les liens dans les modules tiers ?
Il analyse les contenus stockés dans les tables standards de PrestaShop et les blocs de liens de ps_linklist. Un module tiers qui stocke ses propres textes dans ses propres tables n’est pas couvert.
Les scans consomment-ils de la bande passante ?
Chaque vérification commence par une requête HEAD, qui ne récupère que les en-têtes. Le repli en GET, utilisé quand le serveur distant refuse HEAD, limite le téléchargement aux deux premiers kilo-octets. Le volume reste marginal.
Combien de scans sont conservés ?
Les trois derniers. Cela permet de comparer un état avant et après correction sans laisser grossir la base indéfiniment.
Le module est-il compatible RGPD ?
Il ne stocke aucune donnée personnelle : uniquement des URL, des codes HTTP et des références à vos contenus. Aucune donnée n’est transmise à DataFirefly.