SEO PrestaShop: Guida tecnica a URL, Schema, Sitemap e Core Web Vitals
Guida SEO tecnica per PrestaShop — URL friendly, canonical, hreflang, dati strutturati, sitemap XML, Core Web Vitals e controllo indicizzazione.
La SEO in PrestaShop è configurazione, non magia
La maggior parte dei negozi PrestaShop lascia sul tavolo il 30-50% del proprio potenziale di traffico organico — non per mancanza di contenuti, ma per URL mal configurati, tag canonical mancanti, dati strutturati errati e spreco di crawl budget. Questa è una guida tecnica con percorsi esatti delle impostazioni, tabelle del database e frammenti di codice per ogni raccomandazione.
Un negozio con 10.000 prodotti e una SEO tecnica corretta supererà un concorrente con 50.000 prodotti e un groviglio di URL duplicati. Si tratta di eliminare le barriere, non di trucchetti.
Struttura degli URL e URL amichevoli
Vai su Parametri del negozio → Traffico e SEO → SEO e URL e abilita URL amichevoli. Questo riscrive gli URL da index.php?id_product=42 a /mens-leather-wallet-42.html. Su Apache, PrestaShop genera automaticamente il file .htaccess. Su Nginx, servono regole di rewrite manuali.
Dopo l’attivazione, clicca su Genera file .htaccess. Se il tuo negozio si trova in una sottodirectory, verifica che il RewriteBase corrisponda al tuo percorso.
Rimozione degli ID dagli URL (PS 8+)
In Parametri del negozio → Traffico e SEO, trova Percorso verso i prodotti e Percorso verso le categorie:
# Default (with ID)
{category:/}{id}-{rewrite}.html
# Clean URL (no ID) — PS 8+
{category:/}{rewrite}.html
Rimuovere gli ID produce URL più puliti ma crea un rischio: PrestaShop risolve gli URL tramite ps_product_lang.link_rewrite. Se due prodotti condividono lo stesso slug, vince la prima corrispondenza.
Prima di rimuovere gli ID, controlla la presenza di slug duplicati:SELECT link_rewrite, id_lang, COUNT(*) as cnt FROM ps_product_lang GROUP BY link_rewrite, id_lang HAVING cnt > 1;
Correggi tutti i duplicati prima, altrimenti i prodotti diventano irraggiungibili.
Buone pratiche per gli URL
- Barre finali: Le categorie terminano con
/, i prodotti con.html. La coerenza all’interno di ogni tipo è importante — se sia/shoesche/shoes/restituiscono 200, hai contenuti duplicati. Imponi un unico schema con un 301. - Mantieni gli slug brevi: 3-5 parole.
/mens-leather-wallet.htmlè meglio di/mens-genuine-italian-leather-bifold-wallet-brown.html. - Trattini, non underscore: Google tratta i trattini come separatori di parole. PrestaShop lo fa già di default.
- Non cambiare mai URL attivi senza redirect: Usa la pagina SEO e URL per aggiungere redirect 301 per i vecchi URL.
Meta tag e titoli
Ogni pagina in PrestaShop può avere un meta title e una meta description personalizzati. I dati sono memorizzati per lingua nelle tabelle _lang:
# Products: ps_product_lang ? meta_title, meta_description, link_rewrite
# Categories: ps_category_lang ? meta_title, meta_description, link_rewrite
# CMS pages: ps_cms_lang ? meta_title, meta_description, link_rewrite
# Static pages: ps_meta_lang ? title, description, url_rewrite
Se un prodotto non ha un meta title personalizzato, PrestaShop ricorre al nome del prodotto — “Classic T-Shirt” diventa <title>Classic T-Shirt</title>, senza brand né nome del negozio.
Schemi per i meta title
Google mostra circa 50-60 caratteri. Metti le parole importanti all’inizio, il nome del negozio alla fine:
# Product: Primary Keyword - Key Feature | Store Name
# Category: Category Name - Differentiator | Store Name
# CMS: Page Topic - Store Name
Meta description
Le meta description non influenzano direttamente il ranking, ma incidono molto sul tasso di clic (CTR). Google mostra circa 155 caratteri su desktop, circa 120 su mobile. Includi un invito all’azione, menziona prezzo o disponibilità, ed evita duplicati tra i prodotti.
Se hai migliaia di prodotti e non puoi scrivere meta description individuali, lasciale vuote piuttosto che riempirle con testo generico. Google genererà automaticamente uno snippet dal contenuto della pagina, che di solito è più pertinente di un testo standard.
Aggiornamenti massivi dei metadati
Per cataloghi di grandi dimensioni, usa SQL per impostare meta title basati su template. Fai un JOIN tra ps_product_lang e ps_category_lang sulla categoria predefinita e usa CONCAT() per unire il nome del prodotto con quello della categoria. Esegui sempre una SELECT prima per visualizzare l’anteprima, e fai sempre un backup prima di aggiornamenti massivi.
URL canonici
PrestaShop genera automaticamente i tag canonical tramite il file head.tpl del tema. I prodotti puntano all’URL base del prodotto, le categorie alla base senza filtri. Questo gestisce i duplicati comuni, ma restano diversi problemi:
- Paginazione:
/wallets/?page=2e/wallets/?page=3sono indicizzabili di default. Ogni pagina paginata dovrebbe avere un canonical autoreferenziale. Usanoindexsulle pagine profonde se non vuoi che vengano classificate singolarmente. - Ordinamento:
?order=product.price.asccrea duplicati indicizzabili. Blocca con robots.txt o noindex. - Navigazione a faccette: I parametri dei filtri creano un’esplosione combinatoria. Blocca gli URL dei filtri in robots.txt E aggiungi noindex alle pagine filtrate.
- Prodotto in più categorie: PrestaShop canonicalizza verso la categoria predefinita — questo è il comportamento corretto.
Google ha deprecato rel="prev"/rel="next" nel 2019. Concentrati sui tag canonical e sul noindex per il controllo della paginazione.
Canonical nel multistore
Ogni negozio dovrebbe canonicalizzare verso il proprio dominio — mai cross-domain, a meno che un negozio non sia intenzionalmente subordinato. PrestaShop gestisce questo correttamente quando i negozi hanno domini separati. Consulta la nostra guida al multistore per i dettagli.
Hreflang per negozi multilingua
Se il tuo negozio serve più lingue, hreflang indica a Google quale versione mostrare in ogni mercato. Senza di essi, Google sceglie una versione e sopprime le altre.
<link rel="alternate" hreflang="en" href="https://shop.com/en/wallet.html">
<link rel="alternate" hreflang="fr" href="https://shop.com/fr/portefeuille.html">
<link rel="alternate" hreflang="x-default" href="https://shop.com/en/wallet.html">
Usa codici lingua-paese (en-GB, en-US) quando hai prezzi o contenuti specifici per regione. Usa codici solo lingua (en, fr) negli altri casi. Includi sempre x-default come fallback.
Errori comuni con hreflang
- Tag di ritorno mancanti: La pagina A punta a B, ma B non punta indietro ad A. Google ignora entrambi.
- Codici errati:
en-UKè sbagliato (corretto:en-GB). Usa ISO 639-1 per la lingua, ISO 3166-1 Alpha 2 per il paese. - Hreflang su URL non canonici: Se una pagina ha un canonical che punta altrove, il suo hreflang viene ignorato.
- Hreflang con noindex: Le pagine con noindex non possono essere target di hreflang.
Verifica con il validatore hreflang di TechnicalSEO.com. Un singolo tag di ritorno errato invalida l’intero cluster per quella pagina.
Per il multistore con domini separati per lingua, l’hreflang cross-domain richiede la modifica di head.tpl per interrogare ps_shop_url e costruire URL per negozio — il comportamento predefinito copre solo le lingue all’interno di un singolo negozio.
Dati strutturati / Schema.org
I dati strutturati abilitano i rich results — valutazioni a stelle, badge di prezzo, indicatori di disponibilità nei risultati di ricerca. I temi PrestaShop includono uno schema Product di base, ma spesso è incompleto.
Schema Product
Ogni pagina prodotto necessità di uno schema Product + Offer completo. I campi minimi richiesti da Google per i rich results: name, image, price, priceCurrency, availability. Se ne manca anche solo uno, i rich results non si attivano. Includi sku, brand e aggregateRating quando disponibili.
Nei temi classici, lo schema del prodotto si trova in templates/catalog/product.tpl o in un partial come _partials/microdata/product-jsonld.tpl. In Hummingbird (PS 8+/9.x), controlla templates/catalog/_partials/product-details.tpl. Le implementazioni variano in base al tema.
Schema BreadcrumbList e Organization
I breadcrumb nei risultati di ricerca mostrano la gerarchia del sito. Il modulo breadcrumb di PrestaShop dovrebbe generare automaticamente il JSON-LD BreadcrumbList — verifica con il Rich Results Test. Aggiungi lo schema Organization a livello di sito tramite l’hook displayHeader con il nome della tua attività, l’URL del logo, le informazioni di contatto e i link ai social media.
Schema FAQ e JSON-LD personalizzato
Le pagine CMS con contenuti di domande e risposte possono usare lo schema FAQPage per snippet espansi. Per qualsiasi tipo di schema non coperto dal tuo tema, inietta JSON-LD tramite l’hook displayHeader: rileva il tipo di controller, costruisci l’array dello schema e generalo con json_encode() racchiuso in un tag <script type="application/ld+json">.
Valida sempre i dati strutturati con il Rich Results Test di Google. Uno schema incompleto è peggio di nessuno schema — segnala bassa qualità.
Sitemap XML
PrestaShop include il modulo Google Sitemap (gsitemap). Configuralo in Moduli → Gestione moduli. Includi prodotti, categorie e pagine CMS. Escludi i fornitori a meno che non abbiano valore per il cliente finale. Il modulo genera sitemap.xml nella root, suddividendolo in più file per cataloghi di grandi dimensioni.
Automatizza la rigenerazione con un cron giornaliero che richiama modules/gsitemap/gsitemap-cron.php con la tua chiave di sicurezza. Invia a Google Search Console e monitora il report di copertura. Per il multistore, ogni negozio ottiene automaticamente la propria sitemap con il dominio di quel negozio.
Una sitemap è un suggerimento, non una garanzia. Includi solo URL canonici e indicizzabili che vuoi effettivamente posizionare. Niente prodotti disabilitati, niente pagine filtrate, niente URL del carrello o del checkout.
Robots.txt
Genera il robots.txt da Parametri del negozio → Traffico e SEO → Generazione file robots. L’impostazione predefinita blocca le directory admin ma non copre pattern importanti. Aggiungi questi oltre ai valori predefiniti:
# Block shopping flow (no SEO value)
Disallow: /cart
Disallow: /order
Disallow: /my-account
Disallow: /search
# Block filtered/sorted duplicates (crawl budget killers)
Disallow: /*?order=
Disallow: /*?q=
Disallow: /*&order=
Disallow: /*&q=
Sitemap: https://your-domain.com/sitemap.xml
Bloccare i parametri dei filtri impedisce il crawling di pagine duplicate combinatorie, risparmiando crawl budget per le pagine reali di prodotti e categorie.
Il robots.txt blocca il crawling, non l’indicizzazione. Se un sito esterno linka un URL bloccato, Google potrebbe comunque indicizzarlo senza eseguirne il crawling. Per una vera de-indicizzazione, usa i meta tagnoindexo gli headerX-Robots-Tag.
SEO delle immagini
Le immagini dei prodotti generano traffico significativo tramite Google Immagini. PrestaShop genera automaticamente i tag alt dal nome del prodotto e riscrive i nomi dei file in base a link_rewrite. Configura il template del testo alt in Parametri del negozio → Traffico e SEO — considera di aggiungere la categoria o il brand al pattern predefinito.
Formati moderni: PS 8+ supporta WebP, PS 9.x aggiunge AVIF. Abilita in Design → Impostazioni immagini, imposta la qualità a 80-85 e rigenera le miniature. Lazy loading: i temi moderni aggiungono loading="lazy" sotto la piega. Non applicare mai il lazy loading all’immagine principale del prodotto — è il tuo elemento LCP. Sitemap delle immagini: il modulo gsitemap può includere le immagini dei prodotti per aiutare Google a scoprire immagini non trovate tramite il crawling normale.
Core Web Vitals
I Core Web Vitals sono un fattore di ranking confermato. PrestaShop presenta pattern specifici che causano problemi.
CLS (Layout Shift) — Obiettivo: sotto 0,1
Cause comuni in PrestaShop: immagini senza attributi width/height, web font che causano FOUT (risolvere con font-display: swap + preload), banner caricati via JS che spostano il contenuto verso il basso (risolvere con min-height CSS), e barre per il consenso ai cookie inserite nel flusso del documento invece di usare posizionamento fixed/sticky.
LCP (Largest Contentful Paint) — Obiettivo: sotto 2,5s
Nelle pagine prodotto, l’LCP è l’immagine principale del prodotto. Comprimi in modo aggressivo, usa WebP/AVIF e fai il preload con <link rel="preload" as="image" fetchpriority="high">. Non applicare mai il lazy loading all’immagine LCP. Se il TTFB del server supera 1,5s, nessun trucco frontend ti salva — consulta la nostra guida alle prestazioni.
INP (Interaction to Next Paint) — Obiettivo: sotto 200ms
Ogni modulo agganciato a displayHeader/displayFooter aggiunge JS che blocca il thread principale. Gli script di terze parti (analytics, chat, pixel) dovrebbero essere caricati con defer/async o tramite Tag Manager. Misura i CWV con dati reali in PageSpeed Insights — se l’INP reale è pessimo ma quello di laboratorio è buono, gli script di terze parti sono la causa probabile.
Velocità della pagina per la SEO
Per un approfondimento sull’ottimizzazione del server, la cache e l’infrastruttura, consulta la nostra guida all’ottimizzazione delle prestazioni. Ecco i fattori di velocità critici per la SEO:
CCC (Combine, Compress, Cache)
Abilita tutte le opzioni in Parametri avanzati → Prestazioni. CCC riduce le richieste HTTP da 20-40 a 3-5 per CSS/JS, spesso risparmiando 1-2 secondi alla prima visita.
Caricamento dei font
Ospita i font in locale (elimina il DNS lookup verso fonts.googleapis.com), usa font-display: swap, fai il preload del font principale del body con <link rel="preload" as="font" type="font/woff2" crossorigin>, e fai il subset per rimuovere i range di caratteri non utilizzati.
Strategia JS dei moduli
I moduli dovrebbero registrare il JS con 'attributes' => 'defer' nelle loro chiamate registerJavascript(). Il JS con defer/async resta separato dai bundle CCC (per design) ma non blocca il rendering. Rivedi il codice dei moduli che usa la posizione bottom senza defer.
Linking interno
La struttura delle categorie È la tua architettura di linking interno. Ogni pagina di categoria è una potenziale pagina di posizionamento per un cluster di parole chiave.
Gerarchia delle categorie
Struttura le categorie per corrispondere all’intento di ricerca: “Scarpe” punta alla parola chiave generica, “Scarpe da Corsa Uomo” punta alla coda lunga. Una categoria piatta con 1.000 prodotti spreca l’opportunità di posizionarsi per decine di parole chiave specifiche. L’albero delle categorie di PrestaShop crea automaticamente la gerarchia di linking attraverso breadcrumb e menu di navigazione.
Breadcrumb
Assicurati che i breadcrumb appaiano su ogni tipo di pagina. Quando un prodotto esiste in più categorie, PrestaShop usa la categoria predefinita per il percorso del breadcrumb. Imposta la categoria predefinita di ogni prodotto sulla categoria rilevante più specifica.
Cross-Selling
Gli accessori e i prodotti correlati creano link interni tra le pagine prodotto — distribuendo link equity e aumentando il valore medio dell’ordine. Configura in Catalogo → Prodotti → Prodotti associati. Non lasciare che le pagine CMS diventino orfane — linka le guide alle taglie e le politiche di spedizione dalle descrizioni dei prodotti pertinenti.
Controllo dell’indicizzazione
Non tutte le pagine dovrebbero essere indicizzate. Permettere a Google di indicizzare migliaia di URL filtrati diluisce il crawl budget.
Navigazione a faccette
Una categoria con 5 colori, 8 taglie e 4 fasce di prezzo genera 160 URL filtrati — per categoria. Moltiplicalo per 100 categorie e ottieni 16.000 pagine quasi duplicate. La soluzione:
- Blocca i parametri dei filtri nel robots.txt (impedisce il crawling)
- Aggiungi
noindexalle pagine filtrate (impedisce l’indicizzazione in caso di crawling) - Canonicalizza le pagine filtrate verso la categoria base (consolida i segnali)
Eccezione: le combinazioni di filtri che corrispondono a query di ricerca reali (“portafogli in pelle nera”) dovrebbero essere indicizzate con metadati unici. Blocca tutto il resto.
Strategia di paginazione
- Canonical autoreferenziali su ogni pagina paginata.
- Noindex sulle pagine profonde: Le pagine dalla 4 in poi raramente hanno valore SEO. Mantienile followable così Google scopre i prodotti linkati.
- Aumenta i prodotti per pagina: Mostrare 48 invece di 12 per pagina riduce la paginazione da 17 pagine a 5, concentrando la link equity.
Errori SEO comuni in PrestaShop
Home page duplicata
La home page è spesso accessibile a /, /index.php, /en/ e /en/index.php. Reindirizza index.php alla root con un 301:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ / [R=301,L]
Normalizzazione WWW e HTTPS
Scegli www o non-www, scegli HTTPS. Reindirizza tutto il resto con un 301 a salto singolo. L’impostazione “Abilita SSL” di PrestaShop influisce solo sulla generazione dei link — devi aggiungere redirect a livello server nel file .htaccess. L’ordine conta: forza prima HTTPS, poi la normalizzazione www. Controlla le catene di redirect con curl -I -L — ogni salto aggiuntivo aggiunge latenza e disperde link equity.
Altri problemi frequenti
- Duplicati della pagina 1 delle categorie: Sia
/shoes/che/shoes/?page=1restituiscono 200. Reindirizza?page=1all’URL base. - Descrizioni prodotto copiate: Se importi le descrizioni del fornitore, lo fanno anche tutti gli altri. Scrivi descrizioni uniche almeno per il 20% dei tuoi prodotti principali per fatturato.
- Categorie vuote: Categorie attive con zero prodotti sono contenuto scarso. Interroga
ps_categorycon un JOIN e unCOUNTsups_category_productper trovarle e applicare noindex o rimuoverle. - Meta title mancanti: Interroga
ps_product_langper le righe dovemeta_titleè vuoto — questi prodotti si affidano al semplice nome del prodotto come tag title.
Checklist di audit SEO
Eseguila trimestralmente, o dopo ogni modifica importante al negozio.
Fondamenta tecniche
- URL amichevoli abilitati — nessun URL
index.php?id_product=su Google. - SSL abilitato e forzato — tutti i redirect HTTP 301 verso HTTPS.
- Normalizzazione WWW — redirect a salto singolo, nessuna catena.
- Robots.txt blocca admin, carrello, checkout, ricerca e parametri dei filtri.
- Sitemap XML generata, aggiornata, inviata a Search Console.
On-Page
- Meta title unici su ogni prodotto e categoria, sotto i 60 caratteri.
- Meta description uniche o intenzionalmente vuote — nessun duplicato standard.
- Un solo H1 per pagina, coerente con l’argomento della pagina.
- Tutte le immagini dei prodotti hanno testo alt descrittivo.
- Tag canonical presenti su ogni pagina, corretti con la paginazione.
- Tag hreflang corretti se multilingua: bidirezionali, x-default presente.
Dati strutturati
- Lo schema Product si valida nel Rich Results Test con name, image, price, availability.
- Schema BreadcrumbList presente sulle pagine prodotto e categoria.
- Schema Organization presente a livello di sito.
Crawlabilità
- Report Copertura di Google Search Console — nessun errore imprevisto o pagina esclusa.
- Gli URL filtrati non stanno esplodendo nell’indice di Google.
- Nessuna categoria vuota indicizzata.
- Nessun soft 404 (prodotti esauriti che restituiscono 200 con contenuto vuoto).
Prestazioni
- Core Web Vitals superati nei dati reali (Search Console → Core Web Vitals).
- Nessun errore di usabilità mobile.
- Pagine prodotto sotto i 3s di tempo di caricamento. Consulta la nostra guida alle prestazioni.
Strumenti consigliati
Google Search Console (indicizzazione, CWV, prestazioni), Screaming Frog (crawling del sito, gratuito fino a 500 URL), PageSpeed Insights (CWV dati di laboratorio + reali), Rich Results Test (validazione dati strutturati), Ahrefs Webmaster Tools (audit tecnico gratuito + backlink).
La SEO non è qualcosa da impostare e dimenticare. Gli aggiornamenti del tema rompono gli schema, i nuovi moduli creano loop di redirect, le importazioni generano metadati duplicati. Un controllo trimestrale di 30 minuti intercetta i problemi prima che ti costino traffico.
More guides available
Browse our knowledge base for more practical PrestaShop tutorials, or reach out if you need help.