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

> Documentazione completa del modulo DataFirefly LLMs.txt Generator per PrestaShop: installazione, configurazione, cron, sezioni personalizzate, hook per sviluppatori e risoluzione dei problemi.

- Pagina: <https://www.datafirefly.com/it/documentation/llms-txt-prestashop-seo-ia-chatgpt/>
- Lingua: it
- Aggiornato il: 2026-07-22
- Altre lingue: [fr](https://www.datafirefly.com/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [en](https://www.datafirefly.com/en/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [es](https://www.datafirefly.com/es/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [de](https://www.datafirefly.com/de/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [pl](https://www.datafirefly.com/pl/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [pt](https://www.datafirefly.com/pt/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [nl](https://www.datafirefly.com/nl/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md)
- Indice: <https://www.datafirefly.com/it/documentation/llms.txt>

## 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](https://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 output** — _Markdown 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`.
