Tutoriales

Blog multiidioma headless CMS: Cómo crear un blog multiidioma con API REST

4 min de lectura
Blog multiidioma headless CMS: Cómo crear un blog multiidioma con API REST

Introducción

Montar un blog multiidioma headless CMS suena bien en teoría, pero en la práctica suele convertirse en un caos: duplicación de contenido, URLs mal estructuradas, problemas de SEO y una gestión editorial poco eficiente. Si además trabajas con varias webs o clientes, el problema escala rápido. Necesitas una forma clara de centralizar el contenido, exponerlo vía API y servirlo en distintos idiomas sin duplicar lógica ni romper el rendimiento.

Aquí es donde entra un enfoque headless con API REST. Separas backend y frontend, defines bien tu modelo de datos y controlas el idioma como una propiedad más del contenido. El resultado: un sistema flexible, escalable y fácil de mantener.

En este artículo vas a aprender...


Requisitos previos

  • Un CMS headless (usaremos Agora CMS como referencia)

  • Conocimientos básicos de API REST

  • Un frontend (Astro, Vue, Next.js o similar)

  • Node.js o entorno de desarrollo web configurado


1. Diseña el modelo de contenido multiidioma

El primer error habitual es duplicar posts por idioma. No lo hagas. En un blog multiidioma headless CMS, el idioma debe ser parte del modelo.

Tienes dos enfoques:

Opción A: Campo locale por entrada

{
  "id": 1,
  "title": "Hello world",
  "content": "Content in English",
  "locale": "en",
  "slug": "hello-world"
}

Opción B: Contenido agrupado por idioma (recomendado)

{
  "id": 1,
  "slug": "hello-world",
  "translations": {
    "en": {
      "title": "Hello world",
      "content": "Content in English"
    },
    "es": {
      "title": "Hola mundo",
      "content": "Contenido en español"
    }
  }
}

Por qué la opción B es mejor:

  • Mantienes una única entidad lógica

  • Evitas inconsistencias entre idiomas

  • Facilitas SEO (relaciones hreflang)

En Agora CMS puedes estructurar esto con tipos de contenido personalizados sin complicaciones .


2. Configura la API REST para servir contenido por idioma

Tu API debe permitir filtrar por idioma o devolver todas las traducciones.

Endpoint básico

GET /api/posts?locale=es

Ejemplo en PHP (simplificado)

$locale = $_GET['locale'] ?? 'en';

$query = "SELECT * FROM posts WHERE locale = ?";
$stmt = $db->prepare($query);
$stmt->execute([$locale]);

echo json_encode($stmt->fetchAll());

Endpoint con traducciones completas

GET /api/posts/hello-world

Respuesta:

{
  "slug": "hello-world",
  "translations": {
    "en": {...},
    "es": {...}
  }
}

Clave: evita lógica compleja en frontend. La API debe entregar datos listos para renderizar.


3. Estructura las URLs correctamente

El SEO depende en gran parte de esto.

Estructura recomendada

/en/blog/hello-world
/es/blog/hola-mundo

Alternativa (menos recomendable)

/blog/hello-world?lang=es

Por qué usar prefijos de idioma:

  • Mejor indexación en Google

  • URLs limpias y comprensibles

  • Compatible con hreflang

Ejemplo en Astro

export function getStaticPaths() {
  return posts.map(post => ({
    params: {
      lang: post.locale,
      slug: post.slug
    }
  }));
}

4. Consume la API desde tu frontend

Ahora conectas tu frontend al CMS.

Ejemplo en Vue 3

import { ref, onMounted } from 'vue';

const posts = ref([]);

onMounted(async () => {
  const res = await fetch('/api/posts?locale=es');
  posts.value = await res.json();
});

Ejemplo en Astro (SSR o SSG híbrido)

const res = await fetch(`${API_URL}/posts?locale=${lang}`);
const posts = await res.json();

Tip clave:

  • Si usas SSG → necesitas rebuild al cambiar contenido

  • Si usas SSR → contenido dinámico sin rebuild

Para blogs, una estrategia híbrida suele funcionar mejor.


5. Añade soporte SEO multiidioma (hreflang)

Esto es obligatorio.

En cada página debes indicar versiones alternativas:

<link rel="alternate" hreflang="en" href="https://example.com/en/blog/hello-world" />
<link rel="alternate" hreflang="es" href="https://example.com/es/blog/hola-mundo" />

También puedes añadir:

<link rel="alternate" hreflang="x-default" href="https://example.com/en/blog/hello-world" />

Resultado:

  • Google entiende que son versiones del mismo contenido

  • Evitas contenido duplicado

  • Mejor posicionamiento internacional


6. Gestiona el contenido desde un único panel

Aquí es donde realmente ganas productividad.

Con Agora CMS puedes:

  • Crear un solo post con múltiples idiomas

  • Editar todas las traducciones desde el mismo panel

  • Servir contenido a múltiples webs desde una sola API

Flujo real:

  1. Creas un post en español

  2. Añades traducción en inglés

  3. Publicas

  4. La API expone ambas versiones automáticamente

Sin duplicar entradas. Sin sincronizaciones manuales.

Esto encaja perfectamente con el enfoque de centralización de contenido descrito en la estrategia del proyecto .


Resultado final

Al terminar tendrás:

  • Un blog multiidioma headless CMS funcional

  • Contenido centralizado en un único backend

  • API REST que sirve contenido por idioma

  • URLs limpias y optimizadas para SEO

  • Frontend desacoplado (Astro, Vue, etc.)

  • Sistema escalable para múltiples webs o clientes

En la práctica: puedes gestionar 1 o 20 webs multiidioma desde el mismo panel sin aumentar la complejidad.


Conclusión

Crear un blog multiidioma con API REST no es complicado si defines bien el modelo desde el inicio. La clave está en no duplicar contenido, estructurar correctamente la API y cuidar el SEO técnico (URLs + hreflang). Con un CMS headless como Agora CMS, todo este flujo se simplifica: centralizas contenido, reduces errores y escalas sin fricción.

Si trabajas con clientes, múltiples webs o necesitas internacionalizar proyectos, este enfoque no es opcional: es la base.

Prueba Agora CMS gratis y monta tu primer blog multiidioma en pocas horas.

Sin tarjeta de crédito · Plan gratuito permanente

¿Listo para gestionar
tu contenido
sin límites?

Un workspace, tu API lista al instante y todo el contenido bajo control. Empieza gratis y escala cuando lo necesites.