/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.

  1. 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.

  2. 02

    Scegli uno schema

    Scegli la forma delle ricerche, per esempio “{Servizio} a {Città}” o “{Prodotto} per {Pubblico}”, e un modello di pagina.

  3. 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.

  4. 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.

  5. 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

  1. Decomprimi il file.
  2. 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.
  3. 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:

Campi di ogni oggetto pagina in data/wizard-data.json
CampoTipoContenuto
titlestringIl titolo della pagina mostrato nei risultati di ricerca, al massimo 60 caratteri.
meta_descriptionstringLa meta description mostrata sotto il titolo nei risultati di ricerca.
h1stringIl titolo principale della pagina.
body_htmlstringIl documento HTML completo: head, CSS incorporato, dati strutturati e link “Leggi anche”. Da servire così com'è.
slugstringL'ultima parte dell'URL della pagina, per esempio plumber-in-camden.
keywordsobjectI valori usati per questa pagina, uno per ogni variabile del tuo schema.
statusstringSempre “success” per le pagine dell'esportazione.
localestringIl 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)

data/wizard-data.json → [0]
{
  "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)

terminal / nginx
# 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

app/blog/[slug]/route.ts
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

src/pages/blog/[slug].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

server/routes/blog/[slug].ts
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)

routes/web.php
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.

  1. Nella bacheca di WordPress apri Utenti → Profilo e scorri fino a Password per le applicazioni.
  2. 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.
  3. 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).
  4. 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.

  1. Nel pannello di Shopify apri Impostazioni → App e canali di vendita → Sviluppa app e crea un'app.
  2. In Configura ambiti API Admin attiva read_content e write_content, salva e fai clic su Installa app.
  3. Apri Credenziali API e copia il token di accesso API Admin. Inizia con shpat_.
  4. 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.

  1. 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.
  2. Apri la pagina modello della collection e collega il nome e Post Body al layout.
  3. Crea un token API in Impostazioni del sito → App e integrazioni → Accesso API.
  4. 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.

  1. Nella bacheca di WordPress apri WooCommerce → Impostazioni → Avanzate → REST API e fai clic su Aggiungi chiave.
  2. Dai alla chiave i permessi di lettura/scrittura, poi copia la chiave cliente (ck_…) e la chiave segreta cliente (cs_…).
  3. 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.

  1. Scarica le pagine al passaggio 5 (vedi “Scaricare le pagine” più sopra).
  2. Nell'Editor di Wix aggiungi una nuova pagina, poi Incorpora codice → Incorpora HTML, e incolla l'intero contenuto del file .html di una pagina.
  3. 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.

Prezzo per pagina
PaginePrezzo per pagina
1–5000,30 USD
501–15000,25 USD
1501–35000,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.
Vedi la pagina completa dei prezzi

/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.