# DataFirefly All in One SEO — Documentazione completa

> Documentazione completa del modulo DataFirefly All in One SEO per PrestaShop 8 e 9: installazione, template meta, schemi JSON-LD, sitemap XML, redirect, monitoring 404, robots.txt, tracking GA4/GTM, analizzatore di contenuti.

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

Suite SEO premium tutto-in-uno per PrestaShop 8 e 9: template meta dinamici, schemi JSON-LD completi, sitemap XML multilingue, redirect, monitoring 404, Open Graph e Twitter Cards, GA4 e GTM, robots.txt intelligente con blocco crawler IA e analizzatore di contenuti — tutto in un unico modulo.

## Requisiti

- **PrestaShop**: 8.0 a 9.x
- **PHP**: 8.1 o superiore (8.2 e 8.3 raccomandati)
- **MySQL**: 5.7+ o MariaDB 10.3+
- **Modulo productcomments** (ufficiale PrestaShop): opzionale, richiesto solo per AggregateRating sui prodotti
- **mod_rewrite** attivato su Apache (o equivalente Nginx) per le URL riscritte

Il modulo è multi-negozio nativamente: tutte le tabelle sono limitate da `id_shop`. Potete avere configurazioni totalmente diverse per ciascun negozio.

## Installazione

1. Scaricate `dfallinoneseo-vX.Y.Z.zip` dal vostro account cliente DataFirefly.
2. Accedete al back-office PrestaShop.
3. Andate in **Moduli → Module Manager**.
4. Cliccate **Carica un modulo** in alto a destra.
5. Trascinate il file ZIP o cliccate **Seleziona un file**.
6. L'installazione crea automaticamente le 11 tabelle SQL, registra gli hook e aggiunge il menu **Migliora → DataFirefly SEO**.

Dopo l'installazione, aprite il **Dashboard** del modulo per una panoramica dello score SEO globale e dei punti da correggere prioritariamente.

## Configurazione iniziale in 10 minuti

1. **Impostazioni → Generale**: attivate il modulo, indicate il nome del sito e l'etichetta "Home" per il breadcrumb.
2. **Meta e template**: definite almeno un template _Prodotto_ e un template _Categoria_.
3. **Schema → Identità dell'organizzazione**: compilate logo, telefono, email, indirizzo e URL dei social (`sameAs`).
4. **Sitemap**: attivate la sitemap e cliccate **Rigenera ora**.
5. **Tracking**: aggiungete il vostro GA4 Measurement ID e/o GTM ID.
6. **Tracking → Verifiche**: incollate il valore di verifica Google Search Console.
7. **Robots.txt**: cliccate **Carica predefiniti (PS + blocco IA)**.

## Template meta

Il modulo sostituisce l'inserimento manuale di `meta_title` e `meta_description` con template dinamici per tipo di entità. Al salvataggio di una scheda con meta vuoti, il template corrispondente viene applicato automaticamente.

### Tipi di entità supportati

- **Prodotto**: schede prodotto (tutti i tipi, inclusi virtuali e pack)
- **Categoria**: pagine categoria
- **Pagina CMS**: pagine di contenuto statico
- **Marca / Produttore**: pagine produttore
- **Fornitore**: pagine fornitore
- **Home**: home page del negozio
- **Pagine generiche**: `/contact`, `/sitemap`, ecc.

### Token disponibili

- `{shop_name}` — nome del negozio
- `{sep}` — separatore (default `|`)
- `{product_name}` — nome del prodotto (lingua corrente)
- `{product_reference}` — riferimento interno
- `{product_sku}` — alias del riferimento
- `{product_ean13}` — codice a barre EAN13
- `{product_brand}`, `{brand}` — marca/produttore
- `{category}` — categoria predefinita (prodotto) o nome della categoria (pagina categoria)
- `{category_parent}` — nome della categoria padre
- `{category_description}` — descrizione breve (max 160 car.)
- `{short_description}` — descrizione breve del prodotto (max 160 car.)
- `{price}` — prezzo IVA inclusa formattato con valuta
- `{price_tax_excl}` — prezzo IVA esclusa formattato
- `{title}` — titolo della pagina CMS
- `{summary}` — estratto del contenuto CMS (max 160 car.)

### Blocchi condizionali

Per non renderizzare un token vuoto, usate la sintassi condizionale:

```
{?product_brand}{product_brand} | {/?}{product_name} - {shop_name}
```

Se `product_brand` è vuoto, l'intero blocco tra `{?token}` e `{/?}` viene eliminato.

### Esempi di template consigliati

**Prodotto**:

```
Title: {?product_brand}{product_brand} {/?}{product_name} - {category} | {shop_name}
Description: Scopri {product_name}{?product_brand} di {product_brand}{/?}. {short_description} Spedizione rapida su {shop_name}.
```

**Categoria**:

```
Title: {category} - {?category_parent}{category_parent} - {/?}{shop_name}
Description: Tutti i prodotti della categoria {category} su {shop_name}. {category_description}
```

**Home**:

```
Title: {shop_name} - Negozio online
Description: Benvenuti su {shop_name}. Scoprite il nostro catalogo, spedizione rapida, pagamento sicuro.
```

### Sovrascrittura per entità

Per sovrascrivere una scheda specifica, cliccate l'icona **Sovrascrittura meta** nel menu **Modifica massiva**. La pagina di sovrascrittura permette di impostare `meta_title`, `meta_description`, la direttiva robots (es. `noindex,follow`) e un canonical personalizzato per lingua.

La direttiva robots definita su un'entità specifica ha priorità sulle impostazioni globali di indicizzazione.

## Schemi JSON-LD

Il modulo genera un blocco `@graph` unico che aggrega tutti gli schemi della pagina corrente, validato da Google Rich Results Test.

### Schemi generati automaticamente

- **Organization** — su tutte le pagine, identità dell'azienda
- **WebSite** — sulla home, con `SearchAction` per il sitelinks search box
- **LocalBusiness** — se è stato indicato un indirizzo fisico
- **BreadcrumbList** — breadcrumb
- **Product** — sulle schede prodotto, con `offers`, `priceValidUntil`, `gtin13`/`isbn`/`mpn`
- **AggregateRating** — aggregato dal modulo productcomments ufficiale
- **Article** — sulle pagine CMS
- **FAQPage** — dai blocchi FAQ prodotto o pagina

### Identità dell'organizzazione

Tab **Schema → Identità dell'organizzazione**. Campi:

- **Tipo**: Organization, Corporation, LocalBusiness, Store, OnlineStore, OnlineBusiness
- **Logo**: URL assoluta (consigliato 600x60 minimo)
- **Telefono**, **Email**: usati in `contactPoint`
- **Indirizzo postale**: via, CAP, città, paese (ISO-2)
- **sameAs**: una URL per riga

### Validità delle offerte prodotto

Il campo _Validità delle offerte prodotto (giorni)_ controlla il valore di `priceValidUntil` in `Product.offers`. Default: 60 giorni.

### Schemi personalizzati

Tab **Schema → Schemi personalizzati**. Ambiti: **global**, **home**, **product**, **product_id**, **category**, **category_id**, **cms**, **cms_id**.

Variabili disponibili: `{shop_name}`, `{base_url}`, `{entity_id}`, `{entity_type}`.

Il JSON-LD personalizzato viene inserito così com'è nel `@graph`. Validatelo con il [Rich Results Test](https://search.google.com/test/rich-results) prima di pubblicare.

## Sitemap XML

Il modulo genera una sitemap XML conforme alla [specifica sitemaps.org](https://www.sitemaps.org/protocol.html), con hreflang su ogni URL e supporto delle immagini.

### Configurazione

Tab **Sitemap**. Contenuti: Prodotti, Categorie, Pagine CMS, Marche, Fornitori, Immagini, Video.

Opzioni aggiuntive:

- **Escludi out-of-stock**: rimuove i prodotti esauriti
- **Gzip**: genera anche le varianti `.xml.gz`
- **URL per file**: dimensione dei chunk (consigliato 5000-10000, max 50000)

### Rigenerazione

Manuale dall'admin. Per automatizzare, pianificate un cron:

```
0 */6 * * * php /var/www/html/index.php fc=module&module=dfallinoneseo&controller=sitemap&action=rebuild
```

### Invio ai motori di ricerca

Cliccate **Pinga motori** per Google e Bing. Per Google Search Console, inviate la URL della sitemap index una volta in GSC → Sitemaps.

URL della sitemap index: `https://vostro-negozio.com/sitemap.xml`

## Sitemap HTML pubblica

Una sitemap HTML leggibile dagli umani viene generata automaticamente in `/plan-du-site`. Aggrega categorie (albero), pagine CMS, marche, fornitori e i 200 prodotti più recenti.

## Redirect

Il modulo gestisce i redirect HTTP 301, 302, 307, 308 e 410 con tre tipi di match.

### Tipi di match

- **Esatto**: la URL sorgente deve corrispondere esattamente
- **Prefisso**: la URL sorgente è un prefisso della URL richiesta. Utile per migrare cartelle intere.
- **Regex**: espressione regolare PHP. Gruppi di cattura disponibili tramite `$1`, `$2`.

### Creazione manuale

Tab **Redirect → Nuovo redirect**. Campi: URL sorgente, URL destinazione (vuoto per 410), tipo di match, codice HTTP, conserva query string.

### Importazione / esportazione CSV

```
source,destination,type,code
/prodotto-vecchio,/prodotto-nuovo,exact,301
/cartella-vecchia/,/cartella-nuova/,prefix,301
/old-(.*),/new-$1,regex,301
```

### Redirect automatico al cambio di slug

Se l'opzione **Impostazioni → Monitoring → Redirect 301 auto al cambio di URL** è attivata, il modulo crea automaticamente un 301 al cambio di slug. Il `created_by` viene marcato come `auto:urlchange`.

Questa opzione evita la maggior parte dei 404 SEO classici legati al refactoring dei contenuti. Attivatela dall'installazione.

## Monitoring 404

Tab **Monitor 404**. Cattura tutte le URL in errore 404 servite da PrestaShop, con deduplicazione, conteggio degli hit, rilevamento dei bot e hash degli indirizzi IP (sale `COOKIE_KEY` di PrestaShop per conformità GDPR).

### Filtri disponibili

- **Non risolte**: URL senza redirect copertura (vista predefinita)
- **Risolte**: URL per cui è stato creato un redirect a posteriori
- **Bot**: hit da user-agent identificati come bot
- **Tutte**

### Creare un redirect con un clic

Su ogni riga, il pulsante **Reindirizza** apre un form inline che precompila la sorgente. La 404 viene automaticamente marcata come risolta.

### Purga e manutenzione

Soglia _Numero massimo di voci 404 conservate_ (default 5000). Il pulsante **Purga vecchie 404** rimuove le voci non risolte più vecchie.

## Robots.txt dinamico

Il modulo serve un file `/robots.txt` generato dinamicamente ad ogni richiesta.

### Preset PrestaShop + blocco IA

Il pulsante **Carica predefiniti (PS + blocco IA)**:

- Blocca le directory sensibili di PrestaShop (`/admin*/`, `/cache/`, `/classes/`, ecc.)
- Blocca le pagine tecniche (`/cart`, `/order`, `/my-account`, ecc.)
- Blocca i principali crawler IA non rispettosi: **GPTBot**, **ClaudeBot**, **CCBot**, **Google-Extended**, **anthropic-ai**
- Punta alla sitemap (`Sitemap: /sitemap.xml`)

### Regole personalizzate

Ogni regola ha un user-agent, una direttiva (`Allow`, `Disallow`, `Crawl-delay`), un valore e una posizione. Attivare/disattivare tramite il pulsante ON/OFF.

### Anteprima in tempo reale

Il blocco **Anteprima del file generato** renderizza il robots.txt come sarà servito.

## File llms.txt nativo

Il modulo serve un file `/llms.txt` conforme alla [specifica llmstxt.org](https://llmstxt.org/). Elenca in markdown le sezioni principali del sito per i crawler IA rispettosi.

Nessuna configurazione richiesta — generato automaticamente dall'albero di categorie, pagine CMS e marche.

## Open Graph e Twitter Cards

Tab **Social**. Il modulo inietta i tag `og:*` e `twitter:*` su tutte le pagine.

### Impostazioni

- **Attiva Open Graph e Twitter Cards**: master switch
- **og:locale automatico**: calcolato dalla lingua del contesto (es. `it_IT`)
- **Immagine OG predefinita**: URL assoluta di un'immagine 1200×630
- **og:site_name**, **og:type** predefinito
- **Twitter @handle** e tipo di card (`summary` o `summary_large_image`)
- **fb:app_id**: Facebook App ID

Per le schede prodotto, il modulo usa automaticamente l'immagine principale della scheda.

## Tracking: GA4, GTM, pixel

### GA4 e Enhanced Ecommerce

Campo **GA4 Measurement ID**: formato `G-XXXXXXXXXX`.

Attivate **Enhanced Ecommerce** per gli eventi `view_item`, `view_item_list`, `add_to_cart`, `remove_from_cart`, `begin_checkout`, `add_payment_info`, `purchase`.

Attivate **Rispetta Consent Mode v2** per un tracking conforme al GDPR.

### Google Tag Manager

Campo **GTM ID**: formato `GTM-XXXXXXX`. Snippet GTM nell'`head`, fallback `noscript` dopo l'apertura del `body`.

### Pixel pubblicitari

- **Facebook Pixel ID**: 15 cifre
- **TikTok Pixel ID**: alfanumerico

### Verifiche di proprietà

- Google Search Console
- Bing Webmaster Tools
- Yandex Webmaster
- Pinterest
- Baidu

### Codice personalizzato head e body-end

- **Codice iniettato nell'head**: per script di terze parti
- **Codice iniettato prima della chiusura del body**: per widget chat, retargeting

Nessuna validazione. Un errore di sintassi HTML può rompere il rendering della pagina. Testate in pre-produzione.

## Analizzatore di contenuti

Tab **Analizzatore**. Inviate prodotto, categoria, pagina CMS o HTML grezzo all'analizzatore per uno score SEO globale.

### Metriche calcolate

- **Score SEO globale** (0-100)
- **Leggibilità Flesch**
- **Numero di parole**, **numero di frasi**
- **Densità parola chiave** (in %)
- **Link interni / esterni / nofollow**
- **Immagini senza alt**
- **Struttura H1-H6**
- Parola chiave in **slug** e **primo paragrafo**

### Checks

- Lunghezza title (50-60 caratteri)
- Lunghezza meta description (140-160 caratteri)
- Lunghezza slug
- Lunghezza body (minimo 300 parole)
- Almeno un'immagine con alt
- Parola chiave in title, primo paragrafo, slug
- Densità parola chiave tra 0,5% e 2,5%
- Almeno un H1 e diversi H2/H3

Uno score di 80+ è eccellente. Sotto 50, rivedete struttura e wording.

## Modifica massiva

Tab **Modifica massiva**. Griglia paginata (30 voci/pagina) con filtri per `meta_title`, `meta_description`, `link_rewrite`.

### Filtri disponibili

- **Tutte**
- **Senza title**
- **Senza descrizione**
- **Ricerca per nome**

### Applicare i template in massa

Il pulsante **Applica template** applica automaticamente il template. Attivate **Applica solo a campi vuoti** per evitare di sovrascrivere meta già compilati.

## Metabox SEO sulla scheda prodotto

- **Score SEO in diretta** (7 check)
- **Anteprima SERP Google**
- Parola chiave principale rilevata

## Impostazioni avanzate

### Indicizzazione

- **hreflang multilingue**: tag `link rel="alternate"`
- **Strategia x-default**: _Lingua predefinita_ (raccomandato), _Inglese_, _Disattivato_
- **URL canonical**: `link rel="canonical"`
- **Canonical su paginazione**: _Pagina corrente_ (raccomandato), _Sempre pagina 1_, _Nessun canonical_
- **noindex automatici**: /search, carrello, mio account, novità, più venduti, promozioni, faccette
- **Canonical verso pagina padre su faccette**

### Immagini

- **Generazione automatica alt**
- **Template alt**: default `{product_name} - {shop_name}`
- **Lazyload nativo**: `loading="lazy"` e `decoding="async"`

### Manutenzione

- **Svuota cache**: Smarty + PrestaShop
- **Purga vecchie 404**
- **Esporta tutti i dati (JSON)**

## Multi-negozio

Tutte le funzionalità sono limitate da `id_shop`.

- **Template**: un template per coppia (tipo di entità, negozio)
- **Sitemap**: un sitemap_index distinto per negozio
- **Robots.txt**: regole per negozio
- **Redirect**: per negozio
- **Schemi personalizzati**: per negozio

## Risoluzione dei problemi

### La sitemap non viene generata

- Cartella `modules/dfallinoneseo/sitemaps/` scrivibile?
- `chmod 755 modules/dfallinoneseo/sitemaps/`
- Aumentate `max_execution_time` in php.ini con 50.000+ prodotti

### Gli schemi JSON-LD non appaiono

- Modulo attivato?
- Tipo di schema attivato?
- Svuotate la cache PrestaShop
- Ispezionate il sorgente HTML: blocco `script type="application/ld+json"`

### I redirect 301 non funzionano

- Modulo installato e attivato?
- Redirect marcati come **attivi**?
- Testate la regex su [regex101.com](https://regex101.com/) in modalità PCRE
- Ordine di priorità: esatto → prefisso → regex (per `hit_count` decrescente)

### GA4 / GTM non si inietta

- Formato ID corretto?
- Consent Mode v2: in modalità "denied" di default fino al consenso
- Ispezionate l'`head` della pagina

### robots.txt non cambia

- File `robots.txt` statico nella radice? Eliminatelo.
- _URL amichevoli_ attivati?

### Errore creazione tabelle SQL all'installazione

- Utente MySQL con permessi `CREATE` e `ALTER`?
- `utf8mb4` con collation `utf8mb4_unicode_ci` supportato?
- Prefisso tabelle oltre 5 caratteri? Contattate il supporto.

## Riferimento tecnico

### Hook utilizzati

18 hook:

- `displayHeader` — Meta, Canonical, hreflang, OG, Twitter, JSON-LD, GA4/GTM
- `displayBeforeBodyClosingTag` — GTM noscript, FB Pixel noscript, body-end
- `displayBackOfficeHeader` — CSS/JS del back-office
- `displayAdminProductsExtra` — metabox SEO
- `actionDispatcherBefore`, `actionDispatcherAfter` — routing e cattura 404
- `actionObjectProductAddAfter`, `actionObjectProductUpdateAfter` — auto-fill meta + auto-301
- `actionObjectCategoryAddAfter`, `actionObjectCategoryUpdateAfter`
- `actionObjectCmsAddAfter`, `actionObjectCmsUpdateAfter`
- `actionObjectManufacturerUpdateAfter`, `actionObjectSupplierUpdateAfter`
- `actionAdminControllerSetMedia`, `actionFrontControllerSetMedia`
- `displayProductExtraContent`
- `moduleRoutes` — `/sitemap.xml`, `/plan-du-site`, `/robots.txt`, `/llms.txt`

### Tabelle SQL aggiunte

Prefisso `df_seo_`, `utf8mb4`, `utf8mb4_unicode_ci`:

- `df_seo_meta`, `df_seo_meta_lang` — sovrascritture meta
- `df_seo_template`, `df_seo_template_lang` — template
- `df_seo_redirect` — redirect
- `df_seo_404` — journal 404
- `df_seo_score` — snapshot di score
- `df_seo_keyword` — focus keyword
- `df_seo_robots_rule` — regole robots.txt
- `df_seo_schema_custom` — schemi JSON-LD personalizzati
- `df_seo_log` — log diagnostico

### Disinstallazione

La disinstallazione rimuove gli hook e i tab, ma **conserva le tabelle SQL e i dati**. Per purgare completamente:

```
DROP TABLE ps_df_seo_meta, ps_df_seo_meta_lang, ps_df_seo_template, ps_df_seo_template_lang,
           ps_df_seo_redirect, ps_df_seo_404, ps_df_seo_score, ps_df_seo_keyword,
           ps_df_seo_robots_rule, ps_df_seo_schema_custom, ps_df_seo_log;
DELETE FROM ps_configuration WHERE name LIKE 'DFSEO_%';
```

Prima della disinstallazione: usate **Impostazioni → Manutenzione → Esporta tutti i dati (JSON)**.

## Aggiornamenti e supporto

- **Aggiornamenti**: 12 mesi inclusi. Rinnovo annuale opzionale a 49 €.
- **Supporto**: 12 mesi via email, risposta entro 48h lavorative.
- **Changelog** e download delle ultime versioni sul [vostro account cliente DataFirefly](https://www.datafirefly.com/it/product/dfallinoneseo/).
