Cómo traducir un blog de Ghost con URLs por idioma
Ghost no tiene contenido multilingüe nativo. Así traduces tu blog de Ghost con una URL por idioma, hreflang y sitemap, sin montar una instalación por idioma.
Tienes el blog en Ghost, publicas cada semana y el tráfico en español ya funciona. Buscas «Ghost multilingüe» en la documentación oficial y lo que encuentras es un consejo incómodo: monta una instalación de Ghost por idioma, con el hosting y los suscriptores multiplicados por cada idioma que quieras.
Ghost traduce la plantilla, no el contenido. Para tener tu blog en varios idiomas hay tres caminos: una instalación por idioma (la vía oficial cuando el contenido es distinto en cada mercado), colecciones por idioma con routes.yaml y etiquetas, o una capa de traducción que sirva cada idioma en su propia URL sin duplicar un solo post. La tercera es una línea de código en el Code Injection de Ghost: con Lantis cuesta desde $3,50 al mes por idioma y el hreflang y el sitemap por idioma se generan solos.
Resumen rápido
- Ghost no tiene contenido multilingüe nativo. Su documentación dice que soporta traducir la plantilla y los textos del sistema, pero no publicar el mismo sitio en varios idiomas.
- La vía oficial para contenido distinto por idioma es una instalación de Ghost por idioma, y eso multiplica hosting, actualizaciones y listas de suscriptores.
- Con
routes.yamlpuedes montar colecciones por idioma (/de/,/fr/) filtrando por etiqueta, pero un post solo puede estar en una colección. - Ghost ya genera sitemap, canonical y datos estructurados solo; lo que no genera, en ninguna de sus dos vías, es hreflang.
- El Code Injection del
<head>es lo que hace viable la tercera vía: se pega una vez en Settings y vale para todo el sitio. - Con Lantis cada idioma pasa a tener su URL, su hreflang, su canonical y su sitemap, en más de 60 idiomas y sin duplicar posts.
Qué hace Ghost con los idiomas y qué no
Ghost separa dos cosas que suenan igual: traducir la interfaz y publicar contenido en varios idiomas. Lo primero lo cubre bien; lo segundo, no.
En su FAQ oficial sobre traducción, Ghost explica que soporta por completo traducir las plantillas: el tema se traduce según el idioma configurado en Ghost Admin, con el helper translate, y hay soporte nativo para los textos del sistema en los emails transaccionales, en Portal, en la búsqueda y en los comentarios. Los botones, los «Leer más», los formularios de suscripción.
Lo que no existe es el contenido multilingüe. La misma documentación recomienda una instalación de Ghost por idioma cuando el contenido es distinto en cada uno, y servicios de terceros cuando lo que quieres es el mismo contenido en varios idiomas. Y avisa a quien espere apañarlo con la plantilla: el helper translate no sirve para sitios de contenido multilingüe.
La consecuencia práctica es que la traducción es la parte fácil. Lo que decide si Google te manda visitas en francés es que exista una URL distinta, rastreable e indexable en francés, como se explica en traducir un blog a varios idiomas sin perder SEO.
Las tres formas de tener un Ghost en varios idiomas
Las tres funcionan. Lo que cambia es el trabajo que te cuesta cada post nuevo.
| Una instalación por idioma | Colecciones con routes.yaml | Capa de traducción (Lantis) | |
|---|---|---|---|
| Esfuerzo inicial | Alto: un Ghost nuevo por idioma | Medio: editar y subir routes.yaml | Una línea en el Code Injection |
| Quién escribe cada post | Tú, en cada idioma | Tú, en cada idioma | Se traduce solo |
| URL propia por idioma | Sí (dominio o subdominio) | Sí (/de/, /fr/) | Sí (/fr/, /de/) |
| hreflang | A mano, en cada instalación | A mano, en la plantilla | Automático |
| Sitemap por idioma | Uno por instalación | Uno solo, mezclado | Uno por idioma activo |
| Suscriptores | Listas separadas | Una sola lista | Una sola lista |
| Editar un post | Repetirlo en cada idioma | Repetirlo en cada idioma | Automático |
Cuándo elegir una instalación por idioma en vez de Lantis: cuando el contenido de cada idioma es distinto, no traducido. Si tienes una redacción en Alemania que escribe sus propios artículos, con sus autores y su newsletter, lo correcto es un Ghost alemán. La traducción automática no resuelve un problema editorial.
Cuándo elegir routes.yaml: cuando quieres control total de las URLs y no te importa escribir cada post en cada idioma.
Cómo funcionan las colecciones por idioma, en corto
Toda la configuración de rutas de Ghost vive en un fichero. Según su documentación de routing, está en content/settings/routes.yaml y se sube desde el panel en Settings » Labs, con los cambios aplicados al momento.
La idea es crear una colección por idioma con un permalink que lleve el prefijo (/de/{slug}/) y un filter por etiqueta, y hacer que la colección principal excluya esas etiquetas. Y aquí está el límite que conviene saber antes de empezar: un post solo puede estar en una colección. Cada idioma necesita su propio post, con su etiqueta y su slug. Si dos posts comparten slug, Ghost le añade un sufijo (-2) al segundo, y eso te rompe las parejas de hreflang.
Paso a paso: tu blog de Ghost en varios idiomas
Esto es el camino de la capa de traducción, el que no te obliga a escribir cada post dos veces.
- Decide la estructura de URLs antes de tocar nada. Subcarpeta por idioma (
tudominio.com/fr/) es lo razonable para un blog: hereda la autoridad que ya tiene el dominio. Las alternativas están en subdirectorio, subdominio o dominio por idioma. - Ordena los slugs del original. Ghost te deja editar el slug de cada post en el panel. Hazlo antes de traducir: cambiar las URLs después obliga a montar redirecciones. El criterio, en traducir las URLs (slugs) de tu web.
- Elige los idiomas. Con dos basta para medir si el canal funciona; tienes el criterio en qué idiomas añadir a tu web.
- Pega el código en el Code Injection del sitio. En Ghost está en Settings → Advanced → Code Injection, y lo que pones en el campo Site Header sale dentro del
<head>de todas las páginas. Va ahí, no en el per-post injection de cada artículo: así cubre home, posts, páginas, etiquetas y archivos de autor. - Fija la terminología antes de que se traduzca todo. Nombres de producto, el de tu newsletter y los términos de tu sector van al glosario de marca. Son cinco minutos que te ahorran revisar cien artículos.
- Comprueba tres cosas en el navegador. Que
tudominio.com/fr/sale en francés; que en el código fuente aparecen las etiquetas hreflang de cada idioma; y que el menú, el pie y el formulario de suscripción también están traducidos, no solo el cuerpo del post. - Envía el sitemap de cada idioma a Search Console y pasa la Inspección de URLs por un par de posts traducidos: es la única forma de ver el HTML que recibe Google. El procedimiento completo está en hreflang y sitemap en 5 minutos.
Hecho el paso 4 no vuelves a tocar las traducciones: cada artículo que publiques en español aparece en los demás idiomas con su URL y su entrada en el sitemap, marcado «sin revisar» en el panel.
El SEO que Ghost ya te da (y la pieza que falta)
Ghost trae mucho SEO de serie. En su guía de SEO dice que crea y actualiza automáticamente un sitemap XML, que añade etiquetas canonical, que incluye datos estructurados en todos los posts y páginas, y que cada post tiene sus propios metadatos, con Open Graph y Twitter Card.
Falta una pieza, y es justo la del multiidioma: el hreflang. Ghost no lo genera porque no sabe que dos posts son el mismo artículo en idiomas distintos; esa relación no está en su modelo de datos. Con colecciones de routes.yaml te toca escribirlo en la plantilla y mantenerlo cada vez que publicas. Con el sitemap pasa algo parecido: el de Ghost es automático, pero es uno solo, así que los posts alemanes y los españoles viven en el mismo archivo y en Search Console no ves cómo va cada idioma.
Una capa de traducción resuelve las dos cosas porque sabe qué URL es la versión de qué: genera el hreflang recíproco en todas las páginas y un sitemap independiente por idioma activo. Cómo funciona por dentro está en qué es un proxy de traducción.
En Ghost la traducción no es el trabajo difícil. El trabajo difícil es que Ghost entienda que dos posts son el mismo artículo en dos idiomas, y eso no lo sabe hacer.
Detalles propios de un blog de Ghost
Portal, newsletter y comentarios. Son textos del sistema, no contenido. Una capa de traducción traduce lo que se ve en la página, incluidos esos textos, pero los emails que salen de Ghost se envían con el idioma configurado en el panel.
Etiquetas y archivos. Un blog de Ghost tiene más URLs de las que parece: cada etiqueta y cada autor tienen su página de archivo. Son páginas con texto visible, así que también deben salir traducidas y entrar en el sitemap.
Contenido que no se traduce. Fragmentos de código, nombres propios y citas en su idioma original conviene dejarlos quietos: con exclusiones por selector CSS marcas esos bloques una vez.
Errores frecuentes
- Montar una instalación por idioma para traducir el mismo contenido. Multiplicas hosting, backups y listas de suscriptores para publicar lo mismo. Esa vía es para contenido distinto por mercado.
- Pegar el script en el per-post injection. Funciona en ese post y en ninguno más. El Site Header de Settings → Advanced cubre todo el sitio.
- Colecciones por idioma sin hreflang. Las URLs están bien y Google no sabe que se corresponden, así que puede mostrar la versión equivocada en cada país.
- Olvidar las páginas de etiqueta y autor. Se traduce el post y se dejan los archivos en español. Son URLs indexables con texto visible: cuentan.
- Reutilizar el slug entre idiomas en
routes.yaml. Ghost añade un sufijo numérico al segundo post y esa URL ya no se parece a la del original.
Preguntas frecuentes
¿Ghost soporta blogs multilingües de forma nativa?
No para el contenido. La documentación de Ghost indica que soporta traducir las plantillas y los textos del sistema (emails transaccionales, Portal, búsqueda, comentarios) al idioma configurado en el panel, pero no publicar el mismo sitio en varios idiomas. Para contenido distinto por idioma recomienda una instalación de Ghost por idioma, y para el mismo contenido en varios idiomas, herramientas de terceros.
¿Puedo tener /en/ y /fr/ en Ghost sin instalar nada más?
Sí, con routes.yaml. Creas una colección por idioma con el prefijo en el permalink y un filter por etiqueta, y subes el fichero desde Settings » Labs. El límite es que un post solo puede pertenecer a una colección, así que cada idioma necesita su propio post escrito por ti. Las URLs quedan bien; el hreflang y el sitemap por idioma siguen siendo manuales.
¿Hay que traducir cada artículo nuevo a mano?
Depende del método. Con instalaciones separadas o con colecciones de routes.yaml, sí: cada post nuevo se traduce y se publica en cada idioma. Con una capa de traducción publicas solo en tu idioma y las versiones traducidas se generan automáticamente, con su URL, su hreflang y su entrada en el sitemap. En Lantis la pre-traducción nocturna recoge el contenido nuevo del blog sin que tengas que pedirlo.
¿Se puede corregir una traducción concreta que no me gusta?
Sí, y es lo normal en un blog. Con el editor visual de Lantis haces clic sobre el texto en la propia página traducida y lo cambias; esa corrección queda bloqueada y no se sobrescribe al volver a traducir la página. El brand voice por idioma y el glosario de marca evitan la mayoría de esas correcciones de antemano.
¿Cuánto cuesta tener un blog de Ghost en cuatro idiomas?
Con Lantis, cuatro idiomas son $3 al mes por idioma —$12 al mes en total—, con 500.000 palabras incluidas por cada idioma y sin cobrar por visitas, que en un blog es lo que importa. Hay un plan gratis de 100 traducciones sin tarjeta, y puedes calcular tu caso en la calculadora de traducción web.
Conclusión
Ghost es excelente para publicar y generoso en SEO técnico —sitemap, canonical, datos estructurados y metadatos por post, todo automático—, pero el multiidioma de contenido no está en la caja y su documentación lo dice sin rodeos. Si tu plan es tener redacciones distintas por mercado, una instalación por idioma es la respuesta correcta. Si lo que quieres es que los artículos que ya funcionan en español te traigan visitas en francés o alemán, duplicar el blog es pagar en trabajo editorial lo que se resuelve con una capa por encima.
Lantis hace esa parte con una línea de código en el Code Injection de Ghost, sin plugins y sin tocar la plantilla: más de 60 idiomas con su URL propia, HTML ya traducido desde el servidor, hreflang, canonical, sitemap por idioma y metadatos traducidos. Eliges el motor de IA (Gemini por defecto, Claude, DeepL o DeepSeek), fijas la terminología con el glosario de marca y corriges cualquier frase con el editor visual. Cuesta $3,50 al mes con un idioma, $3 por idioma de 2 a 9 y $2,50 por idioma desde 10, con 500.000 palabras incluidas por idioma; el detalle está en la página de precios. Empieza gratis y ten tus mejores artículos en francés esta misma tarde.
Pon tu web en varios idiomas hoy.
Una línea de código. SEO real por idioma. Traducción con IA. Sin tarjeta para empezar.