Live · status OK
Back to blog
SEO e AEO14 min

SEO multilingue e hreflang na prática: guia de experiência 11 línguas

TL;DR

O SEO multilingue falha em 70% dos casos por falta de hreflang recíproco ou arquitetura URL incoerente. Stack 2026: URLs com subpasta /lang/ (sem domínios geográficos exceto em casos específicos), hreflang nos Metadata Next.js + sitemap, x-default para a língua de fallback, traduções humanas (não automáticas) nas 50 páginas prioritárias, content adaptation por mercado. O nosso site optionweb.dev opera 11 línguas em produção há 18 meses.

Julien Daniel
ByJulien Daniel
Founder & CTO, OptionWeb
Share
Globo com setas a ligar 11 bandeiras de países para SEO multilingue

O nosso site optionweb.dev funciona em 11 línguas há 18 meses — FR, NL, EN, DE, ES, IT, PT, SQ, AR, MK, TR. Esta entrada em produção fez-nos descobrir todas as armadilhas do SEO multilingue que nenhum guia teórico menciona. Eis o retorno de experiência completo e a metodologia que aplicamos agora a todos os projetos internacionais de clientes na OptionWeb.

1. Arquitetura URL: subpasta vs subdomínio vs ccTLD

Três opções de arquitetura para um site multilingue. A escolha inicial impacta tudo o resto:

ArquiteturaExemploVantagensDesvantagens
Subpastasite.com/fr/, /en/1 domínio = equity partilhada, simples de configurarSem sinal geográfico forte
Subdomíniofr.site.com, en.site.comConfiguração DNS separável, equipas locaisEquity backlinks parcialmente separada
ccTLDsite.fr, site.be, site.deSinal geográfico máx, branding localCusto domínios + infraestrutura × N países

Recomendação 2026: subpasta /lang/ para 90% das PME e empresas. É a nossa escolha em optionweb.dev. ccTLD apenas se for a Amazon ou IKEA.

2. Hreflang: a reciprocidade não é negociável

Hreflang é a tag meta que diz ao Google que versão da página servir a que utilizador consoante língua/país. Sem hreflang correto, o Google ranqueia uma única versão (geralmente EN) e ignora as outras = perda massiva de tráfego internacional.

Regra absoluta: a reciprocidade. Se /fr/ aponta para /en/, então /en/ deve apontar de volta para /fr/. Sem reciprocidade, o Google ignora TODOS os hreflang na página.

app/[lang]/page.tsxtsx
export async function generateMetadata({ params }: Props): Promise<Metadata> {
  const { lang } = params;

  return {
    title: t('home.title', { lng: lang }),
    alternates: {
      canonical: `https://optionweb.dev/${lang}`,
      languages: {
        'fr': 'https://optionweb.dev/fr',
        'nl': 'https://optionweb.dev/nl',
        'en': 'https://optionweb.dev/en',
        'de': 'https://optionweb.dev/de',
        'es': 'https://optionweb.dev/es',
        'it': 'https://optionweb.dev/it',
        'pt': 'https://optionweb.dev/pt',
        'sq': 'https://optionweb.dev/sq',
        'ar': 'https://optionweb.dev/ar',
        'mk': 'https://optionweb.dev/mk',
        'tr': 'https://optionweb.dev/tr',
        'x-default': 'https://optionweb.dev/en',
      },
    },
  };
}

Formato dos códigos hreflang: ISO 639-1 (língua, ex: 'fr') OU ISO 639-1 + ISO 3166-1 (língua-país, ex: 'fr-BE'). O formato língua-país visa um mercado preciso. Usar apenas a língua chega em 90% dos casos.

3. x-default e fallback de língua

O atributo x-default indica a versão a servir se a língua do utilizador não estiver na lista hreflang. É o seu 'lifeguard' SEO: sem x-default, um utilizador japonês que chega ao seu site multilingue vê uma página aleatória conforme o algoritmo Google.

Boa prática: apontar x-default para a língua de fallback mais universal (frequentemente EN), ou para uma página de seleção de língua se tiver uma.

4. Sitemap multilingue ou sub-sitemaps

Duas abordagens consoante o volume:

  • Sitemap único com hreflang xhtml:linkPara <5000 URLs total. Cada URL lista as suas variantes via xhtml:link. Pesado mas centralizado.
  • Sub-sitemaps por língua + sitemap_indexPara >5000 URLs. Um sitemap.xml por língua (sitemap-fr.xml, sitemap-en.xml...), todos referenciados em sitemap_index.xml.
