Blog Con Hugo Y Github Pages

Table of Contents

La idea de este post es mostrar el paso a paso para obtener un Blog personal.

Está no es más que una de las tantas alternativas que existen allá afuera, sin embargo, con este método, obtendrás un Blog en la Web, sin costo y que te permite añadirle posts y páginas de forma sencilla, rápida y de manera automática.

Pre-Requisitos

Hugo: Primeros Pasos

Hugo es un framework que utilizaremos para tener una plantilla para nuestro blog. Entonces, el primer paso sería instalar HUGO

Lo ideal sería seguir los pasos de la página oficial Pero aquí te dejo un resumen en caso estés usando Linux

# Instalar Hugo usando snap
sudo snap install hugo
# Instalar Hugo usando apt
sudo apt install hugo

Nota: Para la primera alternativa deberás tener snap ya instalado

Para verificar la instalación:

$ hugo version
hugo v0.148.1-98ba786f2f5dca0866f47ab79f394370bcb77d2f+extended linux/amd64 BuildDate=2025-07-11T12:56:21Z VendorInfo=snap:0.148.1

Ahora es momento de elegir el tema que vas a utilizar. En mi caso voy a elegir el hugo-blog-awesome

A partir de aquí, toca ir personalizando nuestro tema: Pero básicamente es:

Crear un nuevo site llamado blogTest de forma local

hugo new site blogTest

Iniciamos nuestro git

git init

Clonamos el repositorio de hugo-blog-awesome dentro del directorio themes de tu nuevo site:

cd blogTest
git clone https://github.com/hugo-sid/hugo-blog-awesome.git themes/hugo-blog-awesome

El archivo es el archivo principal de configuración. Como primera linea de instrucción debes decirle que utilice el nuevo tema:

echo "theme = 'hugo-blog-awesome'" >> hugo.toml

Ya puedes tener una visualización inicial. Naturalmente aun no tendrá contenido pero ya podrás ir viendo la base de tu web de forma local:

hugo server

HUGO: Crear contenido

Es momento de crear el primer post. Para ello simplemente deberás ejecutar el comando:

hugo new content content/posts/my-first-post.md

Con esto se crea un archivo llamado my-first-post.md en la ruta content/posts/. Puedes observar que dicho archivo tendrá una cabecera muy parecida a esta:

+++
date = '2025-07-17T22:43:50-05:00'
draft = true
title = 'My First Post'
+++

Notarás también una línea que dice draft = true, lo que significa que tu post está en borrador y no será publicado.

Si lo que quieres el verlo en borrador, simplemente ejecutarás

hugo server -D

Si consideras que ya está listo para publicar, simplemente deberás borrar la línea y usar el comando antes visto:

hugo server

HUGO: Personalizando Tema

Es importante revisar el README.md del tema de HUGO que hayas elegido. En este caso podemos notar que el tema hugo-blog-awesome menciona que entre sus archivos tiene un ejemplo.

Ahí podrás encontrar un hugo.toml. El cual es el principal archivo de configuración que deberás modificar para generar los cambios y personalizaciones que veas conveniente.

En este caso utilízalo como guía para hacer los cambios que veas conveniente.

Para comenzar, creo que los cambios más importantes son los siguientes:

Directorio del Contenido

El primer paso es definir el directorio del contenido contentDir. Se suele crear sub directorios cuando se trabaja con diferentes idiomas pero dado que este es un blog de iniciación, lo dejaremos con un solo directorio:

contentDir = "content"

Barra de Menú

Ahora toca definir lo que quieres que muestra la barra de menú. Por lo general se coloca un Home, Posts y About.

Esto se traduce en añadir las siguientes líneas en tu hugo.toml:

[Languages.en-gb]
  languageName = "English"
  languageCode = "en-gb"
  contentDir = "content"
  weight = 1

  [Languages.en-gb.menu]
  [[Languages.en-gb.menu.main]]
    # The page reference (pageRef) is useful for menu highlighting
    # When pageRef is set, setting `url` is optional; it will be used as a fallback if the page is not found.
    pageRef="/"
    name = 'Home'
    url = '/'
    weight = 10
  [[Languages.en-gb.menu.main]]
    pageRef="posts"
    name = 'Posts'
    url = '/posts/'
    weight = 20
  [[Languages.en-gb.menu.main]]
    pageRef="about"
    name = 'About'
    url = '/about/'
    weight = 30

NOTA: Hemos dejado los encabezados que vienen en el ejemplo, no hace falta preocuparse por que diga languageCode = "en-gb". Tu contenido puede tranquilamente estar en español si ningún problema.

Con esto estamos añadiendo una barra de menú my parecida a esta:

Imagen Miniatura y Título de la Página

Es momento de colocar una pequeña imagen y un título a gusto personal en el centro.

Para ello simplemente deberás colocar una imagen dentro del directorio assets/ y mantener el nombre, formato y tamaño de la imagen (628x640)

ls assets/
avatar.jpg

Finalmente añadir las siguientes lineas al ya conocido hugo.toml

  [Languages.en-gb.params.author]
  avatar = "avatar.jpg" # put the file in assets folder; also ensure that     image has same height and width
  # Note: image is not rendered if the resource(avatar image) is not found.   No error is displayed.
  intro = "BLOG DE PRUEBA"
  name = "BlogTest"
  description = "Un blog sencillo y minimalista realizado durante una         prueba"

Añadiendo Redes Sociales y Go to Top

Ya para terminar de personalizar el blog, puedes colocar algunas redes sociales a modo de enlaces.

Además, algo útil es colocar una flecha para ir al inicio de un post cuando ya has terminado de leer y te encuentras bastante abajo de la página.

Añade las lineas al hugo.toml

[[params.socialIcons]]
name = "github"
url = "https://github.com/rodosilva"

[[params.socialIcons]]
name = "linkedin"
url = "https://linkedin.com/in/rodrigo-silva-alegria"

[Languages.en-gb.params]
goToTop = true

HUGO: Archivo de Configuración Final

Con todo lo antes visto, terminarás teniendo un archivo de hugo.toml parecido a este:

baseURL = 'https://example.org/'
languageCode = 'en-us'
title = 'My New Hugo Site'
theme = 'hugo-blog-awesome'

[Languages.en-gb]
languageName = "English"
languageCode = "en-gb"
contentDir = "content"
weight = 1

[Languages.en-gb.menu]
[[Languages.en-gb.menu.main]]
# The page reference (pageRef) is useful for menu highlighting
# When pageRef is set, setting `url` is optional; it will be used as a fallback if the page is not found.
pageRef="/"
name = 'Home'
url = '/'
weight = 10
[[Languages.en-gb.menu.main]]
pageRef="posts"
name = 'Posts'
url = '/posts/'
weight = 20
[[Languages.en-gb.menu.main]]
pageRef="about"
name = 'About'
url = '/about/'
weight = 30

[Languages.en-gb.params]
goToTop = true

[Languages.en-gb.params.author]
avatar = "avatar.jpg" # put the file in assets folder; also ensure that image has same height and width
# Note: image is not rendered if the resource(avatar image) is not found. No error is displayed.
intro = "BLOG DE PRUEBA"
name = "BlogTest"
description = "Un blog sencillo y minimalista realizado durante una prueba"

[[params.socialIcons]]
name = "github"
url = "https://github.com/rodosilva"

[[params.socialIcons]]
name = "linkedin"
url = "https://linkedin.com/in/rodrigo-silva-alegria"

Y una apariencia similar a esta: