Cambiar tema

Guía completa para desplegar blogs estáticos en Cloudflare Pages: 5 frameworks sin errores

Easton editorial illustration: before-after repair bench

Terminaste el primer artículo del blog y pulsaste Desplegar. Tres minutos después Cloudflare Pages mostró éxito; copiaste el enlace al navegador y la página estaba en blanco. F12 en la consola: 404 por todas partes.

La primera vez que desplegué un blog Astro fue así: respuestas contradictorias en Google, tres o cuatro horas de pruebas, y al final el directorio de salida estaba en public cuando Astro usa dist por defecto.

El 90% de los fallos de despliegue se reducen a dos ajustes: comando de build y directorio de salida. Este artículo te da la configuración exacta en Cloudflare Pages para Astro, Hugo, Hexo, Gatsby y Eleventy, y cómo resolver rápido páginas en blanco y builds fallidos. Sigue los pasos y en 10 minutos pasas de Git a producción.

¿Por qué Cloudflare Pages? (pero ten en cuenta los cambios de 2025)

Primero, por qué recomiendo Cloudflare Pages para blogs estáticos.

Gratis y de verdad rápido. Cloudflare tiene más de 300 centros de datos en el mundo. Tu blog se distribuye automáticamente y los lectores acceden rápido desde cualquier sitio. He usado GitHub Pages y Vercel; Cloudflare Pages es más estable en velocidad, sobre todo para visitantes desde China. Es totalmente gratis, sin límite de tráfico ni de builds.

El despliegue automático desde Git ahorra trabajo. Conectas GitHub o GitLab y, con cada git push, Cloudflare compila y despliega. También genera enlaces de vista previa por Pull Request, útil para revisar antes de fusionar. Muy práctico en equipo.

SSL gratuito y dominio personalizado incluidos. Sin pelearte con certificados; enlazar tu dominio es sencillo y el DNS suele propagarse en minutos.

Pero hay que decirlo: en abril de 2025 Cloudflare ajustó su estrategia, empuja Cloudflare Workers y Pages entra en modo mantenimiento, sin grandes actualizaciones.

Para blogs estáticos, el cambio casi no afecta. Pages sigue estable y con funciones de sobra. Si solo quieres un blog o documentación, sin SSR complejo ni edge computing, Pages sigue siendo la mejor opción. Workers encaja mejor con funciones dinámicas, rutas API o edge computing avanzado.

En resumen: si despliegas un blog puramente estático ahora, usa Pages con tranquilidad. Si más adelante necesitas servidor, migrar a Workers no es tarde.

Configuración estándar de 5 frameworks (sección clave)

Aquí va lo importante: la configuración exacta de los cinco generadores estáticos más usados. Cópiala tal cual.

Tabla rápida de configuración

FrameworkComando de buildDirectorio de salidaNotas importantes
Astronpm run builddistPor defecto basta; SSR requiere configuración extra
Hugohugopublic¡Debes definir la variable HUGO_VERSION!
Hexohexo generatepublicAlgunos temas requieren NODE_VERSION
Gatsbygatsby buildpublicEl más sencillo; casi nunca falla
Eleventynpx @11ty/eleventy_siteFíjate en el guion bajo inicial
Next.jsnpx opennextjs-cloudflare.worker-nextEsquema nuevo de 2025; ignora tutoriales viejos
90%+
Tasa de éxito
Con comando de build y directorio de salida correctos
10 min
Tiempo de despliegue
De Git a producción
90%
Error más frecuente
Directorio de salida incorrecto → página en blanco

Guarda esta tabla: he verificado cada configuración. Abajo detallo los puntos delicados por framework.

Configuración de Astro

Astro es mi framework favorito para blogs estáticos: buen rendimiento y agradable de escribir.

Configuración estándar:

  • Comando de build: npm run build o directamente astro build
  • Directorio de salida: dist

Si es un sitio puramente estático (SSG), la configuración por defecto basta. Pero hay un detalle: para renderizado en servidor (SSR) instala el adaptador @astrojs/cloudflare y añade en astro.config.mjs:

import cloudflare from '@astrojs/cloudflare';
export default {
  output: 'server',
  adapter: cloudflare()
};

Si quieres cambiar el directorio de salida (por ejemplo a build), puedes hacerlo en la configuración:

export default {
  outDir: 'build'
};

Yo no lo cambiaría: usa dist por defecto y evitas confusiones en equipo.

Configuración de Hugo (la que más falla)

Hugo tiene más trampas. La primera vez que desplegué un blog Hugo me costó toda una noche entenderlo.

Configuración estándar:

  • Comando de build: hugo o hugo -b $CF_PAGES_URL
  • Directorio de salida: public
  • Variable de entorno (obligatoria): HUGO_VERSION = 0.143.1 (o la versión que necesites)

Lo clave: Cloudflare Pages usa Hugo 0.54 por defecto, ¡versión de 2019! Casi todos los temas actuales piden 0.80 o más, incluso 0.120+. Sin HUGO_VERSION manual, el despliegue fallará.

¿Cómo definirla? En la sección de flujo práctico lo explico con detalle; por ahora recuerda: en el proyecto de Cloudflare Pages, Settings > Environment variables, añade:

  • Nombre: HUGO_VERSION
  • Valor: 0.143.1 (versión exacta; no escribas 0.143)

Otro detalle: baseURL de Hugo. Si usas el dominio .pages.dev de Cloudflare (no un dominio propio), el comando de build debería ser:

hugo -b $CF_PAGES_URL

$CF_PAGES_URL es una variable que Cloudflare define automáticamente según el entorno. Así enlaces internos, RSS y sitemap funcionan bien.

Configuración de Hexo

Hexo es un generador veterano; la configuración es relativamente simple.

Configuración estándar:

  • Comando de build: hexo generate (también vale hexo g)
  • Directorio de salida: public

Hexo rara vez da problemas, pero algunos temas o plugins exigen una versión concreta de Node.js. Si el build falla, prueba con la variable NODE_VERSION:

  • Nombre: NODE_VERSION
  • Valor: 14.3 o 18.17.0 (según tu proyecto)

En local ejecuta node -v y usa la misma versión en Cloudflare Pages.

Configuración de Gatsby

Gatsby es el más tranquilo; casi nunca falla.

Configuración estándar:

  • Comando de build: gatsby build
  • Directorio de salida: public

Nada más. He desplegado varios blogs Gatsby de amigos sin un solo problema.

Configuración de Eleventy

Eleventy (11ty) es un generador ligero; también es sencillo.

Configuración estándar:

  • Comando de build: npx @11ty/eleventy
  • Directorio de salida: _site (con guion bajo al inicio)

Cuidado: es _site, no site. Si omites el guion bajo, no encontrará los archivos.

Para personalizar el directorio de salida, crea .eleventy.js en la raíz:

module.exports = function(eleventyConfig) {
  return {
    dir: {
      output: "public"
    }
  };
};

Configuración de Next.js (cambios de 2025)

Si usas Next.js para el blog, en 2025 hay un cambio importante.

Configuración estándar (esquema 2025):

  • Comando de build: npx opennextjs-cloudflare
  • Directorio de salida: .worker-next

Importante: muchos tutoriales antiguos usan @cloudflare/next-on-pages, ya obsoleto. Cloudflare recomienda @opennextjs/cloudflare.

Si un tutorial sigue hablando de next-on-pages, ignóralo. Pasos del esquema nuevo:

  1. Instala: npm install @opennextjs/cloudflare
  2. Comando de build: npx opennextjs-cloudflare
  3. Directorio de salida: .worker-next

Si solo quieres un blog estático, no recomiendo Next.js. Encaja mejor en apps dinámicas; para contenido estático puro, Astro o Hugo son más ligeros y rápidos.

