Scanner SEO professionale per PrestaShop con fix AI-powered (DeepSeek/GPT/Claude), export Excel e API integration - GUI e CLI
Project description
PyPrestaScan 🔍
Scanner SEO professionale per PrestaShop con sistema di fix automatici
PyPrestaScan è uno strumento open-source avanzato per l'analisi SEO completa di siti PrestaShop. Scansiona il tuo e-commerce, identifica problemi SEO critici e genera suggerimenti automatici per risolverli.
📦 Installazione rapida: pip install 'pyprestascan[gui]'
👨💻 Autore
Andrea Piani Full-Stack Developer & SEO Specialist
🔗 Link: linktr.ee/andreapianidev
Progetto open-source in continuo miglioramento! Contributi, feedback e segnalazioni sono sempre benvenuti. 🚀
📋 Roadmap: ROADMAP.md - Piano sviluppo v1.2.0 → v2.0.0 🤝 Contributing: CONTRIBUTING.md - Guida per contributor
🎯 Caratteristiche Principali
📊 Analisi SEO Completa
- Crawling intelligente con supporto sitemap.xml e robots.txt
- Rilevamento automatico di prodotti, categorie, CMS e filtri faceted
- Analisi approfondita di meta tag, title, headings, canonical, hreflang
- Controllo immagini con rilevamento ALT mancanti, vuoti o generici
- Rilevamento duplicati tramite content hash
- Scoring SEO per ogni pagina con severity (CRITICAL, WARNING, INFO)
🔧 Sistema di Fix Suggeriti + AI-Powered (v1.1.0 🆕)
- 🤖 Generazione AI intelligente con DeepSeek, OpenAI GPT o Anthropic Claude
- Meta description contestuali generate dall'AI invece di template generici
- Batch processing: 20 prodotti in 1 chiamata = -30% token
- Costi ultra-bassi: ~$0.02 per 500 prodotti (DeepSeek)
- Fallback automatico: se AI fallisce, usa template standard
- Suggerimenti intelligenti per:
- 🎯 Meta description mancanti o non ottimizzate (AI-powered!)
- 📝 Title troppo corti o troppo lunghi
- 🖼️ ALT text mancanti per le immagini
- 🔗 Canonical URL mancanti
- 📋 H1 multipli o mancanti
- 🌍 Hreflang mancanti
- Confidence scoring (0-100%) per ogni fix suggerito
- Export SQL per fix automatizzabili
- Export CSV con dettagli completi
💡 AI Fix: Esempio Reale
Template Standard:
"Scarpe Nike Air Zoom - Acquista online su myshop.it"
AI DeepSeek (v1.1.0):
"Scarpe Nike Air Zoom: ammortizzazione reattiva per running. Scopri la collezione 2024 con tecnologia React Foam!"
Differenza: Contestuale, benefici evidenziati, CTA naturale. Confidence: 0.95 vs 0.70. Costo: $0.00004 per prodotto.
🎨 Interfaccia Grafica Moderna
- GUI intuitiva con Qt/PySide6
- 4 Tab principali:
- ⚙️ Configurazione: setup URL, limiti, concorrenza
- 📊 Progress & Log: monitoraggio real-time con log dettagliati
- 📈 Risultati: statistiche, tabella issues filtrabili
- 🔧 Fix Suggeriti: visualizza e gestisci i fix automatici
- Log in tempo reale durante la scansione
- Contatori live (pagine crawlate, issues trovati, immagini senza ALT)
- Filtri avanzati per issues e fix
- Export multipli (CSV, JSON, HTML, SQL)
📈 Report Dettagliati
- Report HTML interattivo con grafici e tabelle
- Export CSV/JSON per analisi dati
- Export SQL per applicazione fix diretta al database
- Visualizzazione issues per severity e tipologia
- Dashboard statistiche complete
⚡ Performance & Scalabilità
- Crawling asincrono con concorrenza configurabile (default: 20 worker)
- Rate limiting automatico per non sovraccaricare il server
- Database SQLite per gestione efficiente dei dati
- Resume support per riprendere scansioni interrotte
- Gestione memoria ottimizzata per siti con migliaia di pagine
🚀 Installazione
Requisiti
- Python 3.8+ (3.12+ raccomandato)
- pip
📦 Installazione da PyPI (Consigliata)
# Installazione base (CLI)
pip install pyprestascan
# Con interfaccia grafica (NOTA: su zsh/macOS usa le virgolette)
pip install 'pyprestascan[gui]'
# Avvia la GUI
pyprestascan-gui
# Oppure usa la CLI
pyprestascan scan https://tuosito.com/it/ --max-urls 1000
🔧 Installazione da sorgenti (Development)
# Clona il repository
git clone https://github.com/andreapianidev/pyprestascan.git
cd pyprestascan
# Installa in modalità development (NOTA: su zsh/macOS usa le virgolette)
pip install -e '.[gui]'
# Avvia l'interfaccia grafica
python -m pyprestascan.gui.main_window
# Oppure usa la CLI
python -m pyprestascan scan https://tuosito.com/it/ --max-urls 1000
📖 Utilizzo
Interfaccia Grafica (Consigliata)
-
Avvia la GUI:
# Se installato da PyPI pyprestascan-gui # Oppure se installato da sorgenti python -m pyprestascan.gui.main_window
-
Configura la scansione:
- Inserisci l'URL del tuo sito PrestaShop
- Imposta il numero massimo di pagine da analizzare
- Configura concorrenza e altre opzioni avanzate
-
Avvia la scansione:
- Clicca su "▶️ Avvia Scansione"
- Monitora il progresso in tempo reale nel tab "Progress & Log"
-
Analizza i risultati:
- Vai al tab "📊 Risultati" per vedere gli issues rilevati
- Filtra per severity (Critical, Warning, Info)
- Esporta in CSV per analisi dettagliate
-
Genera e applica fix:
- Vai al tab "🔧 Fix Suggeriti"
- Clicca su "Genera Fix Suggeriti"
- Visualizza i fix con confidence score
- Esporta SQL per applicarli direttamente al database PrestaShop
🤖 Utilizzo AI Fix (v1.1.0+)
PyPrestaScan può usare AI generativa per creare meta description di qualità superiore:
-
Registrati su un provider AI (raccomandato: DeepSeek):
-
Configura in PyPrestaScan:
- Vai in tab Configurazione → sezione "AI Fix Avanzati (Opzionale)"
- Spunta "✨ Abilita generazione AI per Fix Suggeriti"
- Seleziona provider (es: DeepSeek)
- Inserisci la tua API key
-
Genera fix intelligenti:
- Esegui scansione normalmente
- Tab Fix Suggeriti → clicca "Genera Fix Suggeriti"
- L'AI creerà meta description contestuali invece di template generici
- Costo stimato: ~$0.02 per 500 prodotti (DeepSeek)
💰 Confronto Costi AI
| Provider | Costo per 1M token | Costo 500 prodotti | Qualità |
|---|---|---|---|
| DeepSeek 🏆 | $0.14 | $0.02 | ⭐⭐⭐⭐⭐ |
| OpenAI GPT-4o-mini | $0.15 | $0.03 | ⭐⭐⭐⭐⭐ |
| Claude Haiku | $0.80 | $0.15 | ⭐⭐⭐⭐⭐ |
Risparmio vs lavoro manuale: 8 ore ($240) → 30 secondi ($0.02) = 99.99% di risparmio!
📖 Documentazione completa: Leggi AI_INTEGRATION.md per guide dettagliate, troubleshooting e best practices.
Command Line Interface (CLI)
# Scansione base (se installato da PyPI)
pyprestascan scan https://tuosito.com/it/
# Oppure se installato da sorgenti
python -m pyprestascan scan https://tuosito.com/it/
# Scansione con opzioni avanzate
pyprestascan scan https://tuosito.com/it/ \
--max-urls 5000 \
--concurrency 30 \
--timeout 20 \
--project mio-progetto \
--export-dir ./reports
# Riprendi scansione interrotta
pyprestascan scan https://tuosito.com/it/ --resume
# Debug mode
python -m pyprestascan scan https://tuosito.com/it/ --debug
# Quiet mode (solo errori)
python -m pyprestascan scan https://tuosito.com/it/ --quiet
📋 Regole SEO Implementate
PyPrestaScan controlla automaticamente oltre 20 regole SEO PrestaShop-specific:
🔴 Critical Issues
TITLE_MISSING: Title tag mancanteTITLE_TOO_SHORT: Title < 10 caratteriTITLE_TOO_LONG: Title > 60 caratteriMETA_DESCRIPTION_MISSING: Meta description mancanteH1_MISSING: Tag H1 mancanteH1_MULTIPLE: Più di un H1 nella paginaCANONICAL_MISSING: Canonical URL mancantePRODUCT_NO_JSONLD: Prodotto senza JSON-LD
🟡 Warning Issues
META_DESCRIPTION_TOO_SHORT: Description < 50 caratteriMETA_DESCRIPTION_TOO_LONG: Description > 160 caratteriIMAGES_MISSING_ALT: Immagini senza attributo ALTIMAGES_EMPTY_ALT: Immagini con ALT vuotoCART_INDEXABLE: Carrello indicizzabile (bad practice)FACETED_NO_CANONICAL: Filtri faceted senza canonical
🔵 Info Issues
IMAGES_GENERIC_ALT: ALT text generico ("image", "photo", etc.)NO_HREFLANG: Hreflang mancante (siti multilingua)SLOW_TTFB: Time To First Byte > 1000ms
🔧 Sistema di Fix Automatici
Tipi di Fix Supportati
-
Meta Description Fixer
- Genera description ottimizzate 120-160 caratteri
- Basate su title e tipologia pagina
- Confidence: 50-90% (dipende dalla qualità del title)
-
Title Fixer
- Ottimizza lunghezza title (10-60 caratteri)
- Tronca title lunghi preservando il significato
- Espande title corti aggiungendo brand
- Confidence: 60-90%
-
ALT Text Fixer
- Suggerisce ALT text basato su contesto pagina
- Richiede revisione manuale (confidence: 50%)
- Template-based per prodotti/categorie
-
Canonical Fixer
- Genera canonical URL auto-referenziali
- Rimuove parametri query non necessari
- Confidence: 90% (alta affidabilità)
Come Usare i Fix
-
Genera fix dopo la scansione:
- Tab "Fix Suggeriti" → "Genera Fix Suggeriti"
- Attendi alcuni secondi per la generazione
-
Visualizza i fix:
- Tabella con tutti i fix ordinati per severity e confidence
- Filtri per status, tipo, automatizzabili
-
Dettagli fix:
- Clicca sull'icona 👁️ per vedere:
- Valore attuale vs suggerito
- Spiegazione del problema
- Query SQL per applicare il fix
- Clicca sull'icona 👁️ per vedere:
-
Esporta ed applica:
- Export CSV: per revisione manuale
- Export SQL: script pronto per l'esecuzione
- ⚠️ Fai sempre un backup prima di applicare le query SQL!
📁 Struttura File Export
Dopo ogni scansione, PyPrestaScan genera:
report/
├── crawl.db # Database SQLite con tutti i dati
├── report.html # Report interattivo con grafici
├── pages.csv # Dettagli di tutte le pagine
├── issues.csv # Tutti gli issues rilevati
├── images_missing_alt.csv # Immagini con problemi ALT
├── duplicates.csv # Contenuti duplicati
├── fixes.csv # Fix suggeriti (dopo generazione)
└── fixes.sql # Script SQL per fix automatici
🛠️ Configurazione Avanzata
Parametri CLI Principali
| Parametro | Default | Descrizione |
|---|---|---|
--url |
richiesto | URL base del sito da analizzare |
--max-urls |
10000 | Numero massimo di URL da crawlare |
--concurrency |
20 | Richieste HTTP parallele (1-100) |
--delay |
0 | Delay minimo tra richieste (ms) |
--timeout |
15 | Timeout richieste HTTP (secondi) |
--depth |
∞ | Profondità massima crawling |
--project |
default | Nome progetto per database |
--export-dir |
./report | Directory output report |
Filtri URL Avanzati
# Include solo categorie e prodotti
python run_cli.py scan https://shop.com \
--include "/category/.+" \
--include "/.*-p\\d+\\.html"
# Escludi parametri di ordinamento
python run_cli.py scan https://shop.com \
--exclude "\\?.*orderby=" \
--exclude "\\?.*selected_filters="
🤝 Contribuire
PyPrestaScan è un progetto open-source e in continuo miglioramento!
Contributi, segnalazioni bug e feature request sono sempre benvenuti:
- Fai fork del repository
- Crea un branch per la tua feature (
git checkout -b feature/AmazingFeature) - Commit delle modifiche (
git commit -m 'Add some AmazingFeature') - Push al branch (
git push origin feature/AmazingFeature) - Apri una Pull Request
Roadmap Futura
- Integrazione API PrestaShop per applicazione fix automatica
- Supporto multi-lingua migliorato
- Analisi performance (Core Web Vitals)
- Monitoraggio scheduled con notifiche
- Plugin per PrestaShop back-office
- AI-powered content suggestions
- Report PDF professionali
- Export Excel nativo
🚨 Risoluzione Problemi
Problemi Comuni
❌ "Bloccato da robots.txt"
# Verifica robots.txt manualmente
curl https://tuo-sito.com/robots.txt
⚡ Crawling lento
# Aumenta concorrenza (attenzione al server)
python run_cli.py scan https://sito.com --concurrency 50
# Riduci delay se robots.txt lo permette
python run_cli.py scan https://sito.com --delay 0
💾 Errori di memoria
# Riduci concorrenza per grandi siti
python run_cli.py scan https://sito.com --concurrency 10 --max-urls 20000
Log e Debug
# Debug completo
python run_cli.py scan https://sito.com --debug
# Log minimal
python run_cli.py scan https://sito.com --quiet
🔒 Sicurezza e Privacy
Responsabilità
- Rispetta robots.txt e ToS dei siti
- Non fare overload sui server di destinazione
- Autentica appropriatamente per siti privati
- Proteggi credenziali in ambienti condivisi
Rate Limiting Responsabile
# Per siti piccoli/medi
python run_cli.py scan https://shop.com --delay 100 --concurrency 20
# Per siti grandi/condivisi
python run_cli.py scan https://shop.com --delay 500 --concurrency 10
🤖 Integrazione e API
Script Python
import asyncio
from pyprestascan.cli import CrawlConfig, CliContext
from pyprestascan.core.crawler import PyPrestaScanner
async def custom_scan():
config = CrawlConfig(
base_url="https://myshop.com",
max_urls=5000,
concurrency=20
)
cli_context = CliContext(debug=False, quiet=False, no_color=False)
scanner = PyPrestaScanner(config, cli_context)
return await scanner.run()
# Esegui
asyncio.run(custom_scan())
Export Dati
import pandas as pd
# Carica dati da CSV
pages_df = pd.read_csv('report/pages.csv')
issues_df = pd.read_csv('report/issues.csv')
# Analisi personalizzate
low_score_pages = pages_df[pages_df['score'] < 50]
critical_issues = issues_df[issues_df['severity'] == 'CRITICAL']
📄 Licenza
Questo progetto è distribuito con licenza MIT - vedi il file LICENSE per i dettagli.
🙏 Ringraziamenti
- PrestaShop Community per la fantastica piattaforma e-commerce
- PySide6 per il framework GUI
- httpx per le richieste HTTP async
- BeautifulSoup4 per il parsing HTML
- Tutti i contributori che aiutano a migliorare il progetto
📞 Supporto
Per domande, bug o feature request:
- 🐛 Issues GitHub: github.com/andreapianidev/PyPrestaScan/issues
- 💬 Discussioni: github.com/andreapianidev/PyPrestaScan/discussions
- 🔗 Contatto diretto: linktr.ee/andreapianidev
⭐ Star History
Se PyPrestaScan ti è stato utile, considera di lasciare una ⭐ su GitHub!
Made with ❤️ by Andrea Piani for the PrestaShop Community
Progetto open-source in continuo miglioramento
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyprestascan-1.7.3.tar.gz.
File metadata
- Download URL: pyprestascan-1.7.3.tar.gz
- Upload date:
- Size: 132.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74339e0ea4ea61b8560f669e749c7434fb44cca716a201406f528c7e0e5f708a
|
|
| MD5 |
8edbad89356bbbbab704b01be9aa40fc
|
|
| BLAKE2b-256 |
07d1e3c2d691aff78bfbd8042dbeba8bbf55af7a674053e0be4b6487b38b8118
|
Provenance
The following attestation bundles were made for pyprestascan-1.7.3.tar.gz:
Publisher:
publish.yml on andreapianidev/pyprestascan
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyprestascan-1.7.3.tar.gz -
Subject digest:
74339e0ea4ea61b8560f669e749c7434fb44cca716a201406f528c7e0e5f708a - Sigstore transparency entry: 628742969
- Sigstore integration time:
-
Permalink:
andreapianidev/pyprestascan@12bae52f993272f29b7d534c6a7c28f75032eab1 -
Branch / Tag:
refs/tags/v1.7.3 - Owner: https://github.com/andreapianidev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@12bae52f993272f29b7d534c6a7c28f75032eab1 -
Trigger Event:
release
-
Statement type:
File details
Details for the file pyprestascan-1.7.3-py3-none-any.whl.
File metadata
- Download URL: pyprestascan-1.7.3-py3-none-any.whl
- Upload date:
- Size: 123.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
399c4339699c563e096c0037957d3d16d7a90edee01a3b6b2610a19c27025673
|
|
| MD5 |
ea3d4801f89954d776f6267b1dceba3f
|
|
| BLAKE2b-256 |
346f64aefba98ef63aa1899614dbf55cef759c50cfce2d973dd6f279fa5b57b2
|
Provenance
The following attestation bundles were made for pyprestascan-1.7.3-py3-none-any.whl:
Publisher:
publish.yml on andreapianidev/pyprestascan
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyprestascan-1.7.3-py3-none-any.whl -
Subject digest:
399c4339699c563e096c0037957d3d16d7a90edee01a3b6b2610a19c27025673 - Sigstore transparency entry: 628742972
- Sigstore integration time:
-
Permalink:
andreapianidev/pyprestascan@12bae52f993272f29b7d534c6a7c28f75032eab1 -
Branch / Tag:
refs/tags/v1.7.3 - Owner: https://github.com/andreapianidev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@12bae52f993272f29b7d534c6a7c28f75032eab1 -
Trigger Event:
release
-
Statement type: