/docs
Documentazione di pSEO Wizard
Tutto quello che serve per passare dal tuo sito a pagine pubblicate: come funziona la procedura guidata, come mettere le pagine sul tuo sito senza scrivere codice e cosa fare se qualcosa non va.
Ultimo aggiornamento: settembre 2026
/how-it-works
Come funziona
La procedura ha cinque passaggi. Puoi tornare indietro e modificarne uno qualsiasi prima di pagare.
- 01
Incolla il tuo sito
Leggiamo la tua home page e alcune pagine chiave (servizi, prezzi, menu, chi siamo, contatti) e riconosciamo il tipo di attività. Aggiungi le informazioni chiave che vuoi in ogni pagina.
- 02
Scegli uno schema
Scegli la forma delle ricerche, per esempio “{Servizio} a {Città}” o “{Prodotto} per {Pubblico}”, e un modello di pagina.
- 03
Aggiungi i valori
Elenca i servizi, le città o i tipi di pubblico da combinare: ogni combinazione diventa una pagina. Se punti a dei luoghi, controlliamo che abbiano senso rispetto a come servi i clienti.
- 04
Genera
Genera prima la tua pagina gratuita. Quando ti convince, paga il resto (minimo 10 pagine) e le pagine vengono scritte una alla volta.
- 05
Pubblica o scarica
Invia le pagine a WordPress, Shopify, Webflow o WooCommerce, oppure scaricale come file HTML pronti da caricare.
/html-export
Scaricare le pagine
Al passaggio 5, Scarica pacchetto ti dà un file ZIP con tutto il necessario per ospitare le pagine ovunque:
dist/Un file HTML pronto per ogni pagina, con lo stile incluso, così si vede bene senza altri file.dist/index.htmlUn semplice elenco di tutte le pagine, con i link.sitemap.xmlUna sitemap da inviare in Google Search Console.data/Le stesse pagine in JSON (titolo, slug, meta description e HTML), per gli sviluppatori.
Per metterle online
- Decomprimi il file.
- Carica i file di dist/ sul tuo hosting, meglio in una cartella /blog, per esempio con il file manager del tuo hosting o via FTP.
- Apri una pagina nel browser per controllarla, poi invia sitemap.xml in Google Search Console.
/json
JSON per sviluppatori
Il download contiene le tue pagine anche come dati, così puoi servirle dalla tua applicazione. data/wizard-data.json è un array con un oggetto per pagina:
| Campo | Tipo | Contenuto |
|---|---|---|
title | string | Il titolo della pagina mostrato nei risultati di ricerca, al massimo 60 caratteri. |
meta_description | string | La meta description mostrata sotto il titolo nei risultati di ricerca. |
h1 | string | Il titolo principale della pagina. |
body_html | string | Il documento HTML completo: head, CSS incorporato, dati strutturati e link “Leggi anche”. Da servire così com'è. |
slug | string | L'ultima parte dell'URL della pagina, per esempio plumber-in-camden. |
keywords | object | I valori usati per questa pagina, uno per ogni variabile del tuo schema. |
status | string | Sempre “success” per le pagine dell'esportazione. |
locale | string | Il codice lingua della pagina, per esempio en o ar. |
data/content.json contiene le stesse pagine con tre nomi in più che alcuni strumenti si aspettano: content (uguale a body_html), più metaDescription e description (entrambi uguali a meta_description).
Esempio di oggetto pagina (body_html abbreviato)
{
"title": "Plumber in Camden | Example Plumbing",
"meta_description": "Same-day plumbing in Camden: boiler service from £89 and leak repairs by Gas Safe registered engineers.",
"h1": "Plumber in Camden",
"body_html": "<!DOCTYPE html><html lang=\"en\" dir=\"ltr\"><head>…</head><body>…</body></html>",
"slug": "plumber-in-camden",
"keywords": { "Service": "Plumber", "Area": "Camden" },
"status": "success",
"locale": "en"
}Servi le pagine dalla tua applicazione
Invia body_html come risposta completa per l'URL della pagina. Non inserirlo nel tuo layout: contiene già head, stili e dati strutturati. Scegli l'esempio per il tuo stack:
Hosting statico (senza framework)
# Put the exported pages under /blog on any static host
unzip your-site-bundle.zip -d export
mkdir -p public/blog
cp export/dist/*.html public/blog/
# /blog/plumber-in-camden.html works now. For /blog/plumber-in-camden,
# turn on "clean URLs" (Netlify, Vercel, Cloudflare Pages) or, on nginx:
location /blog/ {
try_files $uri $uri.html =404;
}Next.js
import pages from '@/data/wizard-data.json';
export async function GET(_req: Request, { params }: { params: Promise<{ slug: string }> }) {
const { slug } = await params;
const page = pages.find(p => p.slug === decodeURIComponent(slug));
if (!page) return new Response('Not found', { status: 404 });
return new Response(page.body_html, {
headers: { 'Content-Type': 'text/html; charset=utf-8' }
});
}Astro
---
import pages from '../../data/wizard-data.json';
export function getStaticPaths() {
return pages.map(page => ({ params: { slug: page.slug }, props: { page } }));
}
const { page } = Astro.props;
---
<Fragment set:html={page.body_html} />Nuxt
import pages from '~~/data/wizard-data.json';
export default defineEventHandler((event) => {
const slug = decodeURIComponent(getRouterParam(event, 'slug') ?? '');
const page = pages.find(p => p.slug === slug);
if (!page) throw createError({ statusCode: 404 });
setHeader(event, 'Content-Type', 'text/html; charset=utf-8');
return page.body_html;
});PHP (Laravel)
use Illuminate\Support\Facades\Route;
Route::get('/blog/{slug}', function (string $slug) {
$pages = json_decode(file_get_contents(storage_path('app/wizard-data.json')), true);
$page = collect($pages)->firstWhere('slug', $slug);
abort_unless($page, 404);
return response($page['body_html'])
->header('Content-Type', 'text/html; charset=utf-8');
});Mantieni funzionanti i link “Leggi anche” e gli URL /blog
- I link tra le pagine seguono la struttura URL scelta al passaggio 3: /blog/{slug}, oppure /{prefix}/blog/{slug} con un prefisso di lingua. Servi ogni pagina esattamente a quel percorso sul sito indicato al passaggio 1: link e dati strutturati della pagina saranno corretti senza modifiche.
- Se le tue pagine si trovano a un percorso diverso, non modificare l'HTML a mano. Ogni link “Leggi anche” ha un attributo data-pseo-link con lo slug della pagina di destinazione, quindi puoi riscriverli tutti in un colpo:
read-also.js // Each "Read also" link carries data-pseo-link="<slug>" const html = page.body_html.replace( /href="[^"]*"(\s+data-pseo-link="([^"]+)")/g, (_, attr, slug) => `href="/guides/${slug}"${attr}` ); - I file HTML in dist/, invece, si collegano tra loro come {slug}.html. Caricali insieme nella stessa cartella (meglio /blog) e continuano a funzionare, con o senza URL puliti.
- Importa insieme tutte le pagine di una campagna. Un link a una pagina non importata porterebbe a un 404: l'esportazione HTML rimuove questi link per te, e nella tua applicazione puoi saltare i link il cui slug non è nei tuoi dati.
- Non cambiare uno slug dopo che la pagina è online. Se devi farlo, aggiungi un redirect 301 dal vecchio indirizzo al nuovo.
/publish
Pubblicare senza codice
Collega il tuo sito al passaggio 5 e inviamo noi le pagine. Ti serve una chiave della tua piattaforma una volta sola; i passaggi qui sotto ti mostrano dove trovarla.
WordPress
Le pagine arrivano come articoli in bozza, così puoi controllarle prima di pubblicarle.
- Nella bacheca di WordPress apri Utenti → Profilo e scorri fino a Password per le applicazioni.
- Scrivi un nome come “pSEO Wizard”, fai clic su Aggiungi una nuova password per le applicazioni e copia la password mostrata. Compare una sola volta.
- Al passaggio 5 scegli WordPress e inserisci l'indirizzo del sito, il tuo nome utente WordPress e la password per le applicazioni (non la password di accesso abituale).
- Fai clic su Pubblica, poi apri Articoli → Bozze in WordPress per controllare le pagine e pubblicarle.
Shopify
Le pagine vengono aggiunte come articoli pubblicati nel blog che scegli.
- Nel pannello di Shopify apri Impostazioni → App e canali di vendita → Sviluppa app e crea un'app.
- In Configura ambiti API Admin attiva read_content e write_content, salva e fai clic su Installa app.
- Apri Credenziali API e copia il token di accesso API Admin. Inizia con shpat_.
- Al passaggio 5 scegli Shopify, inserisci l'indirizzo del negozio (tuonegozio.myshopify.com) e il token, scegli un blog e fai clic su Pubblica.
Webflow
Le pagine vengono aggiunte come elementi di una collection CMS e vanno online alla prossima pubblicazione del sito.
- Nel Webflow Designer crea una collection CMS (per esempio “Guide”) con un campo rich text Post Body e un campo di testo Post Summary. Il modello blog di Webflow li ha già entrambi.
- Apri la pagina modello della collection e collega il nome e Post Body al layout.
- Crea un token API in Impostazioni del sito → App e integrazioni → Accesso API.
- Al passaggio 5 scegli Webflow, incolla il token, scegli il sito e la collection, fai clic su Pubblica e poi pubblica il sito in Webflow.
WooCommerce
Le pagine vengono aggiunte come prodotti in bozza, utile per pagine dedicate a ciò che vendi.
- Nella bacheca di WordPress apri WooCommerce → Impostazioni → Avanzate → REST API e fai clic su Aggiungi chiave.
- Dai alla chiave i permessi di lettura/scrittura, poi copia la chiave cliente (ck_…) e la chiave segreta cliente (cs_…).
- Al passaggio 5 scegli WooCommerce, inserisci l'indirizzo del negozio e le due chiavi, fai clic su Pubblica e controlla le bozze in Prodotti.
Wix
Non c'è ancora un collegamento diretto con Wix, ma puoi aggiungere le pagine a mano.
- Scarica le pagine al passaggio 5 (vedi “Scaricare le pagine” più sopra).
- Nell'Editor di Wix aggiungi una nuova pagina, poi Incorpora codice → Incorpora HTML, e incolla l'intero contenuto del file .html di una pagina.
- Imposta in Wix l'URL e il titolo SEO della pagina in modo che corrispondano. I motori di ricerca leggono l'HTML incorporato peggio di una pagina normale, quindi WordPress, Shopify o Webflow di solito si posizionano meglio.
/pricing
Prezzi e pagamenti
Paghi una volta per pagina. Non c'è abbonamento e ogni account ha la prima pagina gratis.
| Pagine | Prezzo per pagina |
|---|---|
| 1–500 | 0,30 USD |
| 501–1500 | 0,25 USD |
| 1501–3500 | 0,20 USD |
| 3501+ | 0,15 USD |
- I prezzi sono a scaglioni: ogni prezzo vale solo per le pagine del suo scaglione. Per esempio, 600 pagine costano 500 × 0,30 $ + 100 × 0,25 $ = 175 $.
- Gli ordini a pagamento richiedono almeno 10 pagine. Non ci sono sconti né codici coupon.
- Se modifichi una campagna già pagata, l'importo delle pagine non ancora generate torna sul tuo account come credito per il prossimo ordine.
- I pagamenti sono gestiti da Dodo Payments, il nostro Merchant of Record. Accetta carte e metodi di pagamento locali e aggiunge al checkout l'IVA o le imposte dovute.
/facts
Come le pagine restano affidabili
Motori di ricerca e clienti penalizzano le pagine che inventano. Queste regole valgono per ogni pagina:
Le informazioni vengono dal tuo sito
Prezzi, servizi, recensioni e numeri vengono solo dal tuo sito e dalle informazioni chiave che inserisci. Un numero che non è sul tuo sito viene tolto dalla pagina.
Ogni pagina è diversa
Ogni pagina ha il suo piano e le pagine finite vengono confrontate tra loro. Una pagina che ripete troppo le altre viene riscritta.
Onesti sui luoghi
Se sono i clienti a venire da te, ti avvisiamo dei luoghi lontani. Se sei tu ad andare dai clienti, le pagine dicono che servi quella zona, mai che hai una sede lì.
Pubblicate sotto /blog
Per impostazione predefinita le pagine vanno in una cartella /blog, che tiene un gran numero di pagine nuove separato dal resto del sito.
/help
Risoluzione dei problemi
- WordPress dice che l'accesso non è valido (401 o 403)
- Usa una password per le applicazioni, non la password abituale, insieme al nome utente WordPress (non l'email). Alcuni plugin di sicurezza bloccano la REST API di WordPress: consentila per il tuo utente e riprova.
- Shopify non si collega
- Usa il token di accesso API Admin che inizia con shpat_ e dai all'app gli ambiti read_content e write_content. Dopo aver cambiato gli ambiti, reinstalla l'app e copia il nuovo token.
- Una pagina dà 404 dopo il caricamento
- Controlla che il file sia nella cartella prevista dall'URL della pagina (per esempio /blog/) e che il prefisso di lingua impostato al passaggio 3 corrisponda al tuo sito.
- I pulsanti portano alla pagina sbagliata
- I pulsanti portano all'URL di destinazione del passaggio 1, oppure alla pagina corrispondente del tuo sito (prenotazioni, menu, prezzi, contatti) se esiste. Imposta l'URL di destinazione prima di generare; per le pagine già create, cambia il link nell'editor di pagina del passaggio 4.
Ancora bloccato? Scrivi a support@wizardseo.co e ti aiutiamo.