Configurando SEO para Sites Multilíngues com Hugo

O que fazer com `canonical`, `lang` e `hreflang`

Conteúdo da página

Traduzindo seu site Hugo pode melhorar seu ranking no Google e Bing, mas apenas se o conteúdo traduzido for de alta qualidade, localizado e estruturado corretamente para SEO multilíngue.

Páginas localizadas (não apenas traduzidas, mas culturalmente adaptadas) frequentemente reduzem as taxas de rejeição, aumentam o tempo no site e melhoram as conversões. Estes são sinais de comportamento do usuário que podem afetar positivamente seu ranking de SEO.

muitas bandeiras de vários países em frente a um prédio administrativo

Hugo é um gerador de sites estáticos. Em essência, ele converte arquivos Markdown em páginas HTML de uma maneira muito configurável e é bastante rápido. Para detalhes, por favor veja aqui Hugo Cheat Sheet, e você também está convidado a explorar a lista de artigos relacionados ao Hugo na parte inferior desta página.

Pergunta principal: Você deve traduzir para SEO?

Cenário A tradução ajuda o SEO? Notas
Tradução humana + localizada + estruturada para SEO ✅ Sim, benefício forte Melhor opção
Tradução IA de alta qualidade + edição + hreflang ✅ Potencialmente Pode ranquear se a qualidade for boa
Apenas tradução automática + canonical ❌ Não Não ranqueará — usado apenas para UX
Tradução automática + sem canonical ou hreflang ⚠️ Risco Pode acionar penalidades por duplicidade

HTML necessário para sites com traduções literais (automatizadas)

  1. Cada página deve ter o atributo lang na tag html, por exemplo:
<html lang="de">
  1. Cada página deve ter uma lista de links alternativos para esta página em outros idiomas, por exemplo, o HTML abaixo descreve URLs alternativas para a mesma ou página similar em três idiomas:
<link rel="alternate" hreflang="en" href="https://www.glukhov.org/post/2025/10/multi-language-website-seo-with-hugo/">
<link rel="alternate" hreflang="de" href="https://www.glukhov.org/de/post/2025/10/multi-language-website-seo-with-hugo/">
<link rel="alternate" hreflang="ru" href="https://www.glukhov.org/ru/post/2025/10/multi-language-website-seo-with-hugo/">
  1. Cada página traduzida do site deve especificar a URL canônica para esta página (a da primeira ou do idioma da página original), como:
<link rel="canonical" href="https://www.glukhov.org/post/2025/10/multi-language-website-seo-with-hugo/">

Isso orientará os mecanismos de busca a não indexar páginas não canônicas. Alguns mecanismos de busca, é claro, podem ignorar isso e indexar todas as páginas.

Para páginas da web traduzidas profissionalmente / manualmente

Não especificar <link rel="canonical" pode causar que o mecanismo de busca imponha penalidades por duplicação. Mas se você fizer a tradução manual das páginas do seu site, ou encomendar uma tradução profissional, pode esperar que os mecanismos de busca aceitem sua página não canônica como original.

Modelos Hugo para sites localizados

Devemos ter em mente que o tema do site Hugo pode já suportar tudo isso.

<html lang=…

Abra o arquivo layouts/_default/baseof.html seja na pasta do seu site Hugo ou na pasta do seu tema e certifique-se de que haja algo como:

<!DOCTYPE html>
<html class="no-js" lang="{{ .Site.Language.Lang }}">
<head>
...
	{{ partial "seo-localise.html" . }}	
</head>
...

Agora abra o arquivo layouts/partials/seo-localise.html e coloque lá este código de modelo HTML:

{{ $defaultLang := .Site.Params.defaultContentLanguage | default "en" }}
{{ $canonical := .Permalink }}

{{ if .IsTranslated }}
  {{ $original := .Translations.GetByLang $defaultLang }}
  {{ if $original }}
    {{ $canonical = $original.Permalink }}
  {{ end }}

{{ end }}

<!-- Canonical URL -->
<link rel="canonical" href="{{ $canonical }}">

<!-- Hreflang Alternate Tags -->
{{ range .AllTranslations }}
    <link rel="alternate" hreflang="{{ .Lang }}" href="{{ .Permalink }}">
{{ end }}

Se você traduzir seu site manualmente, este código pode ficar assim:

{{ $canonical := .Permalink }}

<!-- Canonical URL -->
<link rel="canonical" href="{{ $canonical }}">

<!-- Hreflang Alternate Tags -->
{{ range .AllTranslations }}
    <link rel="alternate" hreflang="{{ .Lang }}" href="{{ .Permalink }}">
{{ end }}

config.toml

Em seu config.toml, certifique-se de configurar:

# configure languages on your website

defaultContentLanguage = "en"

[languages]
  [languages.en]
    weight = 1
    languageName = "English"

  [languages.es]
    weight = 2
    languageName = "Español"

  [languages.fr]
    weight = 3
    languageName = "Français"

Ajuste o acima com base nos idiomas do seu site.

Agora execute o comando hugo para gerar um site, depois hugo serve para executar o servidor web de desenvolvedor, abra o site e visualize o código-fonte da página. Certifique-se de que todas as tags <html> e <link> tenham atributos adequados.