<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>jemai</title>
  <link>https://jemai.cc/es/</link>
  <description>Un blog técnico sobre Workers, inferencia e ingeniería de equipos pequeños. Los textos se escriben en un idioma y se publican en chino, inglés, japonés, español y árabe.</description>
  <language>es</language>
  <lastBuildDate>Sat, 17 Oct 2026 16:33:45 GMT</lastBuildDate>
  <atom:link href="https://jemai.cc/es/rss.xml" rel="self" type="application/rss+xml"/>
  <item>
    <title>Cero conocimientos técnicos, cero coste: monta tu blog con dominio propio en 30 minutos (guía paso a paso de CF CMS)</title>
    <link>https://jemai.cc/es/posts/zero-cost-blog-cf-cms</link>
    <guid isPermaLink="true">https://jemai.cc/es/posts/zero-cost-blog-cf-cms</guid>
    <pubDate>Sat, 17 Oct 2026 11:55:13 GMT</pubDate>
    <description>¿No sabes programar y no quieres alquilar un servidor? Con CF CMS, de código abierto, y el plan gratuito de Cloudflare solo pagas el dominio. Un comando despliega un blog multilingüe en tu propio dominio que un agente de IA puede gestionar. Incluye todos los pasos y una chuleta d</description>
    <content:encoded><![CDATA[<p>¿Te ha pasado alguna vez?</p>
<p>Llevas dos años publicando en una plataforma y, de repente, <strong>una restricción de alcance, un bloqueo de cuenta, y tu contenido y tus seguidores desaparecen sin más</strong>.</p>
<p>Decides montar tu propio blog y buscas un tutorial: alquilar un servidor, preparar el entorno, configurar Nginx, poner HTTPS, defenderte de ataques a diario… y te rindes antes de escribir la primera línea.</p>
<p>Este artículo es para ti.</p>
<p>Te voy a guiar para crear un <strong>blog independiente con tu propio dominio de nivel superior</strong> en Cloudflare, usando el proyecto de código abierto <strong>CF CMS</strong>. El sitio que estás leyendo ahora mismo se montó exactamente así.</p>
<p>Vamos a ser claros desde el principio:</p>
<ul>
<li><strong>Cero conocimientos técnicos</strong>: no hace falta programar. Todo se reduce a <strong>copiar, pegar y pulsar Enter</strong>. ¿Ni eso te apetece? Pásale los comandos a un agente de IA y que los ejecute él.</li>
<li><strong>Cero coste</strong>: <strong>aparte del propio dominio</strong> (las extensiones baratas cuestan unos pocos dólares al año), el sitio, la base de datos, el almacenamiento de imágenes y la traducción automática funcionan con el plan gratuito de Cloudflare. <strong>No tienes que alquilar ningún servidor.</strong></li>
</ul>
<p>¿Listo? Empezamos.</p>
<h2 id="lo-primero-qué-consigues">Lo primero: qué consigues</h2>
<ul>
<li>✅ Un dominio de nivel superior que es tuyo, como <code>yourdomain.com</code></li>
<li>✅ HTTPS automático + CDN global, tan rápido como los grandes sitios</li>
<li>✅ <strong>Cinco idiomas: chino, inglés, japonés, español y árabe.</strong> Escribes una vez y se traduce al guardar</li>
<li>✅ 8 plantillas prediseñadas + logo, favicon y color de tema con un clic</li>
<li>✅ Un panel de administración oculto tras una ruta secreta aleatoria; <code>/admin</code> a secas devuelve 404</li>
<li>✅ Un endpoint MCP integrado para que <strong>un agente de IA publique artículos y cambie ajustes por ti</strong></li>
</ul>
<p>Solo necesitas tres cosas:</p>
<ul>
<li><input disabled="" type="checkbox"> Un dominio (más abajo te explico cómo conseguirlo)</li>
<li><input disabled="" type="checkbox"> Una cuenta gratuita de Cloudflare</li>
<li><input disabled="" type="checkbox"> Un ordenador con terminal (macOS / Linux; en Windows se recomienda WSL)</li>
</ul>
<h2 id="un-diagrama-dónde-funciona-todo-esto">Un diagrama: ¿dónde funciona todo esto?</h2>
<p><img src="/media/images/2026/10/a6f004bc-9cee-4ad5-ad9e-e1ba0ae6e689.png" alt="Arquitectura de CF CMS: los visitantes llegan a yourdomain.com a través del DNS y la CDN de Cloudflare hasta Pages Functions, respaldadas por la base de datos D1, el almacenamiento de imágenes R2 y la traducción con Workers AI" loading="lazy" decoding="async"></p>
<p>En resumen:</p>
<ul>
<li><strong>Pages</strong>: el sitio en sí, que renderiza cada página</li>
<li><strong>D1</strong>: la base de datos de artículos, etiquetas y ajustes</li>
<li><strong>R2</strong>: el almacenamiento de imágenes</li>
<li><strong>Workers AI</strong>: traduce tu artículo a los otros cuatro idiomas cuando guardas</li>
</ul>
<p><strong>No hay ningún servidor que tengas que mantener.</strong> Parches, escalado, protección contra DDoS: todo eso es cosa de Cloudflare.</p>
<h2 id="todo-el-proceso-en-una-imagen-8-pasos">Todo el proceso en una imagen: 8 pasos</h2>
<p><img src="/media/images/2026/10/8c5ccb23-d13f-4d5f-8ccf-822fa287c2ff.png" alt="Los 8 pasos de cero a publicado: comprar un dominio, conectar Cloudflare, crear un token de API, activar R2, obtener el código, desplegar con un comando, entrar al panel oculto, escribir y mantener" loading="lazy" decoding="async"></p>
<p>Si todo va bien, <strong>de 30 a 60 minutos</strong>. El único paso que de verdad exige pensar es el 1: <strong>elegir un buen nombre</strong>.</p>
<h2 id="paso-1-compra-un-dominio">Paso 1: Compra un dominio</h2>
<p>El dominio es tu dirección en internet y es <strong>lo único de todo este montaje que cuesta dinero</strong>.</p>
<p>Sirve cualquier registrador fiable, por ejemplo Spaceship, Cloudflare Registrar o Namecheap. <strong>Elige uno con precios transparentes, renovaciones razonables y protección de privacidad WHOIS.</strong></p>
<p>Tres consejos rápidos para elegir dominio:</p>
<ol>
<li><strong>Corto, fácil de recordar y de escribir.</strong> Si se lo puedes decir en voz alta a un amigo, es un buen dominio.</li>
<li><strong>Mira el precio de renovación, no solo el del primer año.</strong> Algunas extensiones son baratísimas el primer año y cuestan varias veces más el segundo.</li>
<li>No te obsesiones con <code>.com</code>: <code>.cc</code>, <code>.dev</code> y <code>.me</code> funcionan muy bien para un blog personal.</li>
</ol>
<h2 id="paso-2-conecta-tu-dominio-a-cloudflare">Paso 2: Conecta tu dominio a Cloudflare</h2>
<ol>
<li>Entra en la web de Cloudflare y crea una <strong>cuenta gratuita</strong>.</li>
<li>Haz clic en <strong>Add a site</strong>, escribe tu dominio y elige el plan <strong>Free</strong>.</li>
<li>Cloudflare te dará <strong>dos direcciones de nameserver</strong> (servidores de nombres).</li>
<li>Vuelve al panel de tu registrador y cambia los nameservers por esos dos.</li>
<li>Espera entre unos minutos y unas horas. Cuando Cloudflare muestre <strong>Active</strong>, listo.</li>
</ol>
<p><strong>Clave: el dominio tiene que estar en la misma cuenta de Cloudflare que usarás para desplegar.</strong> El script de instalación lo busca con tu token de API.</p>
<h2 id="paso-3-crea-un-token-de-api-cópialo-tal-cual">Paso 3: Crea un token de API (cópialo tal cual)</h2>
<p>Ruta: icono de perfil arriba a la derecha en Cloudflare → <strong>My Profile → API Tokens → Create Token → Create Custom Token</strong>.</p>
<p>Marca uno a uno los permisos de esta imagen:</p>
<p><img src="/media/images/2026/10/0a5a224c-c80d-4c9c-a7bc-34c19abdc3f9.png" alt="Lista de permisos del token de API de Cloudflare: a nivel de cuenta Cloudflare Pages Edit, D1 Edit, Workers R2 Storage Edit, Account Settings Read; a nivel de zona Zone Read, DNS Edit" loading="lazy" decoding="async"></p>
<ul>
<li>Account · Cloudflare Pages · <strong>Edit</strong></li>
<li>Account · D1 · <strong>Edit</strong></li>
<li>Account · Workers R2 Storage · <strong>Edit</strong></li>
<li>Account · Account Settings · <strong>Read</strong></li>
<li>Zone · Zone · <strong>Read</strong> (si usas tu propio dominio)</li>
<li>Zone · DNS · <strong>Edit</strong> (si usas tu propio dominio)</li>
</ul>
<p>Dos avisos:</p>
<ul>
<li><strong>Workers AI no necesita permisos extra.</strong> En ejecución, el sitio usa el binding de IA de Pages.</li>
<li><strong>Este token es solo para el script de instalación. No se lo des a tu agente de escritura.</strong> Solo se muestra una vez, así que guárdalo enseguida.</li>
</ul>
<h2 id="paso-4-activa-r2">Paso 4: Activa R2</h2>
<p>R2 es donde se guardan tus imágenes, y <strong>hay que activarlo a mano en el panel antes de empezar</strong>. El script no puede pulsar ese botón por ti.</p>
<p>Abre <strong>R2</strong> en la barra lateral izquierda del panel de Cloudflare y actívalo.</p>
<p>⚠️ Seamos sinceros: <strong>algunas cuentas tienen que añadir una tarjeta o PayPal antes de activar R2</strong>. Tranquilo: añadirla no significa que te vayan a cobrar. <strong>El uso dentro del plan gratuito (10 GB de almacenamiento) no se cobra.</strong> Las imágenes de un blog personal difícilmente llegarán a agotarlo.</p>
<p>Justo aquí se atascó mi primer despliegue: el script se paró a mitad con un <code>10042</code> porque R2 no estaba activado. Lo activé, volví a ejecutarlo y pasó a la primera.</p>
<h2 id="paso-5-consigue-el-código">Paso 5: Consigue el código</h2>
<p>CF CMS es de código abierto y el código está en GitHub: <code>github.com/jemkuo/cf-cms</code></p>
<p>Elige una opción:</p>
<ul>
<li><strong>Recomendado</strong>: pulsa <strong>Fork</strong> en GitHub para copiarlo a tu propia cuenta; así te será fácil modificarlo después.</li>
<li>O clónalo directamente:</li>
</ul>
<pre class="code"><code class="language-bash">git clone https://github.com/jemkuo/cf-cms.git
cd cf-cms</code></pre>
<p>Necesitas tener instalado <strong>Node.js 20 o superior</strong> (descarga el instalador de la web oficial y sigue los pasos).</p>
<h2 id="paso-6-despliega-con-un-solo-comando">Paso 6: Despliega con un solo comando ⭐</h2>
<p>Este es el corazón del artículo. Primero, guarda el token del paso 3 en una variable de entorno (<strong>solo existe en tu terminal y el script nunca lo imprime</strong>):</p>
<pre class="code"><code class="language-bash">export CLOUDFLARE_API_TOKEN=pega-tu-token</code></pre>
<p>Y después, <strong>un solo comando</strong>:</p>
<pre class="code"><code class="language-bash">npm install &amp;&amp; ./scripts/setup.sh --project myblog --domain yourdomain.com</code></pre>
<p>Sustituye <code>myblog</code> por el nombre de proyecto que quieras y <code>yourdomain.com</code> por tu dominio.</p>
<p>¿No te fías? Añade <code>--dry-run</code> para hacer un ensayo que <strong>solo comprueba y no crea nada</strong>:</p>
<pre class="code"><code class="language-bash">./scripts/setup.sh --project myblog --domain yourdomain.com --dry-run</code></pre>
<h3 id="primero-hace-un-chequeo-médico">Primero hace un «chequeo médico»</h3>
<p>Antes de tocar nada, el script muestra una <strong>lista de comprobación previa</strong>: token, cuenta, Pages, D1, R2 y dominio, marcados uno por uno.</p>
<p><img src="/media/images/2026/10/9ca9725b-50b7-4b8b-b3e4-ed7e2a71ed4c.png" alt="Simulación de terminal de la comprobación previa de setup.sh: la primera ejecución falla con el error 10042 porque R2 no está activado; tras activar R2, la nueva ejecución pasa y avisa de registros DNS existentes en el dominio" loading="lazy" decoding="async"></p>
<ul>
<li><strong>Todo ✓</strong>: crea la base de datos D1, el bucket de R2, el proyecto de Pages y los secretos, y publica el sitio.</li>
<li><strong>Algún ✗</strong>: <strong>no crea absolutamente nada.</strong> Te dice qué paso falló, dónde corregirlo en el panel y qué comando volver a ejecutar, en chino y en inglés.</li>
<li><strong>No tienes que buscar tu account id</strong>: si el token solo ve una cuenta, el script la rellena por ti.</li>
</ul>
<h3 id="falló-a-mitad-vuelve-a-ejecutarlo">¿Falló a mitad? Vuelve a ejecutarlo</h3>
<p>El progreso se guarda en local en <code>.cf-cms-setup.json</code>. <strong>Al volver a ejecutarlo, sigue donde lo dejó.</strong> Los recursos de D1, R2 y Pages ya creados se reutilizan, nunca se duplican, y tus artículos no se borran.</p>
<h3 id="registros-antiguos-en-tu-dominio-primero-te-pregunta">¿Registros antiguos en tu dominio? Primero te pregunta</h3>
<p>Si tu dominio apuntaba antes a otro servidor, el script <strong>primero enumera los registros A / AAAA / CNAME antiguos y, por defecto, no los toca</strong>.</p>
<p>Cuando tengas claro que se pueden sustituir, vuelve a ejecutarlo con <code>--replace-dns</code> (o responde <code>y</code> en la pregunta) y los cambiará por un CNAME que apunta a Pages:</p>
<p><img src="/media/images/2026/10/311e3ccb-67f2-44e3-bdcf-b47ddc7c22fb.png" alt="Registros DNS antes y después: dos registros A que apuntan a un servidor antiguo se sustituyen por un CNAME con nube naranja hacia yourproject.pages.dev, y se conserva el registro TXT de verificación" loading="lazy" decoding="async"></p>
<p><strong>Ojo</strong>: tras el cambio, lo que el servidor antiguo ofrecía en este dominio deja de estar accesible. Los registros TXT y demás se conservan.</p>
<h3 id="cuando-termina">Cuando termina</h3>
<p>Lo último que imprime la terminal es la <strong>URL de Admin</strong>, así:</p>
<pre class="code"><code class="language-text">Admin:      https://yourdomain.com/&lt;ADMIN_SAFEPATH&gt;/admin/</code></pre>
<p>La contraseña del panel se <strong>genera al azar</strong> y se escribe en <code>.dev.vars</code>, dentro de la carpeta del proyecto. <strong>Nunca aparece en pantalla.</strong></p>
<p>👉 <strong>Guarda bien la URL de Admin junto con <code>.dev.vars</code>.</strong> Son las llaves de tu blog.</p>
<p>Si el estado del dominio aparece como <code>pending</code>, tranquilo. La emisión del certificado y la propagación del DNS suelen tardar unos minutos.</p>
<h2 id="paso-7-entra-al-panel-oculto-y-dale-tu-estilo">Paso 7: Entra al panel oculto y dale tu estilo</h2>
<p>Abre esa URL de Admin e introduce la contraseña:</p>
<p><img src="/media/images/2026/10/27918977-8d29-4389-831d-ba5b8c5c96c2.png" alt="Captura real de la página de inicio de sesión del panel oculto de CF CMS en yourdomain.com/&lt;ADMIN_SAFEPATH&gt;/admin/" loading="lazy" decoding="async"></p>
<p><strong>¿Por qué ocultarlo?</strong> La mayoría de los escáneres atacan <code>/admin</code> y <code>/wp-login</code>. El panel de CF CMS está detrás de una ruta aleatoria, así que <code>/admin</code> a secas devuelve 404 y ni siquiera se ve un formulario de acceso.</p>
<p>Una vez dentro, haz dos cosas:</p>
<ol>
<li><strong>Elige una plantilla</strong>: blog técnico personal (Dispatch, Signal), estilo de vida (Atelier, Hearth), web de empresa (Practice, Civic), empresa tecnológica (Launch, Orbit), además de las originales Paper, Ink y Terminal.</li>
<li><strong>Genera un kit visual con un clic</strong>: pulsa <strong>Generate visual kit</strong> para crear un <strong>logo, un favicon y un color de tema</strong> a juego con tu plantilla. ¿No te convence? Genera otro o pon tus propias imágenes.</li>
</ol>
<h2 id="paso-8-escribe-y-obtén-cinco-idiomas-automáticamente">Paso 8: Escribe y obtén cinco idiomas automáticamente</h2>
<p>Un sitio recién desplegado trae algunos artículos de ejemplo para que veas cómo queda:</p>
<p><img src="/media/images/2026/10/11177172-d757-4c54-b968-62443f0e7e0a.png" alt="Captura real de la portada del blog tras desplegar CF CMS, con la plantilla Paper por defecto y un selector de chino, inglés, japonés, español y árabe en la parte superior" loading="lazy" decoding="async"></p>
<p>Cuando los hayas visto, bórralos y escribe los tuyos:</p>
<ul>
<li>Escribe en <strong>Markdown</strong>: títulos, listas, bloques de código e imágenes funcionan sin problema</li>
<li>Sube las imágenes directamente; se guardan en R2</li>
<li><strong>Marca traducir al guardar</strong> y Workers AI genera las versiones en inglés, japonés, español y árabe (el árabe se maqueta de derecha a izquierda automáticamente)</li>
<li>Configura el SEO de cada artículo: palabras clave, URL canónica e imagen para compartir de Open Graph</li>
</ul>
<p><strong>Escribes una vez y te encuentran lectores en cinco idiomas.</strong> Eso no te lo ofrecen ni muchas grandes plataformas.</p>
<h2 id="el-día-a-día-deja-que-un-agente-de-ia-sea-tu-editor">El día a día: deja que un agente de IA sea tu editor</h2>
<p>Publicar es solo el principio. Lo que de verdad ahorra tiempo es que <strong>casi todo el mantenimiento diario se puede delegar en la IA</strong>.</p>
<h3 id="1-conecta-un-agente-de-ia-con-una-sola-frase">1. Conecta un agente de IA con una sola frase</h3>
<p>CF CMS trae un endpoint MCP integrado (<code>/mcp</code> en tu dominio). En Cursor, Claude o cualquier cliente compatible con MCP, <strong>pega la «descripción en una frase» que ya viene en el README del proyecto</strong>, añade el <code>ADMIN_API_TOKEN</code> de <code>.dev.vars</code>, y tu agente podrá:</p>
<ul>
<li>Listar, crear, editar, publicar y borrar artículos</li>
<li>Gestionar etiquetas, secciones, plantillas y el logo</li>
<li>Subir imágenes</li>
</ul>
<p>Una vez conectado, basta con decirle:</p>
<blockquote>
<p>«Crea un borrador en chino con el slug edge-notes en la sección notes y tradúcelo a los demás idiomas.»</p>
</blockquote>
<p><strong>Seguridad por diseño</strong>: <code>ADMIN_API_TOKEN</code> solo gestiona contenido. <strong>No puede desplegar ni tocar tu cuenta de Cloudflare.</strong> Por eso mismo el token de Cloudflare del paso 3 nunca debe ir al agente.</p>
<h3 id="2-rota-los-secretos-con-regularidad">2. Rota los secretos con regularidad</h3>
<p>¿Sospechas que se ha filtrado una contraseña o un token? Cámbialo con un comando:</p>
<pre class="code"><code class="language-bash">npx wrangler pages secret put ADMIN_PASSWORD --project-name myblog</code></pre>
<p>Lo mismo con <code>ADMIN_API_TOKEN</code> y <code>SESSION_SECRET</code>. Una vez terminado el despliegue, también puedes borrar o rotar el token de API de Cloudflare del paso 3 y crear uno nuevo la próxima vez que despliegues.</p>
<h3 id="3-ten-claros-los-límites-del-plan-gratuito">3. Ten claros los límites del plan gratuito</h3>
<table>
<thead>
<tr>
<th>Recurso</th>
<th>Para qué sirve en el blog</th>
<th>Cuota gratuita habitual</th>
</tr>
</thead>
<tbody><tr>
<td>Pages</td>
<td>Sitio y Functions</td>
<td>500 builds/mes, 100.000 peticiones de Functions/día</td>
</tr>
<tr>
<td>D1</td>
<td>Artículos, ajustes</td>
<td>5 GB, límites diarios de lectura/escritura de filas</td>
</tr>
<tr>
<td>R2</td>
<td>Imágenes</td>
<td>10 GB de almacenamiento, operaciones de lectura/escritura limitadas</td>
</tr>
<tr>
<td>Workers AI</td>
<td>Traducción al guardar</td>
<td>10.000 Neurons/día</td>
</tr>
</tbody></table>
<p>Consulta las cifras actuales en el panel de Cloudflare. <strong>El tráfico de un blog personal prácticamente nunca llega al techo.</strong> La traducción solo se ejecuta al guardar, no en cada visita, y la cuota de Workers AI se reinicia cada día.</p>
<h3 id="4-errores-frecuentes-de-un-vistazo">4. Errores frecuentes de un vistazo</h3>
<table>
<thead>
<tr>
<th>Lo que ves</th>
<th>Qué hacer</th>
</tr>
</thead>
<tbody><tr>
<td><code>✗ R2 is not enabled</code>, error <strong>10042</strong></td>
<td>Activa R2 en el panel (puede que primero tengas que añadir un método de pago) y vuelve a ejecutar</td>
</tr>
<tr>
<td>Token rechazado (<strong>10000</strong>) o sin permisos (<strong>9109</strong>, HTTP 403)</td>
<td>Añade los permisos de la lista del paso 3, vuelve a hacer <code>export</code> y ejecuta de nuevo</td>
</tr>
<tr>
<td>Dominio atascado en <strong>pending</strong></td>
<td>Revisa los registros A / AAAA / CNAME antiguos que muestra el script y, cuando estés seguro, vuelve a ejecutar con <code>--replace-dns</code>; con el DNS ya correcto, el certificado aún tarda unos minutos</td>
</tr>
<tr>
<td>Nombre de proyecto de Pages ocupado</td>
<td>Elige otro nombre con <code>--project</code></td>
</tr>
<tr>
<td>D1, R2 o Pages ya existen</td>
<td>Vuelve a ejecutar sin más; los recursos con el mismo nombre se reutilizan</td>
</tr>
<tr>
<td>Error de red</td>
<td>Comprueba la conexión y vuelve a ejecutar; los pasos completados se saltan</td>
</tr>
</tbody></table>
<p><strong>Quédate con una regla: si algo falla, lee el mensaje, corrígelo y vuelve a ejecutar.</strong> El script te dice dónde corregir y qué ejecutar.</p>
<h2 id="sobre-lo-de-cero-conocimientos-técnicos-con-sinceridad">Sobre lo de «cero conocimientos técnicos», con sinceridad</h2>
<p>Es verdad que en este proceso vas a abrir una terminal y escribir algunos comandos.</p>
<p>Pero <strong>no necesitas entender</strong> qué hacen. Lo único que tienes que hacer es:</p>
<ol>
<li>Copiar el comando</li>
<li>Pegarlo en la terminal</li>
<li>Pulsar Enter y fijarte en si aparece algún ✗</li>
</ol>
<p>La opción todavía más cómoda: <strong>dale este artículo y el README a tu agente de IA y deja que lo ejecute todo.</strong> Cuando se atasque, será porque necesita que pulses algo en el panel (como activar R2) o que confirmes algo (como sustituir el DNS). Solo tienes que seguir las indicaciones.</p>
<h2 id="hagamos-cuentas">Hagamos cuentas</h2>
<table>
<thead>
<tr>
<th>Concepto</th>
<th>Coste</th>
</tr>
</thead>
<tbody><tr>
<td>Dominio</td>
<td><strong>Desde unos pocos dólares al año</strong> (según la extensión)</td>
</tr>
<tr>
<td>Servidor</td>
<td>0 (Cloudflare Pages)</td>
</tr>
<tr>
<td>Base de datos</td>
<td>0 (plan gratuito de D1)</td>
</tr>
<tr>
<td>Almacenamiento de imágenes</td>
<td>0 (plan gratuito de R2)</td>
</tr>
<tr>
<td>Traducción a cinco idiomas</td>
<td>0 (plan gratuito de Workers AI)</td>
</tr>
<tr>
<td>Certificado HTTPS + CDN</td>
<td>0</td>
</tr>
<tr>
<td>Software CMS</td>
<td>0 (código abierto)</td>
</tr>
</tbody></table>
<p><strong>Aparte del dominio, no gastas ni un céntimo.</strong></p>
<h2 id="para-terminar">Para terminar</h2>
<p>Las plataformas te dan alcance, pero el terreno siempre es suyo.</p>
<p><strong>Un blog independiente es un activo digital de verdad tuyo</strong>: tu dominio, tu contenido y lectores que pueden encontrarte directamente.</p>
<p>Da hoy el primer paso: <strong>elige un dominio que te guste y sigue esta guía de principio a fin.</strong></p>
<p>¿Te has atascado en algún punto? Déjame un comentario. Y si el proyecto te resulta útil, una ⭐ para CF CMS en GitHub siempre se agradece.</p>
<p>En el próximo artículo: <strong>cómo dejar que un agente de IA gestione este blog por ti cada día</strong>.</p>
]]></content:encoded>
    <category>CF CMS</category>
    <category>Cloudflare</category>
    <category>Blog independiente</category>
    <category>Crear un sitio</category>
  </item>
</channel>
</rss>
