SEO para Strapi

Guía de SEO para Strapi: renderizado del frontend, modelado de campos SEO, complementos, sitemaps, borradores y seguridad de vistas previas.

Publicado por primera vez: 27 jun 2026 · Última actualización: 14 ago 2026 · Avanzado
Idiomas

Strapi es un CMS headless sin capa de renderizado, por lo que el frontend determina el SEO. El HTML debe generarse durante la compilación o en el servidor; los campos SEO, el sitemap, robots.txt y JSON-LD deben implementarse en el frontend. Los borradores, las vistas previas, el panel de administración y el JSON de la API deben mantenerse fuera de los resultados.

TL;DR — Strapi es un CMS headless exclusivamente de backend (REST + GraphQL, autohospedado o Strapi Cloud) sin capa de renderizado, por lo que es neutral para SEO: el frontend decide. SSG/SSR entregan HTML completo; CSR es arriesgado para rastreadores que solo obtienen el HTML inicial; ISR puede servir una primera petición obsoleta. Modele campos SEO en los tipos de contenido. El complemento @strapi/plugin-seo los almacena y previsualiza, pero no genera HTML, sitemaps ni robots.txt. Excluya borradores mediante el flujo de publicación, proteja las vistas previas con noindex en el host, mantenga /admin y el JSON de /api/* fuera de búsqueda y cree sitemap.xml y robots.txt en el frontend.

Strapi no determina el SEO; lo hace el frontend

El concepto principal es que Strapi no tiene capa de renderizado. Ofrece almacenamiento, modelo de contenido, interfaz de edición y API. La indexabilidad, los metadatos, la velocidad y los datos estructurados dependen del framework que consume la API. Strapi solo almacena y entrega los campos correctos.

Evidence for this claim Strapi provides REST and GraphQL content APIs rather than rendering a public website. Scope: GraphQL requires Strapi's GraphQL plugin; REST is available for content types. Confidence: high · Verified: Strapi: REST API

Por eso, decir que Strapi es perjudicial para SEO plantea mal el problema. El equipo de Strapi afirma: “headless architectures require developers to take ownership of SEO aspects that traditional content management systems handle automatically.” (traducción) «Las arquitecturas headless exigen que el desarrollo asuma tareas SEO que los CMS tradicionales gestionan automáticamente». Strapi con Next.js y SSG puede superar a WordPress descuidado; una SPA React sin metadatos puede fracasar. El backend es el mismo y cambia el renderizado. Es el principio descrito en SEO con JavaScript.

Los cuatro modos de renderizado

  • SSG — generación de sitios estáticos. El HTML se crea al compilar y se sirve como archivos estáticos: completo desde la primera petición, con TTFB y Core Web Vitals rápidos. El contenido nuevo exige recompilar.
  • SSR — renderizado en servidor. El HTML se genera en cada petición. Se mantiene actualizado, pero la latencia de Strapi se suma al TTFB.
  • ISR — regeneración estática incremental. Las páginas se regeneran en segundo plano tras una ventana de revalidación. Es un buen punto medio con una trampa.
  • CSR — renderizado en el cliente. Se entrega un armazón casi vacío y el navegador construye el DOM. Google pone la página en cola: “Googlebot queues all pages with a 200 HTTP status code for rendering, unless a robots meta tag or header tells Google not to index the page” (traducción) «Googlebot pone en cola para renderizar las páginas con estado HTTP 200, salvo que robots indique que no deben indexarse». Otros rastreadores lo procesan peor. Úselo solo en paneles privados; evítelo en contenido público.
Evidence for this claim Google sends pages with successful HTTP responses to a rendering queue and recommends server-side or pre-rendering for reliable content delivery. Scope: Google Search JavaScript processing; rendering is not an assurance of indexing. Confidence: high · Verified: Google: JavaScript SEO basics

La trampa de ISR: al vencer la revalidación, la siguiente petición todavía puede recibir la página obsoleta; la versión nueva llega en la posterior. Para precios o inventario, use SSR. ISR conviene a contenido que cambia cada horas o días.

Modelado de contenido SEO en Strapi

El frontend no puede renderizar lo que el modelo no contiene. Añada a cada tipo de contenido público un componente SEO con, al menos:

  • metaTitle, metaDescription
  • canonicalURL
  • ogImage (y campos de Open Graph / Twitter)
  • una directiva robots, por ejemplo un booleano preventIndexing para controlar noindex

Use el campo UID para slugs: se genera desde el título y exige unicidad. En sitios multilingües, active i18n por tipo, localice slug y campos SEO y genere <link rel="alternate" hreflang="..."> mediante la relación localizations. SALT.agency señala que el título “can either be populated with the Strapi SEO Plugin or by creating a text field where the title tag will be stored, with conditions added such as not being shorter than or not exceeding a set amount of characters.” (traducción) «Puede rellenarse con Strapi SEO Plugin o guardarse en un campo de texto con límites de longitud».

El frontend lee los campos y rellena <head> mediante generateMetadata en Next.js, useSeoMeta en Nuxt o el diseño de Astro. Los metadatos presentes en HTML son más fiables que los inyectados con JS porque Google los ve en la primera petición.

Qué hace y qué no hace Strapi SEO Plugin

El complemento comunitario (@strapi/plugin-seo, antes @strapi-community/plugin-seo) es la herramienta habitual. “embeds a side panel in every Content-Type edit view where you can set meta titles, descriptions, canonical URLs, and social share images,” (traducción) «Integra un panel lateral en cada tipo de contenido para definir títulos, descripciones, URL canónicas e imágenes sociales». También muestra una vista previa y analiza legibilidad y palabras clave.

Lo que no hace, pese a una confusión frecuente:

  • No genera el HTML de <head>; el frontend renderiza los campos.
  • No genera el sitemap; en Strapi 5 se usa Webtools o strapi-5-sitemap-plugin.
  • No escribe robots.txt ni implementa datos estructurados; corresponde al frontend.

El complemento mejora la experiencia editorial y almacena campos limpios, pero el frontend debe producir la salida SEO real.

Excluir borradores, vistas previas, /admin y /api del índice

Strapi presenta aquí más modos de fallo que una plataforma alojada como Shopify.

  • Draft/Publish. Los borradores llevan publishedAt: null; la API solo devuelve entradas publicadas a peticiones sin autenticar. Nunca envíe un token autenticado en peticiones públicas, o los borradores quedarán accesibles. El sitemap debe respetar el estado de publicación.
  • Vista previa y pruebas. Los despliegues suelen ser públicos. Protéjalos con X-Robots-Tag: noindex en el host, Disallow: /, metaetiqueta noindex y autenticación HTTP. Vigile hosts inesperados en Search Console.
  • Panel /admin. Confirme <meta name="robots" content="noindex">, evite enlaces públicos y protéjalo con contraseña.
  • JSON de /api/*. Puede desperdiciar rastreo y filtrar datos. Coloque la API en cms.example.com o api.example.com, bloquee el subdominio y exclúyalo del sitemap. Si comparte dominio, use Disallow: /api/.

Sitemaps y robots.txt se crean en el frontend

No existe Yoast, así que ambos deben implementarse. Hay dos vías para el sitemap:

  1. Complemento dentro de Strapi: genera XML e incluye solo entradas publicadas. En Strapi 5, use Webtools (strapi-plugin-webtools + webtools-addon-sitemap) o strapi-5-sitemap-plugin. El antiguo strapi-plugin-sitemap solo llega a Strapi 4. Su documentación afirma: “this setting will make sure that all draft pages are excluded from the sitemap.” (traducción) «Este ajuste garantiza que todas las páginas en borrador queden excluidas del sitemap».
  2. Generado en el frontend: sitemap.ts en Next.js, @astrojs/sitemap en Astro o módulos de Nuxt que obtienen URL publicadas. Ofrece mayor control de URL, lastmod y changefreq.

robots.txt se sirve desde el frontend (robots.ts en Next.js o public/robots.txt en Astro). Incluya Sitemap:, bloquee vistas previas con Disallow: / y nunca bloquee .js o .css, pues impediría renderizar.

El patrón clave es el flujo de webhook: publicar en Strapi → recompilar o revalidar en Vercel/Netlify → regenerar sitemap → avisar a Google Search Console e IndexNow. Como las actualizaciones pasan por una API, conectar IndexNow al webhook resulta especialmente útil.

Strapi Cloud frente a alojamiento propio

El alojamiento afecta al tiempo de respuesta de la API de forma distinta según el renderizado:

  • SSG/ISR: la velocidad importa al compilar, no en ejecución; no afecta al TTFB del usuario.
  • SSR: la latencia se suma directamente al TTFB en cada petición y afecta al LCP.

Strapi Cloud ofrece infraestructura gestionada y CDN de recursos. Autohospedado permite controlar caché (Redis), índices y proximidad geográfica. En ambos casos, almacene la API en caché o use ISR. La CDN de Strapi Cloud sirve la API y los recursos, no el frontend; las Core Web Vitals se miden en el frontend alojado por separado en Vercel, Netlify o Cloudflare Pages.

Migraciones hacia o desde Strapi

WordPress → Strapi es una ruta habitual y donde suelen surgir fallos SEO:

  • Asigne cada slug al campo UID; todo cambio requiere redirección 301 mediante strapi-plugin-redirect-urls o Smart Redirect Manager.
  • Migre títulos, descripciones y og:image desde wp_postmeta, y el texto alternativo a alternativeText.
  • Inventaríe todas las URL, incluidas etiquetas, archivos paginados y parámetros, y cree el mapa antes de publicar.
  • Migre las URL canónicas explícitamente; no presuponga que el frontend acertará.
  • Tras lanzar, compare rastreos de Screaming Frog, valide datos estructurados, reenvíe sitemaps a GSC y Bing y active IndexNow.

El SEO de Strapi es una aplicación de SEO con JavaScript y renderizado; SEO para CMS headless explica la versión independiente de plataforma.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.