<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>WordPress on kenji.blog</title><link>http://kenji.blog/es/tags/wordpress/</link><description>Recent content in WordPress on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>es</language><copyright>kenjinote</copyright><lastBuildDate>Sun, 13 Sep 2026 02:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/es/tags/wordpress/index.xml" rel="self" type="application/rss+xml"/><item><title>Introducción al generador de sitios estáticos Hugo (Guía de migración desde WordPress)</title><link>http://kenji.blog/es/p/hugo-static-site-generator-wordpress-migration/</link><pubDate>Sun, 13 Sep 2026 02:00:00 +0900</pubDate><guid>http://kenji.blog/es/p/hugo-static-site-generator-wordpress-migration/</guid><description>&lt;img src="http://kenji.blog/p/hugo-static-site-generator-wordpress-migration/img/eyecatch.jpg" alt="Featured image of post Introducción al generador de sitios estáticos Hugo (Guía de migración desde WordPress)" />&lt;p>En el desarrollo web moderno y la gestión de blogs, la velocidad de carga de un sitio, su seguridad y su mantenibilidad son factores extremadamente importantes. Durante mucho tiempo, &amp;ldquo;WordPress&amp;rdquo;, que ha tenido una cuota de mercado abrumadora como base para blogs y sitios web corporativos, ha sido utilizado por muchos usuarios debido a su flexible ecosistema de plugins y su panel de administración intuitivo. Sin embargo, debido a que implica la comunicación con bases de datos y la generación dinámica de páginas en el lado del servidor (procesamiento con PHP), también enfrenta desafíos como la vulnerabilidad ante aumentos repentinos de tráfico y retrasos en la visualización (latencia).&lt;/p>
&lt;p>Por lo tanto, en los últimos años, los &amp;ldquo;Generadores de Sitios Estáticos&amp;rdquo; (SSG: Static Site Generator) se han popularizado rápidamente. En este artículo, profundizaremos en &amp;ldquo;&lt;strong>Hugo&lt;/strong>&amp;rdquo;, desarrollado en el lenguaje Go y conocido por su abrumadora velocidad de construcción entre los muchos SSG disponibles. Explicaremos exhaustivamente desde la comparación técnica de arquitectura con CMS (Sistemas de Gestión de Contenidos) dinámicos como WordPress, hasta los pasos concretos de migración, evaluación de rendimiento mediante modelos matemáticos, la estructura de directorios propia de Hugo y el orden de búsqueda de plantillas.&lt;/p>
&lt;hr>
&lt;h2 id="1-diferencias-técnicas-entre-un-cms-dinámico-wordpress-y-un-generador-de-sitios-estáticos-hugo">1. Diferencias técnicas entre un CMS dinámico (WordPress) y un generador de sitios estáticos (Hugo)
&lt;/h2>&lt;p>En el mecanismo de entrega de sitios web, WordPress y Hugo adoptan enfoques fundamentalmente diferentes.&lt;/p>
&lt;h3 id="11-arquitectura-de-wordpress-generación-dinámica">1.1 Arquitectura de WordPress (Generación dinámica)
&lt;/h3>&lt;p>WordPress es un claro ejemplo de CMS dinámico que ensambla páginas en el lado del servidor con cada solicitud. Cuando hay un acceso a una página por parte de un usuario (navegador), el servidor web (Apache, Nginx, etc.) ejecuta un script PHP y realiza consultas a una base de datos relacional como MySQL (o MariaDB). Combina el contenido obtenido de la base de datos (datos de artículos, categorías, etiquetas, configuración del sitio, etc.) con archivos de plantillas para generar el HTML final y devolverlo al cliente.&lt;/p>
&lt;p>Este mecanismo tiene la ventaja de poder generar contenido diferente para cada visitante en tiempo real (por ejemplo: carrito de compras de comercio electrónico, página exclusiva para usuarios que han iniciado sesión), pero consume intensamente los recursos del servidor a menos que se diseñe adecuadamente un mecanismo de caché (como proxy inverso o plugins).&lt;/p>
&lt;h3 id="12-arquitectura-de-hugo-generación-previa-en-tiempo-de-construcción">1.2 Arquitectura de Hugo (Generación previa en tiempo de construcción)
&lt;/h3>&lt;p>Por otro lado, como su nombre indica, Hugo, un &amp;ldquo;generador de sitios estáticos&amp;rdquo;, genera contenido en el &amp;ldquo;tiempo de construcción&amp;rdquo; y no en el &amp;ldquo;tiempo de solicitud&amp;rdquo;. El contenido no se mantiene en una base de datos, sino como archivos locales &amp;ldquo;Markdown&amp;rdquo; controlados por versiones con herramientas como Git.
Cuando un desarrollador ejecuta el comando (&lt;code>hugo&lt;/code>), Hugo lee los archivos Markdown, inyecta los datos en plantillas HTML especificadas (archivos de diseño) y genera un conjunto completo de archivos HTML/CSS/JS puros.&lt;/p>
&lt;p>Los archivos generados (activos estáticos) se pueden entregar simplemente colocándolos en &amp;ldquo;entornos de alojamiento estático&amp;rdquo; como Amazon S3, Cloudflare Pages, Netlify, Vercel o un simple servidor Nginx. Como no se requiere una base de datos ni un lenguaje de lado del servidor (como PHP), los riesgos de seguridad (inyección SQL, vulnerabilidades de PHP, etc.) disminuyen drásticamente, y la velocidad de entrega se acelera al máximo al ser almacenada en caché en nodos de borde de una CDN (Content Delivery Network).&lt;/p>
&lt;p>A continuación, ilustramos la diferencia entre las dos arquitecturas con un diagrama Mermaid.&lt;/p>
&lt;pre class="mermaid">
flowchart TD
subgraph WordPress[&amp;#34;CMS Dinámico (WordPress)&amp;#34;]
direction TB
Req1[&amp;#34;Solicitud del usuario&amp;#34;] --&amp;gt; WebServer1[&amp;#34;Servidor web (Nginx/Apache)&amp;#34;]
WebServer1 --&amp;gt; PHP[&amp;#34;Entorno PHP&amp;#34;]
PHP &amp;lt;--&amp;gt; DB[&amp;#34;Base de datos (MySQL)&amp;#34;]
PHP --&amp;gt; HTML1[&amp;#34;Generación de HTML&amp;#34;]
HTML1 --&amp;gt; Res1[&amp;#34;Devolución de respuesta&amp;#34;]
end
subgraph Hugo[&amp;#34;Generador de Sitios Estáticos (Hugo)&amp;#34;]
direction TB
Dev[&amp;#34;Desarrollador / CI・CD&amp;#34;] --&amp;gt; HugoBuild[&amp;#34;Proceso de construcción de Hugo&amp;#34;]
Markdown[&amp;#34;Archivos Markdown&amp;#34;] --&amp;gt; HugoBuild
Templates[&amp;#34;Plantillas (HTML)&amp;#34;] --&amp;gt; HugoBuild
HugoBuild --&amp;gt; StaticFiles[&amp;#34;Archivos estáticos (HTML/CSS/JS)&amp;#34;]
StaticFiles --&amp;gt; CDN[&amp;#34;CDN / Alojamiento estático&amp;#34;]
Req2[&amp;#34;Solicitud del usuario&amp;#34;] --&amp;gt; CDN
CDN --&amp;gt; Res2[&amp;#34;Devolución de respuesta instantánea&amp;#34;]
end
&lt;/pre>
&lt;hr>
&lt;h2 id="2-evaluación-del-rendimiento-mediante-modelos-matemáticos">2. Evaluación del rendimiento mediante modelos matemáticos
&lt;/h2>&lt;p>Uno de los mayores beneficios de migrar de WordPress a Hugo es la mejora en el rendimiento (velocidad de carga). Para entender esto cuantitativamente, expresémoslo con un modelo matemático simple.&lt;/p>
&lt;p>El tiempo hasta que se completa la carga de una página (Load Time: $T_{load}$) se divide principalmente en el tiempo de respuesta del servidor (TTFB: Time To First Byte) y el tiempo de renderizado y obtención de recursos por parte del navegador ($T_{render}$).&lt;/p>
$$ T_{load} = T_{ttfb} + T_{render} $$&lt;p>En el caso de un CMS dinámico (WordPress), $T_{ttfb}$ es la suma de los siguientes elementos: latencia de la red ($T_{network}$), tiempo de ejecución del script del lado del servidor ($T_{php}$) y tiempo de procesamiento de consultas a la base de datos ($T_{db}$).&lt;/p>
$$ T_{ttfb\_wp} = T_{network} + T_{php} + T_{db} $$&lt;p>En un estado de accesos concentrados (alta carga), $T_{php}$ y $T_{db}$ aumentan de manera no lineal, y el sistema en su conjunto puede convertirse en un cuello de botella. Expresado en una fórmula, con respecto al número de solicitudes ($N$), se observa el siguiente deterioro en el tiempo de respuesta ($k$ es el coeficiente de sobrecarga de procesamiento).&lt;/p>
$$ T_{php}(N) \approx O(N^k), \quad T_{db}(N) \approx O(N^k) \quad \text{where } k > 1 $$&lt;p>Por otro lado, en una arquitectura que combina un generador de sitios estáticos (Hugo) y una CDN, no existe un procesamiento dinámico del lado del servidor (PHP o consultas DB). Dado que el contenido se almacena en caché en servidores de borde distribuidos por todo el mundo, $T_{ttfb}$ depende puramente de la latencia de la red desde el cliente hasta el servidor de borde más cercano ($T_{edge}$).&lt;/p>
$$ T_{ttfb\_hugo} = T_{edge} $$&lt;p>Con esto, se cumple $T_{edge} \ll (T_{network} + T_{php} + T_{db})$, y el TTFB se reduce drásticamente desde varios cientos de milisegundos a unas pocas decenas de milisegundos. Además, incluso si aumenta el número de solicitudes $N$, el tiempo de respuesta se mantiene casi constante ($O(1)$) debido a la función de equilibrio de carga de los servidores de borde.&lt;/p>
$$ \lim_{N \to \infty} T_{ttfb\_hugo}(N) \approx \text{Constant} $$&lt;p>Esta es la base matemática por la cual Hugo (un sitio estático) es extremadamente robusto contra picos de tráfico (como cuando el contenido se vuelve viral).&lt;/p>
&lt;hr>
&lt;h2 id="3-estructura-básica-y-principios-de-funcionamiento-de-hugo">3. Estructura básica y principios de funcionamiento de Hugo
&lt;/h2>&lt;p>Para dominar Hugo, es esencial comprender su estructura de directorios única y los conceptos de &amp;ldquo;Front Matter&amp;rdquo; y &amp;ldquo;Template Lookup Order&amp;rdquo; (Orden de búsqueda de plantillas).&lt;/p>
&lt;h3 id="31-explicación-detallada-de-la-estructura-de-directorios">3.1 Explicación detallada de la estructura de directorios
&lt;/h3>&lt;p>Cuando creas un nuevo proyecto de Hugo (&lt;code>hugo new site mysite&lt;/code>), se genera la siguiente estructura de directorios.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">mysite/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── archetypes/ # Plantillas al crear nuevo contenido (esqueleto de Front Matter)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── assets/ # Archivos procesados por Hugo Pipes (SCSS/Sass, JavaScript, etc.)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── content/ # Contenido real del sitio (archivos Markdown). Esto reemplaza a la DB.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── data/ # Datos externos y configuración usados en todo el sitio (JSON, TOML, YAML, CSV, etc.)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── layouts/ # Plantillas HTML que determinan la apariencia del sitio (utiliza Go html/template)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── public/ # Lugar donde se generan los archivos estáticos después de ejecutar el comando build
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── static/ # Archivos estáticos publicados tal cual (imágenes, favicon, txt para robots, etc.)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── themes/ # Directorio de temas de terceros o creados por uno mismo
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── hugo.toml # Archivo de configuración global del sitio (anteriormente config.toml era la norma)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>En WordPress, el contenido se almacena en la tabla &lt;code>wp_posts&lt;/code> de MySQL, pero en Hugo todo se gestiona como archivos de texto (principalmente Markdown) dentro del directorio &lt;code>content/&lt;/code>. Esto facilita el control de versiones (Git) del contenido.&lt;/p>
&lt;h3 id="32-gestión-de-contenido-markdown-y-front-matter">3.2 Gestión de contenido: Markdown y Front Matter
&lt;/h3>&lt;p>Cada archivo de artículo de Hugo tiene un bloque de metadatos llamado &amp;ldquo;Front Matter&amp;rdquo; en la parte superior, seguido del texto principal (Markdown). Front Matter se puede escribir en TOML, YAML o JSON, pero YAML es ampliamente utilizado.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">title&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Comprendiendo la taxonomía de Hugo&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">date&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="ld">2026-09-13T10:00:00&lt;/span>&lt;span class="m">+09&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="m">00&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">draft&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">categories&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;Explicación técnica&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">tags&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;Hugo&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;Go&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">aliases&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;/old-category/hugo-taxonomy/&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">A partir de aquí comienza el texto. Se escribe en **Markdown**.&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">Explicaremos las potentes funciones de Hugo...&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Aquí, un punto a destacar es la clave &lt;code>aliases&lt;/code>. Al migrar desde WordPress, si cambian los enlaces permanentes (URL), será una gran desventaja para el SEO. Si usas la función de alias de Hugo, con solo especificar la URL antigua, Hugo generará automáticamente el HTML de redireccionamiento (redirección mediante meta refresh). Es extremadamente útil, ya que no se requiere configuración de redirección en el lado del servidor (como .htaccess).&lt;/p>
&lt;h3 id="33-orden-de-búsqueda-de-plantillas-template-lookup-order">3.3 Orden de búsqueda de plantillas (Template Lookup Order)
&lt;/h3>&lt;p>Una de las potentes características de Hugo es su mecanismo flexible de búsqueda de plantillas (Template Lookup Order). Cuando Hugo renderiza una página específica, busca directorios y nombres de archivos en un orden particular para encontrar la mejor plantilla.&lt;/p>
&lt;p>Por ejemplo, al renderizar un artículo individual (Single Page) como &lt;code>content/post/hello-world.md&lt;/code>, Hugo busca el archivo de diseño aproximadamente en el siguiente orden:&lt;/p>
&lt;ol>
&lt;li>&lt;code>layouts/post/single.html&lt;/code>&lt;/li>
&lt;li>&lt;code>layouts/post/list.html&lt;/code> (no es un error, pero normalmente es para listas)&lt;/li>
&lt;li>&lt;code>layouts/_default/single.html&lt;/code>&lt;/li>
&lt;li>&lt;code>themes/&amp;lt;THEME_NAME&amp;gt;/layouts/post/single.html&lt;/code>&lt;/li>
&lt;li>&lt;code>themes/&amp;lt;THEME_NAME&amp;gt;/layouts/_default/single.html&lt;/code>&lt;/li>
&lt;/ol>
&lt;p>Los desarrolladores pueden &lt;strong>sobrescribir (override)&lt;/strong> las plantillas de un tema simplemente creando un archivo con el mismo nombre en el directorio &lt;code>layouts/&lt;/code> de su propio proyecto, sin tener que reescribir directamente el código fuente del tema. Esto permite aplicar personalizaciones propias sin obstaculizar la actualización del tema base.&lt;/p>
&lt;h3 id="34-taxonomía-taxonomy">3.4 Taxonomía (Taxonomy)
&lt;/h3>&lt;p>En Hugo, el sistema de clasificación equivalente a &amp;ldquo;Categorías&amp;rdquo; y &amp;ldquo;Etiquetas&amp;rdquo; de WordPress se llama &amp;ldquo;Taxonomía&amp;rdquo; (Taxonomy).
Hugo admite de forma predeterminada las taxonomías &lt;code>categories&lt;/code> y &lt;code>tags&lt;/code>, pero editando &lt;code>hugo.toml&lt;/code>, puedes agregar libremente taxonomías personalizadas (por ejemplo: &lt;code>series&lt;/code>, &lt;code>authors&lt;/code>, etc.).&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-toml" data-lang="toml">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Ejemplo de hugo.toml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="nx">taxonomies&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">category&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;categories&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">tag&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;tags&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">series&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;series&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">author&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;authors&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Esto permite organizar y listar el contenido bajo diversas perspectivas.&lt;/p>
&lt;hr>
&lt;h2 id="4-proceso-de-migración-de-wordpress-a-hugo">4. Proceso de migración de WordPress a Hugo
&lt;/h2>&lt;p>La clave del éxito al migrar de WordPress a Hugo es cómo convertir el contenido dinámico de la base de datos en archivos estáticos limpios (Markdown + Front Matter) y mantener la estructura de URL existente.&lt;/p>
&lt;p>A continuación se muestra el flujo general de la canalización de migración.&lt;/p>
&lt;pre class="mermaid">
flowchart LR
WPDB[&amp;#34;Base de datos WP&amp;#34;] --&amp;gt;|Plugin| Exporter[&amp;#34;Herramienta de exportación&amp;#34;]
Exporter --&amp;gt;|&amp;#34;Extrae texto, \nMetadatos, Imágenes&amp;#34;| ZipFile[&amp;#34;Archivo Zip / Carpeta&amp;#34;]
ZipFile --&amp;gt;|Unpack| MarkdownFiles[&amp;#34;Archivos Markdown \n(content/)&amp;#34;]
ZipFile --&amp;gt;|Unpack| ImageFiles[&amp;#34;Imágenes \n(static/wp-content/)&amp;#34;]
MarkdownFiles --&amp;gt; Formatting[&amp;#34;Revisión y formato \n(Corregir Shortcodes)&amp;#34;]
Formatting --&amp;gt; Git[&amp;#34;Commit a Git&amp;#34;]
&lt;/pre>
&lt;h3 id="41-extracción-de-datos-y-conversión-a-markdown">4.1 Extracción de datos y conversión a Markdown
&lt;/h3>&lt;p>Para exportar datos de WordPress a Hugo, usar un plugin dedicado es el método más sencillo y seguro. Presentamos algunos enfoques representativos:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Uso del plugin Jekyll Exporter&lt;/strong>
Como Hugo tiene una estructura de datos muy similar a Jekyll, otro SSG, utilizar el plugin &amp;ldquo;Jekyll Exporter&amp;rdquo; para WordPress es una práctica común. Al instalar y ejecutar este plugin, todas las entradas y páginas estáticas se convierten a archivos Markdown con Front Matter y se pueden descargar como un archivo ZIP junto con los archivos de imagen.&lt;/li>
&lt;li>&lt;strong>Script propio usando la API de WordPress&lt;/strong>
Este método consiste en usar Python, Node.js, etc., para hacer llamadas a la API REST de WordPress (&lt;code>/wp-json/wp/v2/posts&lt;/code>), analizar los datos JSON y crear un script para generar archivos Markdown. Es eficaz para sitios que utilizan en gran medida campos personalizados complejos (como ACF) que los plugins no pueden manejar completamente.&lt;/li>
&lt;li>&lt;strong>Aprovechamiento de la herramienta wp2hugo&lt;/strong>
También hay un enfoque para usar herramientas CLI escritas en lenguajes como Go para convertir directamente desde el archivo XML de exportación de WordPress (WXR) al formato de Hugo.&lt;/li>
&lt;/ol>
&lt;h3 id="42-mantenimiento-de-la-estructura-de-enlaces-permanentes-url">4.2 Mantenimiento de la estructura de enlaces permanentes (URL)
&lt;/h3>&lt;p>Para heredar la evaluación de SEO, es extremadamente importante mantener la estructura de URL de la era de WordPress tal como está. Si habías configurado enlaces permanentes en WordPress como &lt;code>https://example.com/2026/09/13/my-post/&lt;/code>, debes especificar la estructura de enlaces permanentes en el archivo &lt;code>hugo.toml&lt;/code> de Hugo.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-toml" data-lang="toml">&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="nx">permalinks&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">post&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;/:year/:month/:day/:slug/&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Alternativamente, es posible fijar la URL de forma forzada especificando directamente el parámetro &lt;code>url&lt;/code> en el Front Matter de cada artículo.
Además, para las páginas cuyas URL cambiarán, configuras redirecciones usando los &lt;code>aliases&lt;/code> mencionados anteriormente.&lt;/p>
&lt;h3 id="43-conversión-de-shortcodes-códigos-cortos">4.3 Conversión de Shortcodes (códigos cortos)
&lt;/h3>&lt;p>Los shortcodes específicos de WordPress (por ejemplo: &lt;code>[gallery]&lt;/code>, &lt;code>[caption]&lt;/code>, códigos únicos de varios plugins) a menudo permanecen como cadenas de texto tras la exportación, por lo que es necesario abordarlos.
Estos se pueden eliminar por completo mediante scripts de reemplazo (sed o Python) o se pueden migrar utilizando la poderosa &lt;strong>función de shortcodes personalizados&lt;/strong> de Hugo (creando diseños propios en &lt;code>layouts/shortcodes/&lt;/code>) para que se rendericen adecuadamente en el lado de Hugo.&lt;/p>
&lt;hr>
&lt;h2 id="5-herramienta-cli-de-hugo-y-construcción--despliegue">5. Herramienta CLI de Hugo y construcción / despliegue
&lt;/h2>&lt;p>Una vez que se completan las tareas de migración, es hora de usar Hugo para construir el sitio y publicarlo para el mundo. Hugo, que se proporciona como un binario de Go, presume de una velocidad asombrosa, completando la construcción en unos pocos segundos incluso para sitios de miles a decenas de miles de páginas.&lt;/p>
&lt;h3 id="51-inicio-del-servidor-de-desarrollo-local">5.1 Inicio del servidor de desarrollo local
&lt;/h3>&lt;p>Cuando escribas artículos o ajustes el diseño, inicia el servidor local.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Comando de inicio del servidor de desarrollo (usa -D para incluir borradores)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hugo server -D
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Al ejecutar este comando, podrás previsualizar el sitio en &lt;code>http://localhost:1313/&lt;/code>. Hugo tiene una poderosa función integrada llamada &amp;ldquo;LiveReload&amp;rdquo;; en el momento en que edites y guardes un archivo Markdown, plantilla o CSS, la pantalla del navegador se actualizará automáticamente a alta velocidad. Como resultado, la experiencia de escritura y desarrollo se vuelve mucho más cómoda que el panel de administración de WordPress.&lt;/p>
&lt;h3 id="52-construcción-para-producción-y-optimización-de-rendimiento">5.2 Construcción para producción y optimización de rendimiento
&lt;/h3>&lt;p>Para generar archivos estáticos que se desplegarán en un entorno de producción, simplemente escribe &lt;code>hugo&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Ejecución de la compilación para producción. Minimiza HTML/CSS/JS con la opción --minify&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hugo --minify
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Con este comando, los archivos de todo el sitio se generarán en el directorio &lt;code>public/&lt;/code>. Al agregar la opción &lt;code>--minify&lt;/code>, se eliminan los saltos de línea y espacios innecesarios, lo que reduce aún más el tamaño de los archivos. Esto contribuye directamente a reducir la latencia de la red ($T_{network}$) en el modelo matemático mencionado anteriormente.&lt;/p>
&lt;h3 id="53-automatización-del-despliegue-cicd">5.3 Automatización del despliegue (CI/CD)
&lt;/h3>&lt;p>Generar archivos estáticos localmente cada vez y subirlos por FTP, etc., es ineficiente. En las operaciones modernas de SSG, la mejor práctica es construir un entorno de CI/CD que realice automáticamente la construcción y el despliegue cuando se desencadena por un push a un repositorio Git (como GitHub).&lt;/p>
&lt;p>Por ejemplo, la forma básica de una configuración (archivo YAML) para implementar en Cloudflare Pages o GitHub Pages usando GitHub Actions es la siguiente:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Ejemplo de .github/workflows/hugo.yml&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Deploy Hugo site to GitHub Pages&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">on&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">push&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">branches&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;main&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">workflow_dispatch&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">permissions&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">contents&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">read&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">pages&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">write&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id-token&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">write&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">jobs&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">build&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">runs-on&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ubuntu-latest&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">steps&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Checkout&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">uses&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">actions/checkout@v3&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">with&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">submodules&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">recursive&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># Si los temas se administran como submódulos&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">fetch-depth&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">0&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Setup Hugo&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">uses&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">peaceiris/actions-hugo@v2&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">with&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">hugo-version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;latest&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">extended&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Build&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">run&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">hugo --minify&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Upload artifact&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">uses&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">actions/upload-pages-artifact@v2&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">with&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">path&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">./public&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">deploy&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">environment&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">github-pages&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">url&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">${{ steps.deployment.outputs.page_url }}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">runs-on&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ubuntu-latest&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">needs&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">build&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">steps&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Deploy to GitHub Pages&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">deployment&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">uses&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">actions/deploy-pages@v2&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Configurándolo de esta manera, se completará un canal de automatización en el que solo con &amp;ldquo;escribir un artículo en Markdown y hacer Push a GitHub&amp;rdquo;, el sitio más reciente se publicará en el entorno de producción en unos pocos minutos.&lt;/p>
&lt;hr>
&lt;h2 id="6-beneficios-de-seo-y-operativos-tras-la-migración">6. Beneficios de SEO y operativos tras la migración
&lt;/h2>&lt;p>Los administradores de sitios que han completado la migración de WordPress a Hugo a menudo notan los tres siguientes beneficios significativos.&lt;/p>
&lt;h3 id="61-mejora-drástica-de-la-velocidad-del-sitio-y-los-core-web-vitals">6.1 Mejora drástica de la velocidad del sitio y los Core Web Vitals
&lt;/h3>&lt;p>Como resultado de eliminar las consultas a la base de datos y la renderización en el servidor, el tiempo de carga de la página se reduce a milisegundos. Esto se traduce directamente en una mejora masiva de las puntuaciones de &amp;ldquo;Core Web Vitals&amp;rdquo; (LCP, FID/INP, CLS), que son factores de clasificación de Google. Se puede esperar una reducción en la tasa de rebote de los usuarios y una mejora en la evaluación del SEO.&lt;/p>
&lt;h3 id="62-liberación-de-amenazas-de-seguridad">6.2 Liberación de amenazas de seguridad
&lt;/h3>&lt;p>Dado que WordPress se usa ampliamente en todo el mundo, siempre es objeto de ataques. Siempre existe el riesgo de manipulación de vulnerabilidades de plugins e intentos de inicio de sesión por ataques de fuerza bruta.
Sin embargo, un sitio estático generado por Hugo no tiene base de datos, entorno PHP ni pantalla de administración (formulario de inicio de sesión). No hay espacio para que un hacker ingrese al servidor y reescriba la base de datos, con lo que los riesgos de seguridad se acercan a cero al máximo.&lt;/p>
&lt;h3 id="63-operación-libre-de-mantenimiento">6.3 Operación libre de mantenimiento
&lt;/h3>&lt;p>La operación de WordPress requiere tareas de mantenimiento continuas, como la actualización del propio núcleo, la actualización de plugins y el seguimiento de las versiones de PHP. Siempre hay que temer el riesgo de que el sitio se rompa debido a problemas de compatibilidad.
En el caso de Hugo, solo necesitas actualizar la herramienta en sí cuando sea necesario, y dado que el código del sitio está compuesto de archivos de texto independientes, ofrece la abrumadora tranquilidad de saber que &amp;ldquo;no se romperá aunque lo dejes desatendido&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="7-resumen">7. Resumen
&lt;/h2>&lt;p>En este artículo, hemos explicado en detalle la migración de un CMS dinámico como WordPress al poderoso generador de sitios estáticos basado en Go, &amp;ldquo;Hugo&amp;rdquo;, abordando desde las diferencias de arquitectura técnica y la demostración matemática del rendimiento hasta los pasos de migración específicos.&lt;/p>
&lt;p>Migrar a un generador de sitios estáticos conlleva un costo inicial de aprendizaje (manejo de Git, sintaxis de Markdown, ejecución de comandos CLI en terminales, comprensión del funcionamiento del motor de plantillas), pero los beneficios compensan con creces mediante su &amp;ldquo;abrumadora velocidad de visualización&amp;rdquo;, &amp;ldquo;seguridad sólida&amp;rdquo; y la característica de ser &amp;ldquo;libre de mantenimiento&amp;rdquo;.&lt;/p>
&lt;p>Si tu sitio web no requiere cambios de diseño frecuentes ni procesos dinámicos complejos (como funciones exclusivas para miembros o características avanzadas de comercio electrónico) y su propósito es principalmente transmitir información (blogs, medios, sitios corporativos), migrar a Hugo será una de las inversiones técnicas más efectivas. Te animamos a usar este artículo como guía para dar tu primer paso en la operación de un sitio web de próxima generación con Hugo.&lt;/p></description></item></channel></rss>