PS PrestaShop Principiante

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.

Aggiornato Versione del modulo 1.0.0

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

  1. Scarica dfbrokenlinks.zip dal tuo account cliente.
  2. Vai su Moduli, Gestore moduli, Carica un modulo e rilascia lo ZIP. In alternativa puoi caricare la cartella dfbrokenlinks/ in /modules/ via FTP.
  3. 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.

Nessun impatto sul front office. Il modulo non registra alcun hook front office. Non modifica né i template né la resa del negozio. Tutto avviene nel back office.

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:

  1. 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.
  2. 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.

Prima scansione. Lanciala fuori dagli orari di punta, soprattutto se lasci attiva la verifica degli URL interni: quelle richieste ricadono sul tuo stesso server.

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_description se 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.

Attenzione. Se il tuo hosting limita gli script a 30 secondi, non alzare questo valore oltre 20. Il modulo si ferma alla fine di una richiesta HTTP in corso, non a metà, quindi serve margine per l’ultimo lotto.

URL esclusi

Un pattern per riga. Sono accettate tre notazioni:

  • Testo semplice: corrispondenza su sottostringa. staging.miodominio.com esclude 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

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:

  1. Il file esiste in un backup: ripristinalo nel percorso indicato.
  2. L’immagine non esiste più: eliminala dalla scheda Immagini del prodotto perché il database smetta di referenziarla, poi carica una sostituta.
  3. Mancano anche le miniature: dopo il ripristino o il nuovo caricamento, rigenerale da Design, Impostazioni immagini.
Formati immagine. Da PrestaShop 8.1, un’immagine può esistere in JPEG, WebP o AVIF a seconda dell’impostazione 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.

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 contatori
  • ps_dfbl_url: gli URL univoci di una scansione, con impronta, stato e risultato HTTP
  • ps_dfbl_occurrence: le posizioni, legate a un URL e a un contenuto del catalogo
  • ps_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: i background-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.

L’elenco ignorati se ne va con loro. La tabella 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.

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.

Questa pagina ti è stata utile?

Ancora bloccato? Contatta l'assistenza