PS PrestaShop Intermedio

LLMs.txt PrestaShop — SEO IA per ChatGPT, Claude e Perplexity

Genera automaticamente llms.txt e llms-full.txt per esporre il tuo catalogo PrestaShop agli LLM (ChatGPT, Claude, Perplexity, Gemini).

Aggiornato Versione del modulo 1.0.0

Panoramica

LLMs.txt PrestaShop genera automaticamente i file standard /llms.txt e /llms-full.txt nella radice del tuo negozio, seguendo la specifica llmstxt.org. Questi file espongono il tuo catalogo in modo strutturato agli LLM (ChatGPT, Claude, Perplexity, Gemini) — è l’equivalente del sitemap.xml, ma per l’IA generativa.

Da ricordare: gli LLM leggono questi file per comprendere il tuo negozio senza dover scansionare ogni pagina prodotto. Meglio il tuo catalogo è esposto, meglio sarà citato e raccomandato nelle loro risposte.

Due file, due usi

  • /llms.txt — Indice condensato: titolo + URL + descrizione breve per ogni voce. Formato Markdown, di solito qualche centinaio di KB.
  • /llms-full.txt — Contenuto integrale e pulito di ogni voce. Markdown arricchito, può pesare diversi MB a seconda della dimensione del catalogo. Opzionale dalla 1.0.0.

Installazione

  1. Carica il ZIP in Moduli → Gestore moduli → Carica un modulo.
  2. Clicca su Installa.
  3. Clicca su Configura per aprire il pannello.

All’installazione, il modulo:

  • Crea 4 tabelle SQL: cache, sezioni personalizzate (+ lang + shop), log.
  • Aggiunge 3 voci nel menu admin sotto una categoria nascosta AdminDfLlmsTxtParent.
  • Si registra sugli hook del catalogo (creazione/modifica/eliminazione di prodotto, categoria, CMS, produttore, fornitore) per invalidare la cache automaticamente.
  • Aggiunge un blocco nel .htaccess radice di PrestaShop per servire i file in UTF-8 con le intestazioni corrette.
  • Genera un token cron casuale di 32 caratteri.

Configurazione

La schermata di configurazione è organizzata in 5 sezioni.

1. Generale

  • Attivare il modulo — Toggle globale. Se disattivato, le URL /llms.txt e /llms-full.txt restituiscono 404 e i file fisici vengono eliminati.
  • Nome del sito (multilingua, multinegozio) — Appare come intestazione principale # Nome del sito in cima al file.
  • Descrizione breve del sito (multilingua, multinegozio) — 1–2 frasi che riassumono cosa offre il negozio. Mostrata come blockquote > ... proprio sotto il nome.
  • Introduzione (multilingua, multinegozio) — Testo libero Markdown. Utile per dare contesto aggiuntivo agli LLM (politica di reso, spedizione, valori del marchio).
  • Formato di outputMarkdown arricchito (consigliato, supportato da tutti i principali LLM) o Testo semplice.
  • Generare anche llms-full.txt — Se disattivato, viene generato solo /llms.txt. Permette di risparmiare diversi MB di archiviazione e secondi di generazione sui cataloghi grandi.

2. Sorgenti di contenuto

  • Includere pagine CMS — Pagine di contenuto (Chi siamo, FAQ, Condizioni, ecc.).
  • Includere categorie — Categorie attive con la loro descrizione.
  • Includere prodotti — Prodotti attivi.
  • Includere produttori — Marchi con descrizione.
  • Includere fornitori — Elenco fornitori.
  • Includere il prezzo dei prodotti — Formattato secondo la locale corrente.
  • Includere le caratteristiche prodotto — Feature chiave/valore.
  • Includere le combinazioni — Varianti (taglia, colore, ecc.) con differenza di prezzo.
  • Includere prodotti esauriti — Disattivato di default.
  • Campo descrizione prodotto — Breve, lunga, o entrambe.
  • Limite prodotti — Numero massimo di voci prodotto nel file. 500 di default, da aumentare in base alla dimensione del catalogo (1000–5000 ragionevole).

3. Esclusioni

Liste di ID separati da virgola. Permette di escludere contenuti specifici senza toccare il resto del catalogo.

  • ID categorie escluse — Es.: prodotti B2B, categorie interne, categorie obsolete.
  • ID prodotti esclusi — Prodotti in fine vita, campioni, regali.
  • ID CMS esclusi — Pagine di servizio interno, bozze.
Suggerimento: per trovare gli ID, vai all’elenco corrispondente (Catalogo → Categorie, ecc.); l’ID è nella prima colonna o nell’URL di modifica.

4. Cache e Cron

  • Durata della cache (TTL in secondi) — 86400 (24 h) di default. La cache viene servita finché non scade.
  • Invalidazione automatica sulle modifiche del catalogo — Quando modifichi/aggiungi/elimini un prodotto, categoria, ecc., la cache viene invalidata e il file sarà rigenerato alla prossima richiesta (o al prossimo cron).
  • Token cron — Stringa casuale di 32 caratteri. Rigenerabile dal pannello; le URL cron precedenti smettono immediatamente di funzionare.
  • URL cron pronta da copiare — Formato: https://tuo-negozio.tld/index.php?fc=module&module=dfllmstxt&controller=cron&token=XXX

