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

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

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

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

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

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

  1. Descomprime el archivo.
  2. 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.
  3. 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:

Campos de cada objeto de página en data/wizard-data.json
CampoTipoQué contiene
titlestringEl título de la página que aparece en los resultados de búsqueda, 60 caracteres como máximo.
meta_descriptionstringLa meta descripción que aparece bajo el título en los resultados de búsqueda.
h1stringEl encabezado principal de la página.
body_htmlstringEl documento HTML completo: head, CSS incrustado, datos estructurados y los enlaces «Lee también». Sírvelo tal cual.
slugstringLa última parte de la URL de la página, por ejemplo plumber-in-camden.
keywordsobjectLos valores usados para esta página, uno por cada variable de tu patrón.
statusstringSiempre «success» en las páginas de la exportación.
localestringEl 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)

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"
}

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)

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');
});

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.

  1. En el escritorio de WordPress, abre Usuarios → Perfil y baja hasta Contraseñas de aplicación.
  2. 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.
  3. 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).
  4. 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.

  1. En el panel de Shopify, abre Configuración → Aplicaciones y canales de ventas → Desarrollar aplicaciones y crea una aplicación.
  2. En Configurar alcances de la API de Admin, activa read_content y write_content, guarda y haz clic en Instalar aplicación.
  3. Abre Credenciales de API y copia el token de acceso de la API de Admin. Empieza por shpat_.
  4. 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.

  1. 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.
  2. Abre la página de plantilla de la colección y conecta el nombre y Post Body a tu diseño.
  3. Crea un token de API en Configuración del sitio → Apps e integraciones → Acceso a la API.
  4. 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.

  1. En el escritorio de WordPress, abre WooCommerce → Ajustes → Avanzado → API REST y haz clic en Añadir clave.
  2. Dale permiso de lectura/escritura y copia la clave de cliente (ck_…) y la clave secreta de cliente (cs_…).
  3. 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.

  1. Descarga tus páginas en el paso 5 (consulta «Descargar tus páginas» más arriba).
  2. 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.
  3. 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.

Precio por página
PáginasPrecio por página
1–5000,30 US$
501–15000,25 US$
1501–35000,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.
Ver la página de precios completa

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