Metadatos de imagen de OpenGraph en el generador de sitios estáticos Hugo
¿Cómo agregar metadatos de OpenGraph a Hugo?
Metadatos de imagen de Opengraph
es la propiedad meta og:image
.
Básicamente, queremos que se genere correctamente la etiqueta <meta property="og:image" content="https://....jpg">
para cada página en nuestro sitio web basado en Hugo.
Cómo se incluyen los metadatos de OpenGraph
Busca en el código de tu tema por
{{ template "_internal/opengraph.html" . }}
Probablemente ya lo está incluyendo. Si no se puede encontrar en ningún lugar, puedes intentar incluirlo tú mismo
- Crea o copia desde tu tema
layouts/_default/baseof.html
- Añade allí en algún lugar dentro de la etiqueta
<head>
:
<head>
.....
{{ template "_internal/opengraph.html" . }}
¿Listo? Ahora genera tu sitio con el comando hugo y comprueba el archivo producido index.html para alguna página.
hugo
head -100 public/post/test/index.html
¿No ves la etiqueta <meta property="og:image"...
allí, ¿verdad?
Bueno… hay algunas condiciones adicionales en la implementación estándar.
Documentación oficial de Hugo
https://gohugo.io/templates/embedded/#open-graph
- Básicamente, necesitas especificar en el frontmatter de la página las imágenes que deseas que se publiquen en los metadatos, por ejemplo
---
title: "Mi título de prueba de página de Hugo"
description: "Descripción de mi página de prueba de Hugo"
date: "2025-07-15"
lastmod: "2025-07-15"
tags:
- Hugo
- Imágenes
images:
- post-cover1.png
- post-cover2.png
---
Pero esto podría ser demasiado tarde, ya que ya tienes un sitio web con mil páginas. No te preocupes, hay otra opción.
- Almacena imágenes en tu carpeta de página con nombres especiales.
Ese _internal/opengraph.html
llama a _funcs/get-page-images.html
que busca en tu carpeta de página por archivos de imagen que contienen feature
(como feature.png
), y luego, si no se encuentra la imagen destacada, busca en archivos de imagen con nombres que contienen cover
o thumbnail
.
Parte de get-page-images.html:
{{- $featured := $resources.GetMatch "*feature*" -}}
{{- if not $featured }}{{ $featured = $resources.GetMatch "{*cover*,*thumbnail*}" }}{{ end -}}
{{- with $featured }}
{{- $imgs = $imgs | append (dict
"Image" .
"RelPermalink" .RelPermalink
"Permalink" .Permalink) }}
{{- end }}
- Recurso de imagen global del sitio web - tomará solo la primera imagen.
En algún lugar en hugo.toml
[params]
description = 'Mi increíble sitio web'
images = ['default-feature-image.jpg']
o en hugo.yaml si usas ese formato
params:
description: Mi increíble sitio web'
images:
- default-feature-image.jpg
Puedes encontrar ese código allí, en get-page-images.html:
{{- if and (not $imgParams) (not $imgs) }}
{{- with site.Params.images }}
{{- $imgParams = first 1 . }}
{{- end }}
{{- end }}
Este sitio web
Este sitio web, como ya has adivinado y puedes ver, también está usando Hugo. Aquí tengo imágenes de miniatura referenciadas en el frontmatter de la página de la manera estándar de Hugo/MainRoad:
thumbnail: this-page-thumbnail.jpg
Pero mis miniaturas ya están redimensionadas correctamente a un ancho de 235px… Ops… eso no es suficiente para la imagen de portada de la página. Y otras imágenes tienen todos nombres diferentes…
Hice la corrección de manera fácil - simplemente puse parámetros de imagen predeterminados en la configuración del sitio web. Y ahora todas las páginas antes de este post tienen la imagen de este pequeño clúster de Kubernetes como su metadato de opengraph:
Podría cambiar algo en el futuro, algo así como escribir un script automático para actualizar todas las secciones de frontmatter de las páginas, pero por ahora es suficiente.
Enlaces útiles
- Hoja de trucos de Hugo
- Manejo de imágenes en el tema Mainroad
- Cómo almacenar imágenes de miniatura en la carpeta de página para sitios web de Hugo con el tema Mainroad
- Implementar un sitio web generado por Hugo en AWS S3
- Añadir marcado de datos estructurados a Hugo
- Enviar un formulario de Google en un sitio web de Hugo
- Temas más populares para Hugo