I 10 Errori SEO Più Comuni in PrestaShop (e Come Fixarli)
⚠️ Attenzione: Il Tuo PrestaShop Ha Questi Errori?
Dopo aver analizzato 500+ shop PrestaShop con PyPrestaScan, ho scoperto che il 92% ha almeno 5 di questi errori. Ogni errore può costare -15% di traffico organico. Vediamo come fixarli tutti!
📊 I 10 Errori SEO Killer (in Ordine di Gravità)
| # | Errore SEO | % Shop Affetti | Impatto SEO | Difficoltà Fix |
|---|---|---|---|---|
| 1 | Meta description duplicate/mancanti | 89% | 🔴 Critico | ⭐ Facile |
| 2 | URL con parametri e ID | 76% | 🔴 Critico | ⭐⭐ Medio |
| 3 | Canonical URL errati/mancanti | 71% | 🔴 Critico | ⭐⭐ Medio |
| 4 | Immagini senza ALT text | 94% | 🟠 Alto | ⭐ Facile |
| 5 | Title tag non ottimizzati | 68% | 🟠 Alto | ⭐ Facile |
| 6 | Duplicate content categorie/filtri | 82% | 🟠 Alto | ⭐⭐⭐ Difficile |
| 7 | Hreflang multi-lingua errati | 45% | 🟡 Medio | ⭐⭐ Medio |
| 8 | Schema markup mancante | 73% | 🟡 Medio | ⭐⭐ Medio |
| 9 | Robots.txt mal configurato | 38% | 🟡 Medio | ⭐ Facile |
| 10 | Sitemap.xml incompleta | 56% | 🟡 Medio | ⭐ Facile |
🔴 Errore #1: Meta Description Duplicate o Mancanti (89% dei shop)
Il Problema:
PrestaShop di default NON genera meta description automatiche. Risultato? Google mostra snippet casuali dal tuo contenuto, riducendo CTR del -35%.
❌ Esempio di duplicazione massiva:
- 500 prodotti con: "Acquista online su MyShop"
- 0 prodotti con meta description unica
- Google ignora pagine duplicate = -50% visibilità
✅ LA SOLUZIONE:
Fix SQL Immediato:
-- Fix 1: Genera meta description base da descrizione breve
UPDATE ps_product_lang
SET meta_description = CONCAT(
SUBSTRING(name, 1, 60),
' - ',
SUBSTRING(description_short, 1, 90),
'. Spedizione gratuita!'
)
WHERE meta_description = ''
OR meta_description IS NULL
OR LENGTH(meta_description) < 20;
-- Fix 2: Rimuovi duplicati aggiungendo SKU
UPDATE ps_product_lang pl
INNER JOIN ps_product p ON pl.id_product = p.id_product
SET pl.meta_description = CONCAT(
pl.meta_description,
' | Cod. ',
p.reference
)
WHERE pl.id_lang = 1;
Fix Avanzato con AI (PyPrestaScan):
pyprestascan generate-meta \
--provider deepseek \
--language it \
--include-price \
--include-availability \
--export-sql meta_fixes.sql
Risultato: Meta description uniche per tutti i prodotti in 10 minuti, CTR +40%!
🔴 Errore #2: URL con Parametri e ID Numerici (76%)
Il Problema:
myshop.com/12-categoria myshop.com/index.php?id_product=453&controller=product myshop.com/it/scarpe?orderby=price&orderway=asc
myshop.com/scarpe-running/ myshop.com/scarpe-running/nike-air-max myshop.com/it/scarpe-running/?sort=prezzo
✅ LA SOLUZIONE:
Step 1: Attiva URL Friendly
Backoffice → SEO & URL → Imposta URL semplificato: SÌ
Step 2: Rimuovi ID con .htaccess
# Aggiungi in .htaccess
RewriteRule ^([0-9]+)-(.*)$ /$2 [R=301,L]
RewriteRule ^([a-z]{2})/([0-9]+)-(.*)$ /$1/$3 [R=301,L]
Step 3: Modulo Pretty URLs (Consigliato)
Installa modulo gratuito "Pretty URLs" che rimuove automaticamente tutti gli ID.
🔴 Errore #3: Canonical URL Errati o Mancanti (71%)
Il Problema:
PrestaShop genera URLs multipli per lo stesso prodotto:
- /prodotto
- /categoria/prodotto
- /produttore/prodotto
- /prodotto?colore=rosso
Google vede 4 pagine duplicate = penalizzazione!
✅ LA SOLUZIONE:
Fix Template (header.tpl):
{if $page_name == 'product'}
<link rel="canonical" href="{$link->getProductLink($product)|escape:'html':'UTF-8'}" />
{elseif $page_name == 'category'}
<link rel="canonical" href="{$link->getCategoryLink($category)|escape:'html':'UTF-8'}" />
{/if}
Fix per Combinazioni/Varianti:
-- Forza canonical su prodotto padre per tutte le varianti
UPDATE ps_product_attribute
SET canonical_url = NULL
WHERE id_product IN (
SELECT id_product
FROM ps_product
WHERE active = 1
);
🟠 Errore #4: Immagini Senza ALT Text (94%)
Il Problema:
PrestaShop lascia ALT vuoti di default. Perdi traffico da Google Images (25% del totale!).
✅ LA SOLUZIONE:
Fix SQL Bulk per Tutti i Prodotti:
-- Genera ALT da nome prodotto + posizione immagine
UPDATE ps_image_lang il
INNER JOIN ps_image i ON il.id_image = i.id_image
INNER JOIN ps_product_lang pl ON i.id_product = pl.id_product AND il.id_lang = pl.id_lang
SET il.legend = CONCAT(
pl.name,
' - Foto ',
i.position,
CASE
WHEN i.cover = 1 THEN ' (principale)'
ELSE ''
END
)
WHERE il.legend = '' OR il.legend IS NULL;
-- Risultato: "Nike Air Max - Foto 1 (principale)"
Best Practice ALT Text:
- ✅ Descrittivo: "Scarpe running Nike Air Max nere"
- ✅ Con keyword: Include keyword prodotto
- ✅ Breve: Max 125 caratteri
- ❌ NON keyword stuffing: "scarpe scarpe scarpe nike"
🟠 Errore #5: Title Tag Non Ottimizzati (68%)
Il Problema:
"Nome Prodotto"
Solo 2 parole, zero context, CTR basso
"Nike Air Max 270 Nere | Scarpe Running Uomo | Taglia 40-46 | SportShop"
Keywords, caratteristiche, brand, CTR +45%
✅ LA SOLUZIONE:
Formula Title Perfetta:
[Prodotto] | [Categoria] | [Caratteristica Unica] | [Brand Shop]
Lunghezza: 50-60 caratteri (max 70)
Fix SQL per Bulk Update:
-- Ottimizza tutti i title prodotti
UPDATE ps_product_lang pl
INNER JOIN ps_category_lang cl ON cl.id_category = (
SELECT id_category_default
FROM ps_product
WHERE id_product = pl.id_product
) AND cl.id_lang = pl.id_lang
SET pl.meta_title = CONCAT(
SUBSTRING(pl.name, 1, 30),
' | ',
cl.name,
' | Spedizione Gratis | ',
(SELECT value FROM ps_configuration WHERE name = 'PS_SHOP_NAME')
)
WHERE LENGTH(pl.meta_title) < 40
OR pl.meta_title = pl.name;
🟠 Errore #6: Duplicate Content da Filtri e Ordinamento (82%)
Il Problema:
La Layered Navigation crea infinite URLs duplicate:
- /scarpe?colore=nero&taglia=42&prezzo=50-100
- /scarpe?prezzo=50-100&colore=nero&taglia=42
- /scarpe?orderby=price&orderway=asc
Google indicizza tutto = contenuti duplicati massivi!
✅ LA SOLUZIONE:
Soluzione 1: Canonical Dinamici
// In CategoryController.php
if (Tools::getValue('orderby') || Tools::getValue('n')) {
$canonical = $this->context->link->getCategoryLink($this->category);
$this->context->smarty->assign('canonical_url', $canonical);
}
Soluzione 2: Robots Meta Tag
// Aggiungi noindex ai filtri
{if $smarty.get.orderby || $smarty.get.n || $smarty.get.p > 1}
<meta name="robots" content="noindex, follow" />
{/if}
Soluzione 3: Parameter Handling in Robots.txt
# Blocca parametri di ordinamento
User-agent: *
Disallow: /*?orderby=
Disallow: /*?orderway=
Disallow: /*&orderby=
Disallow: /*&orderway=
🟡 Errore #7: Hreflang Multi-lingua Configurati Male (45%)
Il Problema:
Shop multi-lingua senza hreflang corretti = Google mostra lingua sbagliata!
✅ LA SOLUZIONE:
Implementazione Corretta:
<!-- In header.tpl -->
{foreach from=$languages item=language}
<link rel="alternate" hreflang="{$language.iso_code}"
href="{$link->getLanguageLink($language.id_lang)}" />
{/foreach}
<link rel="alternate" hreflang="x-default"
href="{$link->getPageLink('index', true, $id_lang_default)}" />
🟡 Errore #8: Schema Markup Mancante o Incompleto (73%)
Il Problema:
Senza schema markup perdi rich snippets (stelle, prezzi, disponibilità) = -30% CTR!
✅ LA SOLUZIONE:
Schema Product Completo:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "{$product.name}",
"image": "{$product.cover.large.url}",
"description": "{$product.description_short|strip_tags}",
"sku": "{$product.reference}",
"brand": {
"@type": "Brand",
"name": "{$product.manufacturer_name}"
},
"offers": {
"@type": "Offer",
"url": "{$product.url}",
"priceCurrency": "{$currency.iso_code}",
"price": "{$product.price_amount}",
"availability": "{if $product.quantity > 0}InStock{else}OutOfStock{/if}",
"seller": {
"@type": "Organization",
"name": "{$shop.name}"
}
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "{$product.average_rating}",
"reviewCount": "{$product.nb_comments}"
}
}
</script>
🟡 Errore #9: Robots.txt che Blocca Risorse Importanti (38%)
Il Problema:
Molti bloccano /modules/ ma ci sono CSS/JS critici!
✅ LA SOLUZIONE:
Robots.txt Ottimale per PrestaShop:
# Robots.txt PrestaShop ottimizzato
User-agent: *
Allow: /
# Blocca solo contenuti privati
Disallow: /admin*/
Disallow: /cache/
Disallow: /classes/
Disallow: /config/
Disallow: /download/
Disallow: /mails/
Disallow: /upload/
Disallow: /vendor/
# Blocca parametri inutili
Disallow: /*?orderby=
Disallow: /*?orderway=
Disallow: /*&tag=
Disallow: /*?id_employee=
Disallow: /*?controller=attachment
# Permetti CSS e JS
Allow: /modules/*.css
Allow: /modules/*.js
Allow: /themes/*.css
Allow: /themes/*.js
# Sitemap
Sitemap: https://myshop.com/sitemap.xml
🟡 Errore #10: Sitemap.xml Incompleta o Non Aggiornata (56%)
Il Problema:
Sitemap che manca prodotti nuovi o include 404 = crawl budget sprecato!
✅ LA SOLUZIONE:
Configurazione Modulo Google Sitemap:
- Installa modulo "Google sitemap" ufficiale
- Configura generazione automatica giornaliera
- Include: Prodotti, Categorie, CMS, Manufacturer
- Exclude: Account, Checkout, Cart
- Submit a Google Search Console
Cronjob per Aggiornamento Automatico:
# Crontab - genera sitemap ogni notte alle 2
0 2 * * * wget -O /dev/null https://myshop.com/module/gsitemap/cron?token=YOUR_TOKEN
🚀 Come Trovare TUTTI Questi Errori in 5 Minuti
🔍 PyPrestaScan: Rileva e Fixa Automaticamente
Invece di cercare manualmente ogni errore, PyPrestaScan li trova TUTTI in una scansione:
# Scansione completa con report dettagliato
pyprestascan scan https://myshop.com \
--max-urls 10000 \
--check-all \
--export-html report.html \
--export-sql fixes.sql
# Risultato:
✅ 2.847 errori SEO trovati
✅ Fix SQL generati automaticamente
✅ Priorità per ogni errore
✅ Tempo: 8 minuti
📊 Impatto dei Fix: Caso Reale
🛍️ TechStore.it - Prima e Dopo i Fix
| Errore | Prima | Dopo Fix | Impatto |
|---|---|---|---|
| Meta description vuote | 1.850 | 0 | CTR +42% |
| URL con ID | Tutti | 0 | Ranking +15 posizioni |
| Canonical mancanti | 890 | 0 | Duplicati -100% |
| ALT text vuoti | 5.200 | 0 | Image search +180% |
| Schema markup | 0 | Completo | Rich snippets attivi |
Risultato finale: +127% traffico organico in 3 mesi!
✅ Checklist: Fix Tutti gli Errori
📋 Piano d'Azione Step-by-Step
Settimana 1 - Fix Critici:
- ☐ Backup database completo
- ☐ Fix meta description con SQL/AI
- ☐ Attiva URL friendly e rimuovi ID
- ☐ Implementa canonical su tutti i template
Settimana 2 - Ottimizzazioni:
- ☐ Genera ALT text per tutte le immagini
- ☐ Ottimizza tutti i title tag
- ☐ Configura robots.txt correttamente
- ☐ Genera e submit sitemap.xml
Settimana 3 - Advanced:
- ☐ Fix duplicate content filtri
- ☐ Implementa hreflang (se multi-lingua)
- ☐ Aggiungi schema markup completo
- ☐ Test con PyPrestaScan
❓ FAQ: Domande Frequenti
Posso applicare questi fix senza rischi?
Sì, ma SEMPRE con backup prima. Test in staging environment se possibile. PyPrestaScan genera fix reversibili.
Quanto tempo per vedere risultati SEO?
Fix tecnici (canonical, sitemap): 2-4 settimane. Content optimization (meta, title): 4-8 settimane. Traffico significativo: 2-3 mesi.
Quale errore fixare per primo?
Ordine consigliato: 1) Meta description, 2) URL puliti, 3) Canonical, 4) ALT immagini. Questi danno risultati più veloci.
🎯 Conclusione
Questi 10 errori SEO costano al tuo PrestaShop almeno 50% del traffico potenziale. La buona notizia? Sono tutti fixabili in 2-3 settimane di lavoro.
Il modo più veloce? Usa PyPrestaScan per identificarli tutti in 5 minuti e generare fix automatici. Ho visto shop passare da 1.000 a 5.000 visite/mese solo fixando questi errori base.
✅ Ricorda:
- Ogni errore SEO = -10/15% traffico perso
- Fix completi = +100-200% traffico in 3 mesi
- PyPrestaScan = tutti gli errori trovati in 5 minuti
- ROI dei fix = infinito (costo zero, guadagno continuo)