technical

Usa hreflang para SEO internacional

O MetricSpot conta as etiquetas <link rel=alternate hreflang>. Dizem ao Google qual URL serve cada idioma ou região, para que o correto apareça em cada mercado.

O que esta verificação faz

Analisa cada etiqueta <link rel="alternate" hreflang="…" href="…"> no <head> da página (e no sitemap XML, se existir). A verificação falha quando:

  • A página tem irmãs localizadas (outros URLs a servir o mesmo conteúdo num idioma diferente) mas sem declarações hreflang.
  • Os valores hreflang não são etiquetas BCP 47 válidas (en, en-US, es, de-AT, zh-Hant-TW).
  • A rede hreflang está partida: A aponta para B, B não aponta de volta para A.
  • Falta o x-default (recomendado como fallback internacional).

Porque é importante

O Google decide qual URL mostrar para uma pesquisa cruzando o idioma e a região do utilizador com a rede hreflang. Sem ela, três coisas correm mal:

  • Rankeia o URL errado. Um utilizador dos EUA a pesquisar em inglês vê a tua página em espanhol (ou vice-versa) porque o Google escolheu o URL com mais autoridade, não o que corresponde à localidade do utilizador.
  • Penalizações por conteúdo duplicado. Dois URLs com conteúdo quase idêntico (mesmo produto, cópia traduzida) competem entre si. O Google deixa cair um para evitar duplicados — por vezes o errado.
  • Quebras de CTR. Mesmo quando o utilizador aterra na página certa, um snippet em inglês para um utilizador espanhol reduz o click-through. O hreflang permite ao Google mostrar o snippet localizado.

Hreflang são metadados sem opinião — não influencia o ranking, apenas encaminha o URL certo para o utilizador certo.

Como corrigir

Cada página numa rede multilingue precisa de:

  • Listar todas as outras variantes dela própria, incluindo si mesma.
  • Ser listada por todas as outras variantes.
  • Incluir x-default para o idioma/região catch-all.

Exemplo: inglês (US por defeito), espanhol, alemão, x-default. Na página em inglês:

<link rel="alternate" hreflang="en" href="https://example.com/" />
<link rel="alternate" hreflang="es" href="https://example.com/es/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />

As mesmas quatro etiquetas têm de aparecer na página em espanhol, na página em alemão e em qualquer outra variante. Todas as quatro páginas declaram a rede inteira, incluindo a si próprias.

Astro:

---
const locales = ["en", "es", "de"] as const;
const path = Astro.url.pathname.replace(/^\/(es|de)\//, "/");
---
{locales.map(loc => (
  <link rel="alternate" hreflang={loc}
    href={`${Astro.site}${loc === "en" ? "" : loc + "/"}${path.slice(1)}`} />
))}
<link rel="alternate" hreflang="x-default" href={`${Astro.site}${path.slice(1)}`} />

Next.js:

// app/[locale]/page.tsx
export async function generateMetadata({ params }: { params: { locale: string }}) {
  const path = "/"; // ou o caminho da tua rota
  return {
    alternates: {
      canonical: `https://example.com${path}`,
      languages: {
        en: `https://example.com${path}`,
        es: `https://example.com/es${path}`,
        de: `https://example.com/de${path}`,
        "x-default": `https://example.com${path}`,
      },
    },
  };
}

WordPress — Polylang e WPML imprimem hreflang automaticamente assim que ligas cada tradução. WordPress Multisite precisa do plugin HREFLang Tags Lite ou equivalente.

Hreflang via sitemap — para sites com milhares de URLs localizados, declarar hreflang no sitemap é mais limpo do que em cada HTML:

<url>
  <loc>https://example.com/</loc>
  <xhtml:link rel="alternate" hreflang="en" href="https://example.com/"/>
  <xhtml:link rel="alternate" hreflang="es" href="https://example.com/es/"/>
  <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/"/>
  <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/"/>
</url>

Testa. Google Search Console → Insights → International Targeting sinaliza ligações de retorno em falta e etiquetas inválidas. Corre o hreflang.org ou o validador hreflang da Merkle para uma verificação pontual.

Perguntas frequentes

en vs en-US vs en-GB?

Usa a etiqueta mais ampla que se ajuste. en cobre todos os falantes de inglês; en-US aponta especificamente para inglês dos EUA. Se serves conteúdo idêntico a utilizadores do Reino Unido e dos EUA, declara en uma única vez — não en-US e en-GB separadamente, o que dilui o sinal e aumenta a manutenção.

Preciso de hreflang se o meu site é monolingue?

Não. Hreflang só é útil quando tens URLs em idiomas alternativos. Um site monolingue precisa de <html lang="…"> (ver Declarar o idioma da página) mas não de hreflang.

Para que serve o x-default?

É o catch-all. Quando o idioma do utilizador não corresponde a nenhum hreflang declarado, o Google encaminha-o para o URL x-default. Tipicamente é a homepage em inglês ou uma página de seleção de idioma.

Fontes

Última atualização 2026-05-11