Scribe

SEO multilíngue no Next.js: hreflang, sitemaps e fallbacks de idioma

Uma configuração prática para alternativas hreflang, x-default, sitemaps localizados, slugs traduzidos e cadeias de fallback de idioma em um site multilíngue Next.js.

View as Markdown

Traduzir seu conteúdo é apenas metade do trabalho no SEO multilíngue. A outra metade é mostrar aos motores de busca o que você fez: qual URL serve qual idioma, qual é o padrão e o que exibir quando um idioma ainda não tem tradução. Se você errar, o Google indexa suas páginas em francês para buscas em inglês ou trata dez traduções como conteúdo duplicado.

Aqui está o checklist que nós implementamos, e como o Scribe gera a maior parte dele a partir do conteúdo que ele já conhece.

Alternativas hreflang em todas as páginas

Toda página localizada deve declarar todas as páginas irmãs, incluindo ela mesma, além de um x-default apontando para a versão dos idiomas não correspondentes. No Next.js, isso fica no campo alternates.languages dos metadados da página.

A parte chata são os slugs traduzidos. Se /docs/getting-started é /fr/docs/premiers-pas em francês, seus links alternativos devem usar o slug localizado, e não o slug em inglês com um prefixo de idioma. O Scribe armazena o slug traduzido junto com cada tradução, e o helper alternates() em tempo de execução retorna o mapa completo por documento, então o código dos metadados é um loop e não uma tabela de consulta que você atualiza manualmente.

Duas regras evitam os erros mais comuns:

  • O hreflang precisa ser recíproco. Se a página em francês lista a em alemão, a em alemão precisa listar a em francês. Gerar ambos os lados a partir do mesmo repositório garante isso.
  • URLs canônicas devem referenciar a si mesmas por idioma. A canônica da página em francês é a URL em francês. Apontar a canônica de todos os idiomas para o inglês diz ao Google para remover suas traduções do índice.

Um sitemap que entende os idiomas

Cada entrada de URL no sitemap deve conter os mesmos links alternativos, além do x-default. O método sitemapEntries() do Scribe retorna uma entrada por documento com todas as URLs dos idiomas e um lastmod derivado dos campos nativos publishedAt e updatedAt, assim o sitemap se mantém preciso sem datas manuais.

Documentos que você aposenta não devem simplesmente desaparecer. O Scribe mantém os redirecionamentos em um _redirects.json por tipo, e as URLs aposentadas fazem um 301 para suas substitutas em todos os idiomas, o que preserva a autoridade de link que você conquistou.

Fallbacks de idioma em vez de 404s

O que o /fr-CA/guide deve exibir se você traduziu a página para o francês, mas não para o francês canadense? Um 404 desperdiça a tradução que você tem. Servir a página em inglês silenciosamente confunde os leitores.

O Scribe resolve isso automaticamente através de uma cadeia de fallback: um idioma regional recai sobre seu idioma base antes de ir para o inglês. fr-CA tenta fr, e depois en. zh-Hant-TW tenta zh-Hant, depois zh, depois en. A execução reporta qual idioma foi realmente servido no actualLocale, para que seu layout possa rotular a página de forma honesta, e os parâmetros pré-renderizados incluem as URLs de fallback para que as páginas existam no momento da build.

Metadados também são conteúdo

Títulos e meta descrições são superfícies de ranqueamento, então devem ser traduzidos com o mesmo cuidado que o corpo do texto. No Scribe, eles são campos normais e traduzíveis no frontmatter, com hash e validação como qualquer outra coisa. O prompt de tradução é focado em transcreation e não em tradução literal, o que importa para os 60 caracteres de uma tag de título mais do que em qualquer outro lugar.

A lição principal

Nada disso é novidade. É apenas organização: alternativas, canônicas, sitemaps, redirecionamentos e fallbacks, todos derivados de uma única pergunta: "qual documento existe em qual idioma e em qual URL". Um CMS que armazena traduções como dados de primeira classe pode responder a essa pergunta em um só lugar. Fazer as conexões manualmente entre um CMS hospedado, uma plataforma de tradução e o seu roteador é o que geralmente quebra o SEO multilíngue.

Veja como as peças se encaixam no guia da API de runtime, ou comece pelo guia de introdução.

SEO multilíngue no Next.js: hreflang, sitemaps e fallbacks de idioma · Scribe