Un CMS headless es un gestor de contenidos que guarda textos e imágenes y los entrega por API, sin generar las páginas. En una web corporativa compensa cuando el mismo contenido alimenta varios canales o cuando el rendimiento y la seguridad pesan más que el catálogo de plugins. Lo integramos en proyectos de desarrollo web a medida en Madrid.
En un WordPress tradicional, el contenido comparte servidor con el tema y los plugins: una actualización de plugin puede romper la maquetación y el panel queda expuesto en internet. Si además ese texto debe aparecer en una app o en una PWA para empresas instalable en el móvil, acabas copiándolo a mano en cada sitio.
Al terminar sabrás qué CMS headless encaja con tu equipo editorial, después de descartar opciones con la guía técnica para escoger CMS.
Qué es un CMS headless
Un CMS headless es un sistema de gestión de contenidos que separa el almacén editorial de la capa de presentación: los editores crean contenido estructurado en un panel y el frontend lo consulta por una API REST o GraphQL para pintarlo en la web o en una app.
En un CMS acoplado, el mismo motor guarda el contenido y renderiza el HTML, como explica el artículo sobre cómo funciona el motor de WordPress. WordPress también puede trabajar en modo headless, porque su REST API permite a otra aplicación leer y escribir el contenido en JSON.
Sanity, Strapi, Contentful o WordPress como CMS headless
Los cuatro CMS se diferencian sobre todo en quién aloja el servidor y en cómo trabaja el editor cada día.
- Sanity: Alojamiento: Content Lake gestionado por Sanity. Editor: Sanity Studio, una aplicación React que se adapta a tu modelo, con la herramienta Presentation para editar haciendo clic sobre la vista previa.
- Strapi: Alojamiento: tu servidor o Strapi Cloud, con PostgreSQL, MySQL, MariaDB o SQLite. Licencia: MIT en la Community Edition y licencia propia en los módulos Enterprise, según su archivo de licencia en GitHub.
- Contentful: Alojamiento: SaaS. Editor: borradores servidos por la Content Preview API con un token distinto del de producción.
- WordPress: Alojamiento: tu servidor. Editor: el panel que muchos equipos ya conocen. Coste oculto: en modo headless pierdes el tema y los plugins que maquetan.
Previsualización y experiencia del editor
La previsualización decide si un CMS headless se adopta o se abandona, porque el editor necesita ver la página antes de publicarla.
Con Next.js, Draft Mode salta la caché solo para quien tiene la cookie de vista previa, mientras el resto de visitantes recibe la versión cacheada, como describe la guía oficial de Draft Mode de Next.js. La elección del framework la tratamos en la comparativa entre React y Next.js para webs a medida.
- Modelo de contenido: tipos como servicio, caso de uso o página legal, con campos validados, en lugar de un único cuadro de texto libre.
- Roles: quien redacta no publica. Comprueba que el plan contratado del CMS permite separar ambos permisos.
SEO en una web corporativa con CMS headless
Un CMS headless no posiciona ni penaliza por sí mismo: el SEO depende de que el frontend sirva HTML renderizado en el servidor con metadatos que salen de campos del CMS.
- Campos SEO obligatorios: título, descripción, slug e imagen social, validados por longitud antes de publicar.
- Multidioma: un documento por idioma enlazado a sus traducciones, con las etiquetas de la arquitectura de webs multidioma con hreflang. El caso bilingüe está en la web en castellano y valenciano para empresas de Valencia.
- Migración: redirecciones 301 de cada URL antigua, como detalla la guía para cambiar de web sin perder SEO.
Cuándo elegir un CMS headless para tu web
Un CMS headless encaja cuando hay contenido que reutilizar y un equipo técnico que mantiene el frontend.
- Cuándo sí: contenido compartido entre web y app, varios idiomas, picos de tráfico o requisitos de seguridad que desaconsejan exponer el panel.
- Cuándo no: una web de pocas páginas que cambia dos veces al año, o un equipo sin desarrolladores que depende de plugins para cada cambio.
Los formularios no viven en el CMS: los resuelve la capa de formularios web conectados al CRM con consentimiento RGPD.
CodeZone Pro Tip: este script consulta el contenido publicado en Sanity y lista las páginas con el título o la descripción SEO vacíos o fuera de longitud.
import json
import os
import urllib.request
# Modelo de ejemplo: documentos "page" con seoTitle, seoDescription y slug. Ajusta los nombres al tuyo
PROJECT = os.environ["SANITY_PROJECT_ID"]
DATASET = os.environ.get("SANITY_DATASET", "production")
URL = f"https://{PROJECT}.api.sanity.io/v2025-02-19/data/query/{DATASET}?perspective=published"
GROQ = '*[_type == $tipo]{ "slug": slug.current, seoTitle, seoDescription }'
def consultar(tipo: str) -> list:
cuerpo = json.dumps({"query": GROQ, "params": {"tipo": tipo}}).encode("utf-8")
req = urllib.request.Request(URL, data=cuerpo, headers={"Content-Type": "application/json"})
token = os.environ.get("SANITY_TOKEN") # solo hace falta si el dataset es privado
if token:
req.add_header("Authorization", f"Bearer {token}")
with urllib.request.urlopen(req, timeout=20) as resp:
return json.load(resp)["result"]
def problemas(doc: dict) -> list:
titulo, desc = doc.get("seoTitle") or "", doc.get("seoDescription") or ""
fallos = []
# Límites internos de redacción, no reglas de Google: fíjalos con tu equipo de contenidos
if not 10 <= len(titulo) <= 60:
fallos.append(f"título de {len(titulo)} caracteres")
if not 120 <= len(desc) <= 160:
fallos.append(f"descripción de {len(desc)} caracteres")
return fallos
if __name__ == "__main__":
for doc in consultar("page"):
fallos = problemas(doc)
if fallos:
print(doc.get("slug") or "(sin slug)", "->", ", ".join(fallos))Programado cada noche, este control detecta la página que un editor publicó con prisa antes de que Google la indexe con un fragmento cortado, y convierte una revisión manual en una lista de tareas concreta.
Lo Que Arriesgas Si Eliges el CMS por Moda
Un CMS headless mal elegido deja a los editores sin vista previa y obliga a pedir al desarrollador cada cambio de texto. Elegido con el modelo de contenido claro, separa a quien escribe de quien programa y reduce la superficie expuesta de la web.
En Codezone diseñamos el modelo de contenido y conectamos el CMS que mejor encaja con tu equipo. Explícanos cómo se edita hoy tu web y te recomendamos la arquitectura.