/docs
Documentación de pSEO Wizard
Todo lo que necesitas para pasar de tu web a páginas publicadas: cómo funciona el asistente, cómo llevar las páginas a tu web sin escribir código y qué hacer si algo falla.
Última actualización: septiembre de 2026
/how-it-works
Cómo funciona
El asistente tiene cinco pasos. Puedes volver y cambiar cualquiera antes de pagar.
- 01
Pega tu web
Leemos tu página de inicio y algunas páginas clave (servicios, precios, carta, quiénes somos, contacto) y detectamos tu tipo de negocio. Añade los datos clave que quieras que usen todas las páginas.
- 02
Elige un patrón
Elige la forma de tus búsquedas, como «{Servicio} en {Ciudad}» o «{Producto} para {Público}», y una plantilla de página.
- 03
Añade los valores
Escribe los servicios, ciudades o públicos que quieras combinar. Cada combinación se convierte en una página. Si apuntas a lugares, comprobamos que tengan sentido según cómo atiendes a tus clientes.
- 04
Genera
Genera primero tu página gratis. Cuando te guste, paga el resto (mínimo 10 páginas) y las páginas se escriben una a una.
- 05
Publica o descarga
Envía las páginas a WordPress, Shopify, Webflow o WooCommerce, o descárgalas como archivos HTML listos para subir.
/html-export
Descargar tus páginas
En el paso 5, Descargar paquete te da un ZIP con todo lo necesario para alojar las páginas donde quieras:
dist/Un archivo HTML listo por página, con los estilos incluidos, para que se vea bien sin más archivos.dist/index.htmlUna lista sencilla de todas tus páginas, con enlaces.sitemap.xmlUn sitemap que puedes enviar en Google Search Console.data/Las mismas páginas en JSON (título, slug, meta descripción y HTML), para desarrolladores.
Para ponerlas en línea
- Descomprime el archivo.
- Sube los archivos de dist/ a tu hosting, idealmente a una carpeta /blog, por ejemplo con el administrador de archivos de tu hosting o por FTP.
- Abre una página en el navegador para comprobarla y después envía sitemap.xml en Google Search Console.
/json
JSON para desarrolladores
La descarga también incluye tus páginas como datos, para que las sirvas desde tu propia aplicación. data/wizard-data.json es un array con un objeto por página:
| Campo | Tipo | Qué contiene |
|---|---|---|
title | string | El título de la página que aparece en los resultados de búsqueda, 60 caracteres como máximo. |
meta_description | string | La meta descripción que aparece bajo el título en los resultados de búsqueda. |
h1 | string | El encabezado principal de la página. |
body_html | string | El documento HTML completo: head, CSS incrustado, datos estructurados y los enlaces «Lee también». Sírvelo tal cual. |
slug | string | La última parte de la URL de la página, por ejemplo plumber-in-camden. |
keywords | object | Los valores usados para esta página, uno por cada variable de tu patrón. |
status | string | Siempre «success» en las páginas de la exportación. |
locale | string | El código de idioma de la página, por ejemplo en o ar. |
data/content.json contiene las mismas páginas con tres nombres adicionales que esperan algunas herramientas: content (igual que body_html), y metaDescription y description (ambos iguales a meta_description).
Ejemplo de objeto de página (body_html abreviado)
{
"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"
}Sirve las páginas desde tu aplicación
Envía body_html como respuesta completa para la URL de la página. No lo metas dentro de tu propio layout: ya incluye su head, sus estilos y sus datos estructurados. Elige el ejemplo de tu stack:
Hosting estático (sin 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');
});Mantén funcionando los enlaces «Lee también» y las URL /blog
- Los enlaces entre páginas usan la estructura de URL que elegiste en el paso 3: /blog/{slug}, o /{prefix}/blog/{slug} con prefijo de idioma. Sirve cada página exactamente en esa ruta de la web que indicaste en el paso 1, y los enlaces y los datos estructurados de la página serán correctos sin tocar nada.
- Si tus páginas están en otra ruta, no edites el HTML a mano. Cada enlace «Lee también» tiene un atributo data-pseo-link con el slug de la página de destino, así que puedes reescribirlos todos de una vez:
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}` ); - Los archivos HTML de dist/, en cambio, se enlazan entre sí como {slug}.html. Súbelos juntos a la misma carpeta (idealmente /blog) y seguirán funcionando, con o sin URL limpias.
- Importa juntas todas las páginas de una campaña. Un enlace a una página que no importaste llevaría a un 404: la exportación HTML elimina esos enlaces por ti, y en tu aplicación puedes omitir los enlaces cuyo slug no esté en tus datos.
- No cambies un slug una vez publicada la página. Si no queda más remedio, añade una redirección 301 de la dirección antigua a la nueva.
/publish
Publicar sin código
Conecta tu web en el paso 5 y enviamos las páginas por ti. Solo necesitas una clave de tu plataforma una vez; estos pasos te muestran dónde encontrarla.
WordPress
Las páginas llegan como entradas en borrador, para que las revises antes de publicarlas.
- En el escritorio de WordPress, abre Usuarios → Perfil y baja hasta Contraseñas de aplicación.
- Escribe un nombre como «pSEO Wizard», haz clic en Añadir nueva contraseña de aplicación y copia la contraseña que aparece. Solo se muestra una vez.
- En el paso 5, elige WordPress e introduce la dirección de tu web, tu usuario de WordPress y esa contraseña de aplicación (no tu contraseña habitual).
- Haz clic en Publicar y luego abre Entradas → Borradores en WordPress para revisar las páginas y publicarlas.
Shopify
Las páginas se añaden como artículos publicados en el blog que elijas.
- En el panel de Shopify, abre Configuración → Aplicaciones y canales de ventas → Desarrollar aplicaciones y crea una aplicación.
- En Configurar alcances de la API de Admin, activa read_content y write_content, guarda y haz clic en Instalar aplicación.
- Abre Credenciales de API y copia el token de acceso de la API de Admin. Empieza por shpat_.
- En el paso 5, elige Shopify, introduce la dirección de tu tienda (tutienda.myshopify.com) y el token, elige un blog y haz clic en Publicar.
Webflow
Las páginas se añaden como elementos de una colección CMS y salen en vivo la próxima vez que publiques tu web.
- En Webflow Designer, crea una colección CMS (por ejemplo «Guías») con un campo de texto enriquecido Post Body y un campo de texto Post Summary. La plantilla de blog de Webflow ya incluye los dos.
- Abre la página de plantilla de la colección y conecta el nombre y Post Body a tu diseño.
- Crea un token de API en Configuración del sitio → Apps e integraciones → Acceso a la API.
- En el paso 5, elige Webflow, pega el token, elige el sitio y la colección, haz clic en Publicar y después publica tu web en Webflow.
WooCommerce
Las páginas se añaden como productos en borrador, algo útil para páginas sobre lo que vendes.
- En el escritorio de WordPress, abre WooCommerce → Ajustes → Avanzado → API REST y haz clic en Añadir clave.
- Dale permiso de lectura/escritura y copia la clave de cliente (ck_…) y la clave secreta de cliente (cs_…).
- En el paso 5, elige WooCommerce, introduce la dirección de tu tienda y las dos claves, haz clic en Publicar y revisa los borradores en Productos.
Wix
Todavía no hay conexión directa con Wix, pero puedes añadir las páginas a mano.
- Descarga tus páginas en el paso 5 (consulta «Descargar tus páginas» más arriba).
- En el Editor de Wix, añade una página nueva, luego Insertar código → Insertar HTML, y pega el contenido completo del archivo .html de una página.
- Ajusta en Wix la URL y el título SEO de la página para que coincidan. Los buscadores leen el HTML insertado peor que una página normal, así que WordPress, Shopify o Webflow suelen posicionar mejor.
/pricing
Precios y pagos
Pagas una sola vez por página. No hay suscripción y cada cuenta tiene su primera página gratis.
| Páginas | Precio por página |
|---|---|
| 1–500 | 0,30 US$ |
| 501–1500 | 0,25 US$ |
| 1501–3500 | 0,20 US$ |
| 3501+ | 0,15 US$ |
- Los precios son escalonados: cada precio se aplica solo a las páginas de su tramo. Por ejemplo, 600 páginas cuestan 500 × 0,30 $ + 100 × 0,25 $ = 175 $.
- Los pedidos de pago necesitan al menos 10 páginas. No hay descuentos ni cupones.
- Si cambias una campaña ya pagada, el importe de las páginas que aún no se han generado vuelve a tu cuenta como saldo para tu próximo pedido.
- Los pagos los gestiona Dodo Payments, nuestro Merchant of Record. Acepta tarjetas y métodos de pago locales y añade el IVA o impuesto de venta que corresponda al pagar.
/facts
Cómo se mantienen fiables las páginas
Los buscadores y los clientes castigan las páginas que se inventan cosas. Estas reglas se aplican a todas las páginas:
Los datos salen de tu web
Precios, servicios, reseñas y cifras salen solo de tu web y de los datos clave que introduces. Una cifra que no está en tu web se elimina de la página.
Cada página es distinta
Cada página tiene su propio plan y las páginas terminadas se comparan entre sí. Una página que repite demasiado a las demás se vuelve a escribir.
Honestidad con las ubicaciones
Si los clientes vienen a ti, te avisamos de los lugares lejanos. Si tú vas a tus clientes, las páginas dicen que das servicio en la zona, nunca que tienes una sucursal allí.
Publicadas bajo /blog
Por defecto las páginas van a una carpeta /blog, lo que mantiene un gran número de páginas nuevas separado del resto de tu web.
/help
Solución de problemas
- WordPress dice que el acceso es incorrecto (401 o 403)
- Usa una contraseña de aplicación, no tu contraseña habitual, junto con tu usuario de WordPress (no tu email). Algunos plugins de seguridad bloquean la API REST de WordPress; permítela para tu usuario y vuelve a intentarlo.
- Shopify no conecta
- Usa el token de acceso de la API de Admin que empieza por shpat_ y da a la aplicación los alcances read_content y write_content. Tras cambiar los alcances, reinstala la aplicación y copia el token nuevo.
- Una página da 404 después de subirla
- Comprueba que el archivo está en la carpeta que espera la URL de la página (por ejemplo /blog/) y que el prefijo de idioma que definiste en el paso 3 coincide con tu web.
- Los botones llevan a la página equivocada
- Los botones llevan a la URL de destino del paso 1, o a la página correspondiente de tu web (reservas, carta, precios, contacto) cuando existe. Define la URL de destino antes de generar; en las páginas ya creadas, cambia el enlace en el editor de páginas del paso 4.
¿Sigues atascado? Escribe a support@wizardseo.co y te ayudamos.