app/sitemap.tsts
export const dynamic = 'force-static';

export default function sitemap(): MetadataRoute.Sitemap {
  const SUPPORTED_LANGS = ['fr','nl','en','de','es','it','pt','sq','ar','mk','tr'];
  const PAGES = ['', '/blog', '/services', '/contact'];

  const urls: MetadataRoute.Sitemap = [];

  for (const page of PAGES) {
    for (const lang of SUPPORTED_LANGS) {
      urls.push({
        url: `https://optionweb.dev/${lang}${page}`,
        lastModified: new Date(),
        alternates: {
          languages: Object.fromEntries(
            SUPPORTED_LANGS.map(l => [l, `https://optionweb.dev/${l}${page}`])
          ),
        },
      });
    }
  }

  return urls;
}

5. Language detection: auto-redirect ou escolha do utilizador

Quando um novo visitante chega à sua raiz optionweb.dev/, tem 3 opções:

  1. Auto-redirect baseado em header Accept-Language → /fr/, /en/, etc. (UX arriscada mas conversão máx)
  2. Página de escolha de língua com cookie de memorização (UX explícita, penaliza conversão inicial)
  3. Fallback x-default + banner 'Switch to your language?' (compromisso recomendado)

A nossa escolha em optionweb.dev: opção 3. A raiz / redireciona para /fr/ (língua por defeito), com um banner discreto que propõe trocar se Accept-Language indicar outra língua suportada. Cookie de memorização para não voltar a propor a troca a cada visita.

6. Estratégia de tradução: humana vs automática

É a questão orçamental principal do SEO multilingue. Três opções consoante prioridade de negócio:

AbordagemCusto/páginaQualidade SEOQuando usar
Tradução humana profissional15-50 €ExcelenteTop 20-50 páginas estratégicas
Machine translation pós-editado (MTPE)5-15 €BoaPáginas secundárias, blog volumoso
Machine translation bruto (DeepL, Google)0,001 €MedíocreRascunhos, conteúdo pouco crucial

Plano recomendado para PME exportadora: top 30 páginas em tradução humana profissional, blog em MTPE, resto em MT bruto marcado noindex até edição humana. Orçamento inicial: 1 500-5 000 € para o top 30 páginas × 10 línguas.

7. As 8 armadilhas do multilingue (vividas em produção)

Lista dos erros que cometemos ou vimos em projetos clientes em 18 meses:

  1. Hreflang não recíproco: o Google ignora tudo. Auditoria mensal obrigatória com Merkle Tool.
  2. Auto-redirect agressivo baseado em IP geográfico: utilizador francês de férias vê turco.
  3. Traduções automáticas brutas em páginas de produto: conversão a colapsar, sinais engagement fracos, ranking em queda.
  4. x-default a apontar para a língua principal em vez de EN: utilizadores fora das línguas suportadas caem em francês incompreensível.
  5. Esquecer de localizar os schemas JSON-LD: Organization em EN, Article em FR = incoerência para o Google.
  6. Páginas duplicadas entre línguas muito próximas (PT-PT vs PT-BR, ES-ES vs ES-MX) sem hreflang granular: canibalização.
  7. Sitemap não atualizado após adicionar uma nova língua: novas URLs nunca indexadas durante 6 meses.
  8. Cookie de língua que impede os robôs crawlers: Googlebot só vê uma língua, as outras invisíveis.

Ferramentas de validação e monitorização

  • Hreflang Tags Testing Tool (Merkle)Gratuito. Verifica reciprocidade hreflang em qualquer URL. A usar mensalmente.
  • Google Search Console > International TargetingSecção dedicada aos erros hreflang detetados pelo Google. Notificação 'No return tags' clássica.
  • Screaming Frog SEO SpiderCrawl completo do site com auditoria hreflang batch. 159 £/ano versão pro. Indispensável para sites grandes.
  • SistrixTracking de ranking por país/língua. 100-300 €/mês. Para empresas com orçamento de reporting internacional.
  • Ahrefs Site AuditInclui auditoria hreflang. 99 $/mês mínimo. Bom para auditoria one-shot antes do lançamento multilingue.
  • Auditoria manual curlGratuito. Verificar os hreflang devolvidos por cada URL via 'curl -I' e inspeção HTML.
Tags#seo#hreflang#i18n#multilingual#international-seo#nextjs