Práctica: del repositorio Git a producción (paso a paso)

Ya conoces la configuración; ahora el despliegue desde cero. Unos 10 minutos en total.

Preparación

Antes de empezar, confirma tres cosas:

  1. El código está en GitHub o GitLab — abre el repositorio y verifica que el código más reciente está subido
  2. El proyecto tiene package.json (si es Node.js) — las dependencias deben estar declaradas; no instales en local sin añadirlas al archivo
  3. Revisa .gitignorenode_modules, dist, public y similares deben ignorarse; no subas artefactos de build

Un amigo subió node_modules a Git y el despliegue se llenó de conflictos. Revisa .gitignore y te ahorras dolores de cabeza.

Pasos detallados de despliegue

Paso 1: inicia sesión en Cloudflare y entra en Pages

Abre dash.cloudflare.com e inicia sesión (registro gratis si no tienes cuenta).

En el menú lateral busca Workers & Pages, entra y pulsa Create application arriba a la derecha.

Paso 2: elige Conectar a Git

Verás dos opciones:

  • Connect to Git — despliegue automático desde GitHub/GitLab (esta)
  • Direct Upload — subida manual (no recomendado)

Elige Connect to Git y luego GitHub o GitLab.

Paso 3: autoriza el acceso

La primera vez debes autorizar a Cloudflare. Pulsa Sign in; irás a la página de autorización de GitHub/GitLab.

Permisos: si no quieres dar acceso a todos los repos, elige Only select repositories.

Tras autorizar volverás a Cloudflare.

Paso 4: selecciona el repositorio

Busca tu proyecto de blog en la lista y haz clic.

Si no aparece, actualiza arriba a la derecha o vuelve a autorizar.

Paso 5: configuración de build (¡clave!)

La parte más importante; no la rellenes mal.

  • Project name: formará parte de tu dominio .pages.dev. Si pones my-blog, será my-blog.pages.dev.
  • Production branch: normalmente main o master.
  • Framework preset: elige tu framework (Astro, Hugo, etc.) o None.

Build settings

Rellena según la tabla anterior:

  • Build command:
    • Astro: npm run build
    • Hugo: hugo o hugo -b $CF_PAGES_URL
    • Hexo: hexo generate
    • Gatsby: gatsby build
    • Eleventy: npx @11ty/eleventy
    • Next.js: npx opennextjs-cloudflare
  • Build output directory:
    • Astro: dist
    • Hugo: public
    • Hexo: public
    • Gatsby: public
    • Eleventy: _site
    • Next.js: .worker-next

Si eliges Framework preset, Cloudflare rellena valores por defecto, pero conviene revisarlos.

Paso 6: variables de entorno (si hacen falta)

Baja hasta Environment variables (advanced) y pulsa Add variable.

  • Hugo (obligatorio):
    • Variable name: HUGO_VERSION
    • Value: 0.143.1 (o la versión exacta que necesites)
  • Hexo (si hace falta):
    • Variable name: NODE_VERSION
    • Value: 14.3 o 18.17.0 (según tu entorno local)

Paso 7: guardar y desplegar

Revisa todo y pulsa Save and Deploy.

Cloudflare compilará el proyecto; verás el log en tiempo real. Suele tardar 1-3 minutos.

Paso 8: revisar el resultado

Si todo va bien verás Success! Your site is live! y un enlace tunombre.pages.dev.

Ábrelo; si la configuración es correcta, verás tu blog.

Variables de entorno en detalle

Puedes definirlas durante el despliegue inicial o después:

  1. Entra en tu proyecto de Cloudflare Pages
  2. Abre Settings
  3. En el menú lateral elige Environment variables
  4. Pulsa Add variable
  5. Rellena nombre y valor y guarda

Variables habituales:

  • HUGO_VERSION: versión de Hugo (p. ej. 0.143.1)
  • NODE_VERSION: versión de Node.js (p. ej. 18.17.0)
  • CF_PAGES_URL: la proporciona Cloudflare; no la configures a mano; sirve para baseURL

