Documentazione del modulo Sitemap XML avanzata per PrestaShop (dfsitemap)
Installare e configurare dfsitemap: contenuti, immagini e video, hreflang, regole di esclusione, generazione a lotti, cron, IndexNow e multinegozio.
Il modulo Advanced XML Sitemap (dfsitemap) genera le sitemap XML di PrestaShop 8 e 9: un indice per negozio, un file per lingua e per tipo di contenuto, con immagini, video e tag hreflang. Questa pagina copre installazione, impostazioni, regole di esclusione, pianificazione e risoluzione dei problemi.
Installazione
- Scarica lo ZIP dal tuo account cliente DataFirefly.
- Nel back office, vai in Moduli > Gestione moduli > Carica un modulo e invia lo ZIP.
- Apri Parametri negozio > Traffico e SEO > Sitemap XML avanzata. Tre schede in alto nella pagina portano a sitemap e impostazioni, regole di esclusione e video prodotto.
- Se il modulo nativo Google sitemap (gsitemap) è attivo, disattivalo ed elimina i suoi file
*_sitemap.xmlnella radice del negozio. Il modulo mostra un avviso finché gsitemap è attivo. - Clicca su Genera ora, poi su Dichiara le sitemap in robots.txt.
- Invia l’URL dell’indice mostrato in Google Search Console e Bing Webmaster Tools.
Il modulo funziona da PrestaShop 8.0 a 9.x con lo stesso ZIP, in multinegozio e multilingua. Deve poter scrivere nella cartella radice del negozio, dove vengono pubblicati i file dfsitemap-*.xml, e in modules/dfsitemap/var/tmp/. Se una delle due non è scrivibile compare un avviso.
I file generati
Per ogni negozio, il modulo pubblica un indice dfsitemap-{id negozio}-index.xml che punta a file nominati per lingua e tipo, per esempio dfsitemap-1-it-product-1.xml. Quando un file raggiunge il numero di URL impostato, o prima di 45 MB, il resto passa in -2, -3 e così via. Gli URL personalizzati senza lingua sono raggruppati in dfsitemap-1-all-custom-1.xml.
Se gli URL semplificati sono attivi, l’indice è servito anche su /sitemap.xml nel dominio di ogni negozio. Un file fisico sitemap.xml nella radice ha la precedenza su questo indirizzo: il modulo lo segnala.
I file vengono costruiti in una cartella temporanea e poi pubblicati negozio per negozio. Le vecchie sitemap restano online durante la generazione, e i file non più necessari vengono eliminati alla pubblicazione.
Impostazioni
Le impostazioni seguono il contesto multinegozio: nel contesto di un singolo negozio, i valori salvati valgono solo per quel negozio.
Contenuto
- Tipi di contenuto: pagine statiche, prodotti, categorie, pagine CMS, categorie CMS, marche, fornitori, URL personalizzati. Viene elencato solo il contenuto attivo.
- Pagine statiche: home, più venduti, nuovi prodotti, offerte, elenchi di marche e fornitori, negozi, contatti, mappa del sito. Gli elenchi di marche e fornitori vengono saltati se la loro pagina è disattivata nelle preferenze del negozio.
- Lingue: lascia tutto selezionato per seguire automaticamente le lingue attive di ogni negozio.
- Prodotti visibili solo nella ricerca: di default sono elencati solo i prodotti con visibilità Ovunque o Solo catalogo.
- URL personalizzati: uno per riga. Un percorso relativo come
/blog/viene aggiunto all’URL del negozio. - Sitemap aggiuntive: URL assoluti di sitemap prodotte altrove, per esempio da un modulo blog o da un WordPress sullo stesso dominio. Vengono aggiunte all’indice del negozio.
Una pagina CMS con l’opzione Indicizzazione dai motori di ricerca disattivata viene servita da PrestaShop con un tag noindex. Il modulo non la elenca e mostra quante pagine sono interessate. Attiva l’opzione sulle pagine da indicizzare.
Immagini e video
- Sitemap immagini e tutte le immagini prodotto (altrimenti solo la copertina), nel formato immagine scelto,
large_defaultdi default. - Immagini di categorie, marche e fornitori: l’immagine originale di ogni entità, se esiste.
- Sitemap video e rilevamento YouTube e Vimeo: il modulo individua i video incorporati nelle descrizioni prodotto e nelle pagine CMS. Titoli e durate Vimeo vengono letti una volta e messi in cache.
Hreflang
- Alternative hreflang: ogni URL elenca le sue traduzioni. Utile appena il negozio ha più lingue.
- Codice hreflang: lingua e regione (
it-IT, preso dal codice lingua impostato in Internazionale > Lingue) o solo lingua (it). - Lingua x-default: lingua predefinita del negozio, una lingua precisa o nessuna.
Tag e visualizzazione
- lastmod: data di ultima modifica di prodotti, categorie, categorie CMS, marche e fornitori.
- changefreq e priority: disattivati di default, Google li ignora.
- Visualizzazione leggibile: un foglio di stile XSL mostra indice e file come tabella nel browser. I motori di ricerca lo ignorano.
Generazione
- Frequenza: da ogni ora a una volta alla settimana, usata dal cron.
- Rigenera quando il contenuto cambia: quando viene salvato un prodotto, una categoria, una pagina CMS, una marca o un fornitore, la chiamata cron successiva rigenera senza aspettare la frequenza, al massimo una volta all’ora.
- URL per file: 10.000 di default, tra 100 e 50.000.
- Elementi per lotto: 50 di default. Riducilo su un server lento.
- Tempo massimo per richiesta: 20 secondi di default, da tenere sotto il
max_execution_timedel server. Dal back office, ogni richiesta è limitata a 15 secondi.
Regole di esclusione
La scheda Regole di esclusione elenca le regole attive. Ogni regola vale per tutti i negozi o per uno solo e ha effetto dalla generazione successiva.
- Prodotti: per ID, in una categoria (qualsiasi associazione, sottocategorie incluse), di una marca, di un fornitore predefinito, esauriti, a prezzo zero, senza immagine.
- Categorie: per ID, o una categoria con tutte le sottocategorie. I prodotti restano elencati salvo che una regola prodotto li rimuova.
- Pagine CMS: per ID, o una categoria CMS con le sue pagine.
- Marche e fornitori: per ID.
- URL contiene un testo: un testo per riga, senza distinguere maiuscole, per esempio
?q=. - URL corrisponde a un’espressione regolare: un’espressione per riga, senza delimitatori, senza distinguere maiuscole, per esempio
/it/.*-test$. Un’espressione non valida viene rifiutata al salvataggio.
Gli ID si inseriscono separati da virgole o a capo. Un URL escluso da una regola sparisce anche dalle alternative hreflang delle sue traduzioni.
Video prodotto
La scheda Video prodotto serve per i video ospitati fuori da YouTube e Vimeo, o quando vuoi un titolo e una descrizione precisi. Per ogni video: il prodotto (ricerca per nome, riferimento o ID), titolo e descrizione per lingua, URL della miniatura, URL del file video o del player, durata in secondi e negozio interessato. Un titolo vuoto in una lingua prende quello di un’altra lingua, altrimenti il nome del prodotto.
Avviare la generazione
Dal back office
Genera ora avvia la generazione per i negozi del contesto attuale, con una barra di avanzamento. La pagina concatena le richieste fino alla fine. Se chiudi la pagina, il job resta salvato: il pulsante Riprendi in questa finestra lo prosegue, oppure se ne occupa il cron. Annulla ferma il job e le sitemap online restano invariate.
Con il cron
La dashboard mostra un URL del tipo https://tuo-negozio.it/module/dfsitemap/cron?token=.... Richiamalo ogni 5 minuti dal gestore cron del tuo hosting o dal modulo attività cron di PrestaShop. Ogni chiamata lavora per il tempo massimo, poi la successiva riprende il job. Un negozio viene rigenerato quando è raggiunta la sua frequenza, o dopo una modifica del contenuto se l’opzione è attiva. Parametri facoltativi: force=1 per rigenerare subito, id_shop=1,2 per limitare i negozi. Il pulsante Genera un nuovo token invalida il vecchio URL.
Da riga di comando
Con l’accesso SSH, lo script esegue tutto il job in una volta, qualunque sia la dimensione del catalogo:
php /percorso/di/prestashop/modules/dfsitemap/cron.php
php /percorso/di/prestashop/modules/dfsitemap/cron.php --force --shop=1
Senza --force vengono rigenerati solo i negozi in scadenza. In caso di errore lo script termina con il codice 1.
Se il server interrompe una richiesta durante la generazione, il job riprende dall’ultima posizione salvata e i file in corso vengono riparati. Il blocco lasciato dalla richiesta interrotta scade dopo il tempo massimo più 90 secondi: il back office mostra il tempo rimanente.
IndexNow
IndexNow annuncia una pagina creata o modificata a Bing, Yandex, Seznam, Naver e agli altri motori del protocollo, senza aspettare il loro prossimo passaggio. Google non usa IndexNow e continua a leggere la sitemap.
- Attiva Invia le pagine modificate con IndexNow nel blocco Indicizzazione istantanea. Il modulo scrive un file chiave nella radice del negozio.
- A ogni salvataggio di un prodotto, una categoria, una pagina CMS, una marca o un fornitore, l’oggetto entra nella coda.
- Alla chiamata cron successiva, il modulo calcola gli URL di quei contenuti in tutte le lingue e li invia dominio per dominio. Parte solo il contenuto elencato nella sitemap: un prodotto inattivo o escluso da una regola non viene inviato.
Il blocco IndexNow della dashboard mostra la coda, la presenza del file chiave e l’ultimo invio con il codice HTTP (200 o 202 in caso di successo). Con una risposta 429 o 5xx, la coda viene conservata per la chiamata successiva. Il pulsante Invia ora avvia un invio immediato.
robots.txt e Search Console
Il pulsante Dichiara le sitemap in robots.txt aggiunge una riga Sitemap: per negozio tra i marcatori # BEGIN dfsitemap e # END dfsitemap. Quando PrestaShop rigenera robots.txt da Traffico e SEO, il modulo riscrive il blocco. La disinstallazione lo rimuove.
In Google Search Console, invia l’URL dell’indice di ogni negozio (o /sitemap.xml) nella proprietà del dominio corrispondente.
Multinegozio
Ogni negozio ha il suo indice sul proprio dominio, le sue lingue e le sue impostazioni. Seleziona un negozio nel menu multinegozio per dargli valori propri; nel contesto Tutti i negozi, i valori valgono per i negozi senza un valore specifico. Per ogni negozio del contesto, la dashboard mostra l’URL dell’indice, la data dell’ultima generazione e il numero di URL per tipo, di immagini, video e file.
Per gli sviluppatori: aggiungere URL
Un modulo può aggiungere le sue pagine alla sitemap agganciandosi all’hook actionDfSitemapUrls, chiamato durante l’elaborazione del tipo URL personalizzati. L’hook riceve id_shop, languages (id_lang => codice ISO) e link, e restituisce un elenco di voci:
public function hookActionDfSitemapUrls($params)
{
$loc = [];
foreach ($params['languages'] as $idLang => $iso) {
$loc[$idLang] = $params['link']->getBaseLink($params['id_shop']) . $iso . '/blog/mio-articolo';
}
return [
['loc' => $loc, 'lastmod' => '2026-09-01 10:00:00', 'images' => ['https://.../immagine.jpg']],
['loc' => 'https://tuo-negozio.it/pagina-singola'],
];
}
Una voce il cui loc è indicizzato per lingua riceve i tag hreflang come una pagina nativa. Le voci non valide vengono ignorate senza interrompere la generazione.
Domande frequenti
La sitemap non contiene nessuna pagina CMS
Controlla l’opzione Indicizzazione dai motori di ricerca di ogni pagina CMS. Una pagina senza questa opzione è in noindex e non viene elencata.
Marche o fornitori non compaiono
Il modulo segue le preferenze del negozio: se la pagina delle marche o dei fornitori è disattivata, quel tipo viene saltato.
La generazione resta su «Un altro processo sta lavorando al job»
Un’altra richiesta tiene il blocco, spesso il cron. Se quella richiesta è stata interrotta, il blocco scade dopo il tempo indicato e la generazione riprende da sola.
La generazione si ferma con un errore
Il messaggio compare in alto nella dashboard e in Parametri avanzati > Log. La causa più frequente è una cartella radice non scrivibile. Le sitemap precedenti restano online.
IndexNow risponde 403 o 422
Il motore non trova il file chiave o rifiuta l’host. Apri l’URL del file chiave mostrato nel blocco IndexNow: deve mostrare la chiave. Verifica anche che il dominio del negozio corrisponda a quello degli URL inviati.