Metadados de imagem OpenGraph no gerador de sites estáticos Hugo
Como adicionar metadados OpenGraph ao Hugo?
Metadados da imagem Opengraph
é a propriedade meta og:image.
Basicamente, queremos gerar corretamente a tag <meta property="og:image" content="https://....jpg"> para cada página no nosso site baseado em Hugo.

Como incluir metadados OpenGraph
Pesquise no código do seu tema por:
{{ template "_internal/opengraph.html" . }}
Provavelmente já está incluído. Se não o encontrar em nenhum lugar, você pode tentar incluí-lo manualmente:
- Crie ou copie o arquivo
layouts/_default/baseof.htmldo seu tema - Adicione em algum lugar dentro da tag
<head>:
<head>
.....
{{ template "_internal/opengraph.html" . }}
Pronto? Agora gere seu site com o comando hugo e verifique o index.html produzido para alguma página.
hugo
head -100 public/post/test/index.html
Você não vê o <meta property="og:image"... ali, correto?
Ok… existem mais algumas condições na implementação padrão.
Documentação oficial do Hugo
https://gohugo.io/templates/embedded/#open-graph
- Basicamente, você precisa especificar no frontmatter da página as imagens que deseja publicar nos metadados, por exemplo:
---
title: "Título da minha página de teste Hugo"
description: "Descrição da minha página de teste Hugo"
date: "2025-07-15"
lastmod: "2025-07-15"
tags:
- Hugo
- Imagens
images:
- post-cover1.png
- post-cover2.png
---
Mas isso pode ser tarde demais, pois você já pode ter um site com milhares de páginas. Não se preocupe, existe outra opção.
- Armazene imagens em seu pacote de página (page bundle) com nomes especiais.
Aquele _internal/opengraph.html chama _funcs/get-page-images.html, que procura no seu pacote de página por arquivos de imagem que contenham feature (como feature.png); em seguida, se a imagem de destaque não for encontrada, procura por arquivos de imagem com nomes contendo cover ou thumbnail.
Parte do 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 }}
- Fallback para parâmetros globais do site – pegará apenas a primeira imagem.
Em algum lugar no hugo.toml:
[params]
description = 'Meu site incrível'
images = ['default-feature-image.jpg']
ou no hugo.yaml, caso você use isso:
params:
description: Meu site incrível'
images:
- default-feature-image.jpg
Você pode encontrar esse código ali, no get-page-images.html:
{{- if and (not $imgParams) (not $imgs) }}
{{- with site.Params.images }}
{{- $imgParams = first 1 . }}
{{- end }}
{{- end }}
Este site
Como você deve ter adivinhado e pode ver, este site também utiliza Hugo. Aqui, tenho imagens de miniatura referenciadas no frontmatter da página da maneira padrão do Hugo/MainRoad:
thumbnail: this-page-thumbnail.jpg
Mas minhas miniaturas já foram redimensionadas para uma largura de 235px… Ops… isso não é suficiente para a imagem de capa da página. E outras imagens têm todos os nomes diferentes…
Fiz a correção da maneira fácil – apenas coloquei no config do site os parâmetros de imagem padrão. E agora todas as páginas anteriores a este post têm a imagem deste pequeno cluster Kubernetes como seu metadado opengraph:

Posso mudar algo no futuro, tipo escrever algum script automático para atualizar todas as seções de frontmatter das páginas, mas por enquanto é suficiente.
Links úteis
- Hugo Cheat Sheet
- Tratamento de imagens do tema Mainroad
- Como armazenar imagens de miniatura na pasta do pacote de página para sites Hugo com tema Mainroad
- Implantar site gerado pelo Hugo no AWS S3
- Adicionar marcação de dados estruturados ao Hugo
- Enviar Formulário Google em Site Hugo
- Temas mais populares para Hugo