Importante: tras cambiar variables debes redesplegar. Ve a Deployments, localiza el último despliegue, pulsa los tres puntos y elige Retry deployment.

Despliegues de vista previa (Preview Deployments)

Cada Pull Request genera automáticamente un enlace de vista previa.

Si abres un PR en GitHub con un artículo nuevo, Cloudflare compila ese código y te da una URL independiente para revisar antes de fusionar a la rama principal.

Muy útil cuando varias personas escriben en el mismo blog.

¿Problemas? Errores frecuentes y cómo depurarlos

Tres errores cubren el 95% de los casos.

Problema 1: fallo de build (Building Failed)

Síntomas: el despliegue se queda en Building y luego muestra Build failed, con icono rojo.

Es el que más he visto. No redespliegues a ciegas; mira primero el log.

Pasos:

  1. Revisa el log de build
    • Pulsa View build log o Deployment details
    • Baja al final y busca el error en rojo
    • Fíjate en las últimas líneas
  2. Comprueba el comando de build
    • Ve a Settings > Build & deployments
    • Verifica Build command según la tabla
    • Error típico: npm build en lugar de npm run build
  3. Comprueba las dependencias
    • Si aparece Cannot find module o Command not found
    • Revisa package.json; puede que instalaste en local sin guardar la dependencia (npm install --save)
  4. Confirma la versión del framework
    • Hugo: el 99% de fallos es por no definir HUGO_VERSION
      • El log puede decir Theme requires Hugo Extended version
      • Añade HUGO_VERSION = 0.143.1 en Environment variables
    • Hexo: puede ser versión de Node.js
      • Prueba NODE_VERSION = 18.17.0 (o tu versión local)

Caso real: un amigo desplegaba Hugo y el log decía Hugo version 0.54.0 does not support this theme. Añadimos HUGO_VERSION = 0.120.0 y el siguiente despliegue pasó al instante.

Problema 2: página en blanco (el más común)

Síntomas: despliegue exitoso pero sitio en blanco; F12 puede mostrar muchos 404.

El 90% de las veces es directorio de salida incorrecto.

