Controllo Link Rotti: Documentazione
Rilevamento di link morti, immagini rotte e file immagine assenti dal disco su PrestaShop 8 e 9. Installazione, impostazioni della scansione, lettura dei risultati, correzione e risoluzione dei problemi.
Installazione
Requisiti
- PrestaShop da 8.0 a 9.x
- PHP 7.4 minimo, 8.1 o superiore consigliato
- Estensione PHP cURL per la verifica HTTP
- Estensione PHP DOM consigliata per l’estrazione dei link (se manca subentra un metodo basato su espressioni regolari)
Installare il modulo
- Scarica
dfbrokenlinks.zipdal tuo account cliente. - Vai su Moduli, Gestore moduli, Carica un modulo e rilascia lo ZIP. In alternativa puoi caricare la cartella
dfbrokenlinks/in/modules/via FTP. - Clicca su Installa.
L’installazione crea quattro tabelle SQL (ps_dfbl_scan, ps_dfbl_url, ps_dfbl_occurrence, ps_dfbl_ignore) e una scheda nel back office.
Dove trovarlo
Lo scanner si trova in Catalogo, Link e immagini rotti. La pagina di configurazione del modulo, nel gestore moduli, mostra un riepilogo dell’ultima scansione e un pulsante che porta allo scanner.
Lanciare una prima scansione
Apri Catalogo, Link e immagini rotti e clicca su Avvia una nuova scansione. Le impostazioni predefinite vanno bene per la maggior parte dei negozi, potrai affinarle dopo.
Le due fasi
Una scansione si svolge in due tempi:
- Raccolta. Il modulo percorre i contenuti che hai selezionato, estrae ogni link e ogni immagine, deduplica gli URL e controlla su disco i file immagine referenziati nel database.
- Verifica. Gli URL rimanenti vengono interrogati via HTTP, più di uno alla volta, per leggerne il codice di risposta.
Il browser pilota l’avanzamento con chiamate successive. Ogni chiamata lavora per la durata fissata nelle impostazioni (12 secondi di default), salva la propria posizione nel database e restituisce il controllo. È questo che permette di trattare un catalogo grande senza mai superare max_execution_time.
Seguire l’avanzamento
La barra di avanzamento mostra la fase in corso. Durante la verifica un contatore indica il numero di URL già testati sul totale raccolto. I sei indicatori sotto la barra si aggiornano man mano.
Fermare e riprendere
Il pulsante Arresta interrompe la scansione in modo pulito. Chiudere la scheda del browser ha lo stesso effetto, senza perdite: la posizione viene salvata dopo ogni lotto. Una scansione fermata conserva i risultati già ottenuti, visibili nella tabella.
Impostazioni
Il pannello Impostazioni della scansione è chiuso di default e si apre con l’icona in alto a destra del blocco.
Contenuti da analizzare
Ogni casella corrisponde a una fonte. Le fonti con l’etichetta file non generano alcuna richiesta HTTP: verificano la presenza dei file su disco.
- Prodotti: descrizione, descrizione breve, messaggi di disponibilità con e senza stock
- Categorie: descrizione e
additional_descriptionse la tua versione di PrestaShop ha quella colonna - Pagine CMS: contenuto
- Categorie CMS: descrizione
- Marchi: descrizione e descrizione breve
- Fornitori: descrizione
- Punti vendita: nota, indirizzo riga 1 e riga 2
- Blocchi di link a piè di pagina: contenuto personalizzato del modulo
ps_linklist - File immagine prodotto: presenza in
img/p/ - File immagine di categorie, marchi, fornitori, punti vendita: presenza in
img/c/,img/m/,img/su/,img/st/ - Allegati prodotto: presenza nella cartella
download/
Una fonte la cui tabella non esiste sulla tua installazione, per esempio i blocchi di link se manca ps_linklist, semplicemente non compare nell’elenco.
Lingue
Di default vengono analizzate tutte le lingue attive. Deselezionare lingue accorcia la raccolta ma lascia link non verificati nelle traduzioni escluse. Utile per un primo passaggio veloce, poi conviene tornare alla copertura completa.
Opzioni HTTP
- Tempo di attesa: tempo massimo concesso a una risposta completa. 10 secondi di default. Oltre quel limite l’URL viene contato come morto con un messaggio di timeout.
- Tempo di connessione: tempo massimo per stabilire la connessione. 5 secondi di default. Un dominio il cui DNS non risolve più fallisce qui.
- Richieste in parallelo: da 1 a 20, 6 di default. Alzarlo accelera la scansione ma aumenta il carico in uscita e il rischio di limitazione da parte dei server remoti.
- Verificare gli URL interni: attivo di default. Gli URL locali che puntano a un file statico presente su disco vengono comunque validati senza richiesta di rete, quindi questa opzione riguarda solo gli URL che passano dal router di PrestaShop.
- Verificare gli URL esterni: attivo di default. Disattivarlo dà una scansione molto rapida, limitata ai tuoi contenuti.
- Seguire i reindirizzamenti: attivo di default, cinque salti al massimo. Il codice finale è quello della destinazione.
- Segnalare gli URL reindirizzati come avviso: attivo di default. Un URL che risponde 200 dopo un reindirizzamento compare come avviso, così individui i link da aggiornare anche se funzionano ancora.
- Verificare i certificati SSL: disattivo di default. Attivalo se vuoi individuare i certificati scaduti, tenendo presente che alcuni server mal configurati risulteranno allora in errore.
- Analizzare solo gli elementi attivi: disattivo di default. Una volta selezionato, prodotti e categorie disattivati escono dal perimetro.
- User agent: stringa inviata nell’intestazione. Alcuni siti rispondono 403 ai bot identificati. Sostituire il valore con quello di un browser recente risolve buona parte di questi casi.
Ritmo e lotti
Secondi di lavoro per lotto fissa la durata di lavoro di ogni chiamata. 12 secondi di default. Questo valore deve restare nettamente sotto il max_execution_time del tuo hosting, margine di sicurezza incluso.
URL esclusi
Un pattern per riga. Sono accettate tre notazioni:
- Testo semplice: corrispondenza su sottostringa.
staging.miodominio.comesclude tutti gli URL che contengono quella stringa. - Caratteri jolly:
*sostituisce qualsiasi sequenza di caratteri,?uno solo.https://*.partner.tld/*esclude tutti i sottodomini del partner. - Espressione regolare: prefisso
re:. Il pattern viene applicato così com’è, senza delimitatori.
Un elenco tipico ha questo aspetto:
localhost
127.0.0.1
staging.miodominio.com
https://*.rete-partner.tld/*
re:^https://[a-z0-9-]+[.]cdn-interno[.]net/
Scrivere un punto letterale come [.] dentro un’espressione regolare evita problemi di escape ed equivale alla forma con backslash.
Gli URL esclusi compaiono nella tabella con lo stato ignorato e non consumano alcuna richiesta.
Leggere i risultati
I sei indicatori
- URL trovati: URL univoci raccolti su tutte le fonti
- Morti: URL e file in errore, tutte le categorie insieme
- Avvisi: casi da guardare, senza urgenza
- Immagini morte: fra i morti, quelli rilevati in un tag immagine di un contenuto
- File mancanti: fra i morti, i file assenti dal disco
- Validi: tutto ciò che risponde correttamente
Gli stati
- Valido: codice 2xx, oppure file locale presente su disco
- Avviso: reindirizzamento, 401, 403, 429, oppure URL raggiunto dopo un reindirizzamento quando l’opzione corrispondente è attiva
- Morto: 404, 410, altri 4xx, 5xx, timeout, errore DNS, connessione rifiutata, oppure file assente dal disco
- Ignorato: URL coperto dalle tue esclusioni, o messo in elenco ignorati dalla tabella
- Non testato: URL di una categoria che hai disattivato nelle impostazioni, interna o esterna
La tabella è ordinata per gravità e poi per numero di utilizzi. I problemi più diffusi nel catalogo salgono in cima.
Filtri e ricerca
Il filtro di stato si apre su Solo problemi, che combina morti e avvisi. Gli altri filtri riguardano il tipo di risorsa (link, immagine, file locale) e la fonte. Il campo di ricerca interroga sia l’URL sia il messaggio di errore, così puoi isolare tutti i Connection timed out in un colpo solo.
Dettaglio delle posizioni
L’icona a forma di occhio apre l’elenco dei contenuti che usano quell’URL. Ogni riga indica:
- il tipo di fonte (Prodotti, Pagine CMS, Marchi e così via)
- il nome dell’elemento e il suo identificatore
- il campo interessato (
description,description_short,content) - la lingua
- il testo di ancoraggio del link, o l’attributo alt per un’immagine
- un pulsante Modifica che apre la scheda in una nuova finestra
Un URL presente in 34 schede prodotto compare come una sola riga della tabella, con 34 posizioni nel dettaglio. Vedi la portata del problema prima ancora di iniziare a correggere.
Correggere
Link morti dentro un contenuto
Apri il dettaglio, clicca su Modifica per la posizione da trattare, correggi o rimuovi il link nell’editor e salva. Se lo stesso URL compare in più lingue dello stesso prodotto, ogni lingua è elencata separatamente: PrestaShop memorizza un contenuto per lingua, quindi ogni versione va corretta.
File immagine mancanti
Queste righe mostrano un percorso invece di un URL, per esempio img/p/4/2/9/429.jpg. Il file è sparito mentre il database lo referenzia ancora. Tre possibili vie d’uscita:
- Il file esiste in un backup: ripristinalo nel percorso indicato.
- L’immagine non esiste più: eliminala dalla scheda Immagini del prodotto perché il database smetta di referenziarla, poi carica una sostituta.
- Mancano anche le miniature: dopo il ripristino o il nuovo caricamento, rigenerale da Design, Impostazioni immagini.
PS_IMAGE_FORMAT. Il modulo considera il file presente non appena trova una delle estensioni jpg, jpeg, png, webp, avif o gif. Viene segnalato come mancante solo se non esiste nessuna di queste varianti.
Riverificare un URL
L’icona di aggiornamento rilancia la verifica di una sola riga. Stato e codice si aggiornano sul posto, senza rilanciare l’intera scansione. Comodo dopo che un partner ha sistemato una pagina o dopo aver rimesso online un file.
Ignorare un URL
L’icona di divieto aggiunge l’URL all’elenco ignorati. Sparisce dalla tabella e non verrà più segnalato nelle scansioni successive. L’elenco ignorati è conservato indipendentemente dalle scansioni, quindi sopravvive alla pulizia automatica.
Export CSV
Il pulsante Esporta CSV esporta l’insieme di risultati esattamente come è filtrato a schermo. Il file usa il punto e virgola come separatore e inizia con un BOM UTF-8, così Excel apre direttamente gli accenti senza passare dalla procedura di importazione.
Colonne esportate: URL, tipo, portata, stato, codice HTTP, errore, reindirizzamento, tempo di risposta in millisecondi, numero di utilizzi, fonti, elementi interessati.
Cataloghi grandi e prestazioni
Dove va il tempo
La raccolta è veloce: legge il database e analizza HTML. Il tempo della scansione viene quasi interamente dalla verifica HTTP e, più precisamente, dal tempo di risposta dei server remoti. Due meccanismi contengono il conto:
- Deduplicazione. Un URL presente 400 volte viene testato una volta. In un catalogo dove lo stesso link alla guida alle taglie è copiato in ogni scheda, la differenza è notevole.
- Validazione locale. Un URL del tuo dominio che punta a un file statico esistente viene validato leggendo il file system, senza richiesta di rete. Questo copre la maggior parte delle immagini nelle descrizioni.
Impostazioni suggerite in base alla dimensione
- Meno di 500 prodotti: le impostazioni predefinite vanno bene, non cambiare nulla.
- Da 500 a 5.000 prodotti: da 6 a 8 richieste in parallelo, da 12 a 15 secondi per lotto.
- Oltre 5.000 prodotti: parti con una scansione a URL esterni disattivati per trattare prima i tuoi link e le tue immagini, poi lancia una scansione completa fuori dagli orari di attività.
Hosting condiviso
Su hosting condiviso, abbassa le richieste in parallelo a 2 o 3 e mantieni 10 secondi per lotto. Se noti un rallentamento del front office durante la scansione, disattiva la verifica degli URL interni: i file statici locali restano controllati su disco, perdi solo il test degli URL che passano dal router.
Multinegozio
Il perimetro della scansione segue il contesto negozio selezionato nella barra superiore del back office. Le tabelle che portano una colonna di identificatore negozio, come ps_product_lang o ps_category_lang, vengono filtrate di conseguenza. Per coprire una rete di tre negozi, lancia tre scansioni cambiando contesto fra una e l’altra.
Risoluzione dei problemi
La scansione sembra bloccata sulla fase di raccolta
La raccolta non mostra un contatore dettagliato, quindi su un catalogo molto grande può sembrare ferma mentre in realtà avanza. Controlla la scheda rete del browser: le chiamate devono susseguirsi circa ogni dodici secondi. Se una chiamata restituisce un errore 500, riduci i secondi di lavoro per lotto e ricomincia.
Molti 403 su link che funzionano nel browser
Cloudflare e le protezioni anti-bot bloccano le richieste non identificate come browser. Sostituisci lo user agent con quello di un Chrome o Firefox recente. Se il dominio resta bloccato, aggiungilo alle esclusioni: non è un link morto, è un link non verificabile da uno script.
Errore SSL certificate problem
Il certificato del sito remoto non è validato dall’archivio certificati del tuo server. Se non ti serve il controllo dei certificati, togli la spunta a Verificare i certificati SSL. Se il messaggio riguarda il tuo dominio, è un problema reale da trattare lato server.
Tutti gli URL interni risultano in errore
Il tuo server non riesce a chiamare sé stesso, cosa frequente dietro un reverse proxy o con una risoluzione DNS interna particolare. Togli la spunta a Verificare gli URL interni. I file immagine mancanti e i link esterni continuano a essere rilevati normalmente.
Vengono segnalate immagini mancanti che invece si vedono
Controlla il percorso indicato nella tabella. Se il file esiste davvero in quella posizione, la causa è quasi sempre una restrizione di lettura di PHP: verifica i permessi della cartella img/ e la direttiva open_basedir.
L’avviso dice che cURL non è disponibile
L’estensione PHP cURL non è installata sul tuo hosting. Chiedine l’attivazione al provider. Nel frattempo il modulo resta utilizzabile per i file immagine mancanti su disco, che non passano dalla rete.
Riferimento tecnico
Tabelle SQL
ps_dfbl_scan: una riga per scansione, con la sua fase, la posizione di ripresa e i contatorips_dfbl_url: gli URL univoci di una scansione, con impronta, stato e risultato HTTPps_dfbl_occurrence: le posizioni, legate a un URL e a un contenuto del catalogops_dfbl_ignore: l’elenco ignorati, indipendente dalle scansioni
Vengono conservate solo le ultime tre scansioni. All’avvio di una nuova, le più vecchie sono eliminate insieme ai loro URL e alle loro posizioni.
Attributi estratti
Il modulo legge i seguenti attributi nell’HTML dei tuoi contenuti:
- tag a:
href - tag area:
href - tag img:
src,data-src,data-original,data-lazy,srcset - tag source e video:
src,srcset,poster - tag audio, iframe, embed:
src - tag object:
data - tag link e script:
href,src - attributo
style: ibackground-image: url(...)
Scartati prima di ogni verifica: mailto:, tel:, sms:, callto:, javascript:, gli URI di dati, gli ancoraggi isolati, gli schemi diversi da HTTP e HTTPS, e qualsiasi valore contenente parentesi graffe o quadre, indizio di un residuo di Smarty o di shortcode.
Gli URL relativi vengono risolti rispetto all’URL di base del negozio, rispettando i segmenti . e ... Gli URL senza protocollo che iniziano con due barre ereditano lo schema del negozio. Il frammento dopo il cancelletto viene rimosso prima della richiesta.
Controller e architettura
Un solo controller di amministrazione, AdminDfBrokenLinks, serve la pagina e i punti di ingresso AJAX. Il modulo non dichiara alcun hook. Le classi sono caricate per inclusione diretta, senza Composer né dipendenze esterne.
Disinstallazione
Dal gestore moduli, disinstalla Broken Links & Images Checker. Vengono rimosse le quattro tabelle, la scheda del back office e tutte le chiavi di configurazione.
ps_dfbl_ignore viene eliminata alla disinstallazione. Se hai costruito un lungo elenco di esclusioni manuali, esportalo o copia il campo degli URL esclusi prima di disinstallare.
FAQ
Il modulo modifica i miei contenuti?
No. Legge i tuoi contenuti e scrive solo nelle proprie tabelle. Ogni correzione passa dal back office standard di PrestaShop.
Posso programmare una scansione automatica?
La versione 1.0.0 avvia le scansioni dal back office, con il browser che fa da direttore d’orchestra. Non c’è un task cron. In pratica una scansione mensile lanciata a mano basta per la maggior parte dei cataloghi.
Perché un URL compare come avviso se risponde 200?
Perché è stato raggiunto dopo un reindirizzamento e l’opzione Segnalare gli URL reindirizzati come avviso è attiva. Il link funziona, ma fa fare un salto inutile ai tuoi visitatori e a Google. Meglio mettere l’URL di destinazione direttamente nel contenuto.
Rileva i link nei moduli di terze parti?
Analizza i contenuti memorizzati nelle tabelle standard di PrestaShop e i blocchi di link di ps_linklist. Un modulo di terze parti che salva i propri testi in tabelle proprie non è coperto.
Le scansioni consumano molta banda?
Ogni verifica inizia con una richiesta HEAD, che recupera solo le intestazioni. Il ripiego in GET, usato quando il server remoto rifiuta HEAD, limita il download ai primi due kilobyte. Il volume resta marginale.
Quante scansioni vengono conservate?
Le ultime tre. Abbastanza per confrontare uno stato prima e dopo la correzione senza far crescere il database all’infinito.
Il modulo è conforme al GDPR?
Non memorizza alcun dato personale: solo URL, codici HTTP e riferimenti ai tuoi contenuti. Nulla viene trasmesso a DataFirefly.