5. Avanzato

  • Ritenzione dei log — Numero di giorni durante cui i log di generazione vengono conservati. 30 di default.
  • Rispettare robots.txt — Per usi avanzati. Attivato di default.

Configurazione del cron

Il cron pre-genera la cache per tutti i negozi e tutte le lingue attive in una sola chiamata. Ideale per i cataloghi grandi per evitare che un utente finale inneschi la rigenerazione.

URL da chiamare:

https://tuo-negozio.tld/index.php?fc=module&module=dfllmstxt&controller=cron&token=TUO_TOKEN

Esempio di crontab (ogni giorno alle 4):

0 4 * * * curl -s "https://tuo-negozio.tld/index.php?fc=module&module=dfllmstxt&controller=cron&token=TUO_TOKEN" > /dev/null

Parametri opzionali:

  • &id_shop=2 — Limitare a un negozio specifico.
  • &id_lang=1 — Limitare a una lingua specifica.

La risposta JSON dettaglia il risultato di ogni generazione (successo, dimensione dei file, durata).

Sezioni personalizzate

Oltre al catalogo bruto, puoi iniettare contenuti liberi nei file generati. Scheda LLMs.txt → Sezioni personalizzate nel menu admin.

Casi d’uso tipici:

  • Politica di reso riassunta
  • Valori e impegno del marchio
  • FAQ breve
  • Condizioni di spedizione
  • Istruzioni specifiche per gli LLM (es.: “Non confrontare con [marchio concorrente]”)

Ogni sezione:

  • Ha un titolo e contenuto multilingua (Markdown supportato).
  • È multinegozio: scegli in quali negozi appare.
  • Ha un posizionamento: prima delle sorgenti, dopo le sorgenti, o nel piè di pagina.
  • Ha una posizione regolabile con drag-and-drop.
  • Può essere attivata/disattivata senza eliminazione.

URL dei file generati

I file sono accessibili nella radice del tuo negozio:

  • https://tuo-negozio.tld/llms.txt
  • https://tuo-negozio.tld/llms-full.txt (se l’opzione è attivata)

Come vengono serviti

Per il negozio predefinito nella sua lingua predefinita, il modulo scrive un file fisico nella radice di PrestaShop. Apache lo serve direttamente, senza dipendere dal dispatcher di PrestaShop, dalle URL semplificate o dalla cache delle rotte. È la stessa meccanica utilizzata dal modulo ufficiale gsitemap per /sitemap.xml.

Per gli altri negozi in una configurazione multinegozio (Host diverso, radice condivisa), i file vengono serviti tramite l’hook moduleRoutes che instrada in base all’Host header.

Intestazioni HTTP

Il modulo aggiunge automaticamente un blocco nel .htaccess radice di PrestaShop per forzare le intestazioni corrette:

# ~~ dfllmstxt-datafirefly start ~~
<Files "llms.txt">
    ForceType "text/plain; charset=utf-8"
    <IfModule mod_headers.c>
        Header set Content-Type "text/plain; charset=utf-8"
        Header set X-Robots-Tag "noindex, follow"
    </IfModule>
</Files>
<Files "llms-full.txt">
    ForceType "text/plain; charset=utf-8"
    <IfModule mod_headers.c>
        Header set Content-Type "text/plain; charset=utf-8"
        Header set X-Robots-Tag "noindex, follow"
    </IfModule>
</Files>
# ~~ dfllmstxt-datafirefly end ~~

Questo blocco è posizionato fuori dal blocco PrestaShop # ~~ start ~~ ... # ~~ end ~~ e quindi preservato durante le rigenerazioni automatiche di PrestaShop. Si auto-ripara anche a ogni rigenerazione della cache (idempotente), nel caso fosse stato modificato.

X-Robots-Tag noindex: aggiunto volontariamente. llms.txt punta ai crawler IA, non all’indice di Google. Gli LLM leggono questi file direttamente senza bisogno che appaiano nelle SERP. Il tuo SEO classico non è interessato.

Architettura estensibile (per sviluppatori)

Il modulo espone un sistema di Content Provider che altri moduli possono arricchire tramite un hook. Se hai un modulo blog, FAQ prodotto, testimonianze clienti o glossario, può pubblicare il suo contenuto nel llms.txt senza modificare dfllmstxt.

Hook actionDfLlmsTxtRegisterProviders

Nel tuo modulo esterno:

public function hookActionDfLlmsTxtRegisterProviders($params)
{
    require_once _PS_MODULE_DIR_ . 'miomodulo/classes/MyBlogProvider.php';
    $params['registry']->register(new MyBlogProvider());
}