Pasos:

  1. Herramientas de desarrollo (F12)
    • Console: errores
    • Network: recarga y mira los 404
    • Sources: estructura de archivos
  2. Directorio de salida (~90% de los casos)
    • Ve a Settings > Build & deployments
    • Comprueba Build output directory
    • Errores típicos:
      • Astro con public en lugar de dist
      • Hugo con dist en lugar de public
      • Eleventy con site en lugar de _site
  3. baseURL o publicPath
    • En subpaths (p. ej. example.com/blog) puede hacer falta baseURL
    • Hugo: hugo -b $CF_PAGES_URL
    • Astro: base: '/blog' en astro.config.mjs
    • Vue/React: a veces publicPath: './'
  4. Modo de enrutamiento (SPA)
    • Vue Router o React Router en modo history pueden dar 404 al refrescar
    • Soluciones:
      • Modo hash (URL con #)
      • O archivo _redirects en la raíz:
       /* /index.html 200
       

Caso real: desplegué mi blog Astro y la página estaba en blanco. El directorio de salida era public; al cambiarlo a dist funcionó. A veces el error es así de simple.

Problema 3: estilos o recursos que no cargan

Síntomas: el HTML aparece pero sin CSS, imágenes rotas, aspecto roto.

Pasos:

  1. Network en las herramientas de desarrollo
    • ¿CSS, JS o imágenes en 404?
    • ¿Las rutas de solicitud son correctas?
  2. Rutas de recursos
    • Problema típico: rutas absolutas vs relativas
    • /assets/style.css en un subpath no se resuelve
    • Solución: usa las utilidades del framework
      • Astro: import de recursos
      • Hugo: .RelPermalink o absURL
      • Hexo: url_for()
  3. CDN externo
    • Si usas jsDelivr, cdnjs, etc.
    • Comprueba que los enlaces funcionan desde tu región

Caso real: un blog Hexo se veía sin estilos. El CSS apuntaba a /css/style.css pero el sitio estaba en /blog/css/style.css. El blog vivía en un subpath y en _config.yml faltaba root: /blog/. Tras corregirlo y regenerar, todo cuadró.

Lista rápida de comprobación

  1. ✓ Revisa el log de build
  2. ✓ Confirma el comando de build (tabla)
  3. ✓ Confirma el directorio de salida (tabla)
  4. ✓ Variables de entorno (HUGO_VERSION en Hugo)
  5. ✓ F12: consola y red
  6. .gitignore: no subir artefactos de build
  7. ✓ Prueba en local: npm run build, hugo, etc.

Si tras todo sigue fallando, pregunta en el foro de Cloudflare o consulta Troubleshooting en la documentación oficial.

Trucos avanzados: un blog más profesional

El blog en línea es solo el comienzo. Cuatro mejoras sencillas que marcan diferencia.

Dominio personalizado

.pages.dev funciona, pero un dominio propio es más profesional. Cloudflare incluye SSL gratis.

Pasos:

  1. Compra un dominio (GoDaddy, Alibaba Cloud, Tencent Cloud, etc.)
  2. En tu proyecto de Pages abre Custom domains
  3. Pulsa Set up a custom domain e introduce el dominio (p. ej. blog.example.com)
  4. Cloudflare te dará registros DNS; añádelos en tu registrador
  5. Espera la propagación (minutos u horas)
  6. Cloudflare configurará HTTPS automáticamente

Truco: si el dominio también está en Cloudflare, el DNS es más rápido y a veces se configura solo.

Optimizar el build

Con muchos artículos, el build puede alargarse.

  1. Caché
    • Pages cachea node_modules por defecto
    • Si es lento, comprueba si reinstala dependencias cada vez
  2. Menos dependencias
    • Limpia package.json
    • Librerías por CDN (jQuery, etc.) no hace falta empaquetarlas
  3. Paralelismo
    • Hugo: --gc limpia caché y a veces acelera
    • Astro: experimental.contentCollectionCache
  4. Estrategia de ramas
    • Trabaja en dev; fusiona a main solo para publicar
    • Así no disparas build de producción en cada commit

Monitorización y analítica

Cloudflare ofrece analítica gratuita.

Datos de visita:

  1. Entra en tu proyecto de Pages
  2. Abre Analytics
  3. Verás:
    • Requests totales
    • Ancho de banda
    • País de origen
    • Tendencias de tráfico

Web Vitals:

  • Métricas de carga, interactividad, etc.
  • Útil para optimizar (comprimir imágenes, lazy loading, etc.)

Automatización con GitHub Actions

Para ir más allá:

Ejemplo 1: publicación programada

  • Artículos con fecha futura; Actions los publica a su hora

Ejemplo 2: sitemap automático

  • Tras cada despliegue, enviar sitemap a buscadores

Ejemplo 3: compresión de imágenes

  • Antes del push, optimizar assets

No son obligatorios, pero facilitan la operación. En la comunidad hay plantillas listas.

Conclusión

Desplegar un blog estático no es tan complicado. Lo esencial son comando de build y directorio de salida. Con la tabla correcta evitas el 90% de problemas.

Resumen final — guarda esta tabla:

FrameworkComando de buildDirectorio de salidaVariables obligatorias
Astronpm run builddist-
HugohugopublicHUGO_VERSION = 0.143.1
Hexohexo generatepublic-
Gatsbygatsby buildpublic-
Eleventynpx @11ty/eleventy_site-

Si algo falla, suele ser configuración. Mira el log, repasa la lista de comprobación y casi siempre lo resuelves.

Pruébalo ahora. Abre Cloudflare Pages, conecta tu repositorio, rellena la configuración correcta y en 10 minutos tu blog puede estar en línea.

Si este artículo te ayudó, compártelo con quien esté peleándose con el despliegue. Si te encuentras un caso que no cubrimos, deja un comentario; puede ayudar a otros.

¡Buen despliegue y buena escritura!

Flujo completo para desplegar un blog estático en Cloudflare Pages

Proceso completo desde el repositorio Git hasta producción, con la configuración exacta de 5 frameworks populares y métodos de resolución de problemas frecuentes

⏱️ Estimated time: 10 min

  1. 1

    Step 1: Preparación: confirma que el código está subido y el proyecto configurado

    Antes de empezar, verifica estos tres puntos:

    1. El código ya está en GitHub o GitLab
    • Abre la página del repositorio y confirma que el código más reciente está ahí

    2. El proyecto tiene package.json (si es un proyecto Node.js)
    • Asegúrate de que las dependencias estén declaradas
    • No instales en local sin añadirlas al package.json

    3. Revisa .gitignore
    • Confirma que node_modules, dist, public y similares están en .gitignore
    • No subas artefactos de build
    • Una vez un amigo subió node_modules a Git y el despliegue se llenó de conflictos
  2. 2

    Step 2: Inicia sesión en Cloudflare y conecta el repositorio Git

    Paso 1: inicia sesión en Cloudflare y entra en Pages
    • Abre dash.cloudflare.com e inicia sesión (si no tienes cuenta, regístrate; es gratis)
    • En el menú lateral busca Workers & Pages y entra
    • Pulsa el botón Create application en la esquina superior derecha

    Paso 2: elige Conectar a Git
    • Verás dos opciones:
    - Connect to Git: despliegue automático desde GitHub/GitLab (elegimos esta)
    - Direct Upload: subida manual de archivos (no recomendado; hay que subir cada vez)
    • Elige Connect to Git y selecciona GitHub o GitLab

    Paso 3: autoriza el acceso
    • La primera vez debes autorizar a Cloudflare para acceder a tus repositorios
    • Pulsa Sign in; te redirigirá a la página de autorización de GitHub/GitLab
    • Permisos: si no quieres dar acceso a todos los repos, elige Only select repositories y autoriza solo los necesarios
    • Tras autorizar volverás a Cloudflare

    Paso 4: selecciona el repositorio a desplegar
    • En la lista busca tu proyecto de blog y haz clic
    • Si no aparece, pulsa actualizar arriba a la derecha o vuelve al paso anterior para reautorizar
  3. 3

    Step 3: Configura el build: comando y directorio de salida

    Paso 5: configuración de build (¡clave!)
    Esta es la parte más importante; no la rellenes mal.

    Información básica:
    • Project name: formará parte de tu dominio .pages.dev
    - Si pones my-blog, el dominio será my-blog.pages.dev
    • Production branch: normalmente main o master
    • Framework preset: puedes elegir tu framework (Astro, Hugo, etc.) o None

    Lo importante: Build settings
    Rellena según tu framework, siguiendo la tabla de configuración anterior.

    Build command:
    • Astro: npm run build
    • Hugo: hugo o hugo -b $CF_PAGES_URL
    • Hexo: hexo generate
    • Gatsby: gatsby build
    • Eleventy: npx @11ty/eleventy
    • Next.js: npx opennextjs-cloudflare

    Build output directory:
    • Astro: dist
    • Hugo: public
    • Hexo: public
    • Gatsby: public
    • Eleventy: _site
    • Next.js: .worker-next

    Nota:
    • Si eliges Framework preset, Cloudflare rellenará algunos valores por defecto
    • Pero no siempre son correctos; conviene revisarlos manualmente
  4. 4

    Step 4: Define variables de entorno y guarda el despliegue

    Paso 6: variables de entorno (si hacen falta)
    Baja hasta Environment variables (advanced) y pulsa Add variable.

    Según tu framework, añade las necesarias:

    Proyectos Hugo (obligatorio):
    • Variable name: HUGO_VERSION
    • Value: 0.143.1 (o la versión que necesites, con tres decimales exactos)

    Proyectos Hexo (si hace falta):
    • Variable name: NODE_VERSION
    • Value: 14.3 o 18.17.0 (según tu versión local)

    Con las variables listas, la configuración queda completa.

    Paso 7: guardar y desplegar
    • Revisa la configuración y pulsa Save and Deploy al final de la página
    • Cloudflare empezará a compilar el proyecto
    • Verás una página de logs con el progreso en tiempo real
    • Suele tardar entre 1 y 3 minutos

    Paso 8: revisar el resultado
    • Si el build tiene éxito, verás Success! Your site is live!
    • Debajo habrá un enlace con el formato tunombre.pages.dev
    • Ábrelo; si todo va bien, verás tu blog
  5. 5

    Step 5: Resolución de problemas: fallos de build y página en blanco

    Problema 1: fallo de build (Building Failed)

    Síntomas:
    • El despliegue se queda en Building y luego muestra Build failed
    • Aparece un icono de error rojo

    Pasos:
    1. Revisa el log de build
    • En la página del fallo, pulsa View build log o Deployment details
    • Baja hasta el final y busca el mensaje de error en rojo
    • Fíjate sobre todo en las últimas líneas

    2. Comprueba el comando de build
    • Ve a Settings > Build & deployments
    • Verifica que Build command coincide con la tabla
    • Error frecuente: escribir npm build en lugar de npm run build (falta run)

    3. Comprueba las dependencias
    • Si el log dice Cannot find module o Command not found
    • Falta alguna dependencia; revisa package.json

    4. Confirma la versión del framework
    • En Hugo, el 99% de los fallos es por no definir HUGO_VERSION
    • El log puede decir Theme requires Hugo Extended version
    • Ve a Settings > Environment variables y añade HUGO_VERSION = 0.143.1

    Problema 2: página en blanco (el más común)

    Síntomas:
    • El despliegue fue exitoso pero el sitio se ve en blanco
    • Con F12 en la consola pueden aparecer muchos 404
    • Lo he visto demasiadas veces; el 90% es directorio de salida incorrecto

    Pasos:
    1. Abre las herramientas de desarrollo (F12)
    • En Console busca errores
    • En Network recarga y mira qué recursos devuelven 404
    • En Sources revisa si la estructura de archivos es correcta

    2. Revisa el directorio de salida (causa más frecuente, ~90%)
    • Ve a Cloudflare Pages > Settings > Build & deployments
    • Comprueba Build output directory
    • Errores típicos:
    - Astro con public en lugar de dist
    - Hugo con dist en lugar de public
    - Eleventy con site en lugar de _site (falta el guion bajo)

FAQ

¿Cuánto tarda desplegar un blog estático en Cloudflare Pages?
Todo el proceso suele llevar unos 10 minutos.

Desde iniciar sesión en Cloudflare, conectar el repositorio, configurar el build y las variables de entorno hasta guardar y desplegar, la compilación suele acabar en 1-3 minutos.

Si la configuración es correcta, pasar de Git a producción en 10 minutos no es problema.
¿Por qué el 90% de los fallos se deben al comando de build y al directorio de salida?
Cada framework tiene valores distintos por defecto:
• Astro usa dist
• Hugo usa public
• Eleventy usa _site (con guion bajo)

Si copias a ciegas un tutorial de otro framework, es fácil equivocarse. Por ejemplo, Astro con public en vez de dist, o Hugo con dist en vez de public, y obtienes página en blanco.

Lo mismo con el comando de build: cada framework tiene el suyo; si lo pones mal, el build falla.
¿Por qué los proyectos Hugo fallan con más frecuencia? ¿Qué variable de entorno es obligatoria?
Cloudflare Pages usa por defecto Hugo 0.54, ¡una versión de 2019! La mayoría de temas actuales exigen 0.80 o más, incluso 0.120+. Sin HUGO_VERSION manual, el despliegue casi seguro fallará.

Variable obligatoria:
• Variable name: HUGO_VERSION
• Value: 0.143.1 (o la que necesites, con tres decimales; no escribas solo 0.143)

Cómo configurarla:
1. Entra en tu proyecto de Cloudflare Pages y abre Settings
2. En el menú lateral elige Environment variables
3. Pulsa Add variable
4. Rellena nombre y valor y guarda
¿Qué hacer si tras un despliegue exitoso la página se ve en blanco?
En el 90% de los casos el directorio de salida está mal.

Pasos:
1. Abre las herramientas de desarrollo (F12)
• En Console busca errores
• En Network recarga y mira los 404

2. Revisa el directorio de salida
• Ve a Cloudflare Pages > Settings > Build & deployments
• Comprueba Build output directory
• Errores típicos:
- Astro con public en lugar de dist
- Hugo con dist en lugar de public
- Eleventy con site en lugar de _site (falta el guion bajo)

3. Revisa baseURL o publicPath
• Si despliegas en un subpath, puede hacer falta configurar baseURL

4. Revisa el modo de enrutamiento
• Con Vue Router o React Router en modo history
• Al refrescar puede dar 404
• Usa modo hash o añade un archivo _redirects en la raíz del proyecto
¿Cuál es la configuración estándar de los 5 frameworks principales?
Astro:
• Comando de build: npm run build
• Directorio de salida: dist
• Por defecto basta; SSR requiere configuración extra

Hugo:
• Comando de build: hugo o hugo -b $CF_PAGES_URL
• Directorio de salida: public
• Obligatorio HUGO_VERSION = 0.143.1 o superior

Hexo:
• Comando de build: hexo generate
• Directorio de salida: public
• Algunos temas requieren NODE_VERSION

Gatsby:
• Comando de build: gatsby build
• Directorio de salida: public
• El más sencillo; casi nunca falla

Eleventy:
• Comando de build: npx @11ty/eleventy
• Directorio de salida: _site (con guion bajo al inicio)

Next.js:
• Comando de build: npx opennextjs-cloudflare
• Directorio de salida: .worker-next
• Esquema nuevo de 2025; ignora tutoriales antiguos
¿Cómo configurar variables de entorno? ¿Hay que redesplegar tras cambiarlas?
Cómo configurarlas:
• Entra en tu proyecto de Cloudflare Pages
• Abre la pestaña Settings
• En el menú lateral elige Environment variables
• Pulsa Add variable
• Rellena nombre y valor y guarda

Variables habituales:
• HUGO_VERSION: versión de Hugo (p. ej. 0.143.1)
• NODE_VERSION: versión de Node.js (p. ej. 18.17.0)
• CF_PAGES_URL: la proporciona Cloudflare automáticamente; no la configures a mano; sirve para baseURL

Importante:
• Tras cambiar variables de entorno debes redesplegar
• Ve a Deployments, localiza el último despliegue
• Pulsa los tres puntos y elige Retry deployment
¿Qué cambió Cloudflare Pages en 2025? ¿Sigue mereciendo la pena?
En abril de 2025 Cloudflare ajustó su estrategia: empuja Cloudflare Workers y Pages entra básicamente en modo mantenimiento, sin grandes novedades.

Para blogs estáticos el impacto es pequeño:
• Pages sigue estable y con funciones suficientes
• Si solo quieres un blog o documentación, sin SSR complejo ni edge computing avanzado, Pages sigue siendo la mejor opción
• Workers encaja mejor con APIs dinámicas, rutas de servidor o edge computing avanzado

En resumen: para un blog puramente estático, usa Pages sin miedo. Si más adelante necesitas servidor, migrar a Workers no es tarde.

13 min de lectura · Publicado el: 1 dic 2025 · Actualizado el: 21 ago 2026

Comentarios

Inicia sesión con GitHub para dejar un comentario

Easton BlogEaston Blog