La tua classe deve estendere DfLlmsTxtAbstractContentProvider (o implementare DfLlmsTxtContentProviderInterface) e fornire almeno:

  • getKey() — Identificatore unico (es.: "blog").
  • getSectionTitle() — Titolo di sezione mostrato nel file (es.: "Blog").
  • isEnabled() — Booleano che indica se il provider deve produrre voci.
  • getShortEntries() — Elenco di voci per llms.txt, formato ['title', 'url', 'description'].
  • getFullEntries() — Elenco di voci per llms-full.txt, formato ['title', 'url', 'body'].

Hook di generazione

Due hook permettono di filtrare o arricchire il contenuto poco prima che venga servito:

  • actionDfLlmsTxtBeforeGenerate — Prima della generazione. Permette di modificare la configurazione o i provider attivi.
  • actionDfLlmsTxtAfterGenerate — Dopo la generazione ma prima della messa in cache. Permette di trasformare il contenuto finale.

Compatibilità

  • PrestaShop 8.0.0 — 8.99.99 (supporto PS 9 prossimamente)
  • PHP minimo 7.4, 8.1+ consigliato
  • MySQL 5.7+ / MariaDB 10.4+
  • Multinegozio completo (configurazione e cache isolati per negozio)
  • Multilingua completo (tutte le lingue attive)
  • Apache 2.x con mod_mime (universale). mod_headers opzionale ma consigliato per intestazioni HTTP pulite.

Risoluzione dei problemi

Il file non appare nella radice

Tre cause possibili, in ordine di probabilità:

  1. Permessi di scrittura — La radice di PrestaShop deve essere scrivibile dall’utente PHP. Verifica con ls -la. Se il file /llms.txt non esiste dopo una rigenerazione, è quasi sempre questo.
  2. Modulo disattivato — Verifica il toggle “Attivare il modulo” in alto nella configurazione.
  3. Multinegozio con radice condivisa — Solo il negozio predefinito scrive nella radice. Gli altri negozi vengono serviti tramite moduleRoutes (che richiede le URL semplificate attivate in Preferenze → Traffico e SEO).

Codifica rotta (caratteri “é” invece di “é”)

Sintomo classico di UTF-8 servito senza charset HTTP. Il modulo aggiunge automaticamente le direttive .htaccess necessarie (vedi sezione Intestazioni HTTP più sopra). Se il problema persiste dopo una rigenerazione:

  1. Verifica che il blocco # ~~ dfllmstxt-datafirefly start ~~ sia presente nel .htaccess radice di PrestaShop.
  2. Se assente: disinstalla e reinstalla il modulo (forza la reinserzione del blocco).
  3. Verifica con curl -I https://tuo-negozio.tld/llms.txt che la risposta contenga Content-Type: text/plain; charset=utf-8.

Generazione riuscita ma URL in 404

Se la rigenerazione riesce (dimensione file corretta nei log) ma l’URL restituisce 404:

  1. Verifica che il file fisico esista nella radice: ls -la /percorso/prestashop/llms.txt.
  2. Se esiste ma Apache restituisce 404, è probabilmente un problema di .htaccess che blocca i file .txt. Controlla le regole del .htaccess radice.
  3. Se non esiste, è un problema di permessi di scrittura (vedi sopra).

La cache resta obsoleta dopo una modifica prodotto

L’invalidazione automatica è disattivata. Attivala in Cache e Cron → Invalidazione automatica sulle modifiche del catalogo. Puoi anche forzare manualmente con il pulsante Svuota cache del pannello.

Il file llms-full.txt pesa diversi MB, è troppo

Disattiva l’opzione Generare anche llms-full.txt nella configurazione Generale. Sarà generato solo /llms.txt (di solito < 1 MB). Per la maggior parte dei casi d’uso IA è sufficiente: gli LLM moderni sanno seguire le URL e recuperare le pagine individuali quando ne hanno bisogno.

Disinstallazione

La disinstallazione è pulita:

  • Le 4 tabelle SQL vengono eliminate.
  • I file fisici /llms.txt e /llms-full.txt nella radice vengono eliminati.
  • Il blocco .htaccess aggiunto viene rimosso.
  • Tutte le variabili di configurazione DFLLMS_* vengono ripulite.
  • Le schede admin vengono rimosse.

Changelog

1.0.0 — Maggio 2026

  • Rilascio iniziale.
  • Generazione conforme alla spec llmstxt.org per /llms.txt e /llms-full.txt.
  • 5 Content Provider nativi: prodotti, categorie, CMS, produttori, fornitori.
  • Cache TTL con invalidazione automatica.
  • Cron protetto da token.
  • Sezioni personalizzate multilingua, multinegozio.
  • Architettura estensibile tramite hook.
  • Auto-gestione del .htaccess radice per Content-Type UTF-8 e X-Robots-Tag.
  • Opzione per disattivare la generazione di llms-full.txt.
Questa pagina ti è stata utile?

Ancora bloccato? Contatta l'assistenza