Back to articles

Quando as Tags Canônicas Apontam Entre Idiomas, o Hreflang Quebra

SEOReport Team·
hreflangcanonical-tagsinternational-seomultilingual-seotechnical-seo

Uma página localizada cujo canônico aponta para seu gêmeo em inglês cancela sua própria anotação hreflang, e nenhum navegador consegue detectá‑la. Dados de auditoria sobre as verificações que capturam a contradição, além do dia em que nossos próprios prefixos de localidade 9 falharam em uma delas.

Uma página pode carregar tags 2 no mesmo<head>that address the same crawler about the same URL and say opposite things. Onhttps://example.com/fr/pricing, isso indica que a página é o membro francês de um cluster:

html
<link rel="alternate" hreflang="fr" href="https://example.com/fr/pricing" />

E isso, linha 1 abaixo, indica que a página é uma variante que deve ser incorporada ao original em inglês:

html
<link rel="canonical" href="https://example.com/pricing" />

Sites reais enviam ambos, a partir do mesmo modelo, em todas as rotas localizadas que possuem. Esta é a falha que permanece após a que documentamos em julho — a referência própria hreflang ausente, ainda falhando 58% de 88 avaliações hreflang em nossos dados atuais. Um site pode fechar esse ciclo, acertar todas as referências próprias e ainda ter cada página localizada pedindo ser substituída por seu gêmeo em inglês.

Um canônico entre idiomas pede Google para incorporar a página localizada URL ao original

Uma tag canônica é um pedido de consolidação: trate este URL como uma variante daquele, e indexe aquele. Uma anotação hreflang é uma reivindicação de roteamento: este URL é a versão para este idioma. Direcione-as para URLs diferentes e o site emite um pedido que anula sua própria reivindicação — o slot francês no cluster é preenchido por uma página que se recusa a se identificar. Google tem sido explícito de que hreflang é uma dica e não uma diretiva, e a canonização funciona da mesma forma: o site fornece sinais, Google os resolve. Essa resolução é todo o problema. Com uma página localizada auto-canônica, o editor decide qual URL atende aos buscadores franceses. Com um canônico entre idiomas, o editor delegou a decisão enquanto acreditava que o cluster estava configurado — e o resultado que é relatado depois é uma página localizada que não aparece em seu próprio mercado enquanto a página em inglês aparece em seu lugar. Os geradores que produzem isso são ordinários. Um auxiliar canônico construído a partir de uma definição de rota em vez do caminho da requisição emite o URL sem prefixo para cada localidade. Um CMS cujo ajuste hreflang é por localidade mas cujo ajuste canônico é global faz o mesmo. Então há uma migração que adicionou prefixos de localidade aos URLs e deixou o canônico apontando para onde o conteúdo originalmente residia. Em cada caso a página renderiza perfeitamente, as anotações parecem completas no view-source, e a contradição é 2 atributos apart.

O conjunto de dados

Referência própria hreflang presenteA página inicial está ausente de suas próprias anotações hreflang58% de 88 avaliações; 59% de 34 sites
Canônico da página inicial presenteA página inicial declara nenhum canônico URL de forma alguma29% de 49 sites

Metodologia: snapshot de auditoria concluída mais recente por domínio, engine-v2 checkset, aproximadamente maio 23 – August 31, 2026, anonimizado. Os denominadores diferem por verificação — 34 a 49 sites — porque uma verificação só é executada quando suas entradas existem: a verificação de auto-referência não gera veredicto em uma página inicial sem anotações hreflang, razão pela qual seu número de sites é o menor. As taxas de nível de avaliação e de site diferem porque alguns domínios foram auditados mais de uma vez na janela. A amostra é auto-selecionada — proprietários que realizaram uma auditoria — e tende a pequenos a médios, então trate as taxas como direcionais para esse segmento. A segunda linha é o risco mais silencioso. Uma página sem canônico não contradigiu sua anotação hreflang, mas também não defendeu a anotação: nada na página indica qual URL ela considera autoritário, então uma variante de localidade acessível em mais de 1 endereço é resolvida inteiramente por inferência. Chegar a um cluster correto passa primeiro pela higiene canônica, razão pela qual nosso guia canônico é o pré-requisito para o guia de implementação hreflang, não um companheiro dele.

A contradição só é visível de ambos os lados do cluster

Uma única página não pode relatar essa falha sobre si mesma. /fr/pricing parece internamente consistente — um conjunto hreflang, um canônico, ambos bem formados. O defeito aparece quando você mantém a anotação e a página anotada lado a lado, razão pela qual nossa auditoria busca o cluster em vez de ler 1 documento. Cada execução analisa as anotações hreflang da página inicial e busca até 12 alvos do mesmo site a partir delas, pulando a etapa completamente quando a própria página inicial ficou fora do domínio, já que essas anotações vieram do HTML de um site estrangeiro. Para cada alvo que retorna conteúdo, o motor registra o código de status, se a requisição redirecionou, se há diretiva noindex presente, e se o próprio canônico do alvo resolve para o URL que a anotação nomeou. Uma discrepância ali é registrada como canonical_mismatch e falha em uma verificação de alta severidade — essa verificação é a captura de canônico cross-language. URLs são comparadas com barra final e normalizadas em caixa, então /fr/pricing e /FR/pricing/ são 1 página, e nada mais fino é tratado como diferença. Uma segunda verificação compara o idioma que a página declara em seu atributo lang com o local que sua própria anotação hreflang afirma para ela, no subtítulo principal, e apenas onde alguma página no audit declarou hreflang para si mesma. Um site sem anotação auto-referencial em lugar algum é monolíngue quanto ao audit pode ver, e a verificação relata isso em vez de passar. Quando um alternativo não pode ser buscado, o veredicto é inconclusivo em vez de falha, e o relatório diz quantos dos alvos declarados foram realmente avaliados. Um alternativo inatingível é uma lacuna de evidência, e relatar isso como defeito seria inventar um.

graph TD FR["/fr/pricing — html lang=fr"] EN["/pricing — original em inglês"] FR -->|"hreflang=fr, auto-referencial"| CLAIM["Reivindicação: servir este URL a buscadores franceses"] FR -->|"rel=canonical"| EN EN -->|"hreflang=fr"| FR CLAIM --> Q{"Qual URL responde a uma consulta francesa?"} EN --> Q Q -->|"o site parou de decidir"| OUT["Google seleciona — geralmente o inglês URL"]

Nossos próprios prefixos de localidade serviam inglês até August 17, 2026

Essas verificações existem porque falhamos nessa classe de defeito em seoreport.dev. Ahrefs Site Audit relatou um hreflang e HTML desajuste de idioma em 184 URLs em nosso próprio site. O atributo lang era o sintoma; o conteúdo também era inglês, em cada um dos 9 prefixos de localidade, o que fez cada URL localizado ser um duplicado de seu gêmeo em inglês — o mesmo resultado que um canônico cross-language produz, alcançado a partir da outra direção. A causa foi 1 limite de função. O shell do documento pegou seu idioma de um auxiliar que retorna o idioma padrão sempre que window está indefinido. No servidor, /fr/pricing portanto renderizou lang="en" e gerou o bundle de tradução em inglês, enquanto o componente que emite os links head — que lê o caminho, não o tempo de execução — emitia um fr self-hreflang correto diretamente ao lado. Um efeito de cliente mudou o idioma após hidratação, então toda verificação baseada em navegador passou e nenhum humano viu isso. Crawlers não executam esse efeito. Corrigido em August 17, 2026: o shell deriva seu idioma do caminho, o layout localizado resolve o bundle de localidade em um loader para que renderização no servidor e hidratação compartilhem, e uma localidade suportada sem bundle lança erro em vez de servir silenciosamente inglês sob seu prefixo. Direção de texto estava errada também — o árabe estava servindo ltr. A porta é um raw-HTML de fumaça sem JavaScript, porque a verificação do navegador é cega a esta classe inteira de falhas. Executar red-first contra produção reportou falhas 440 em URLs localizadas 128, cada página em 100% carryover em inglês. Contra a build corrigida: falhas 0 em URLs 144. A comparação de linguagem versus hreflang do motor foi construída separadamente, e o primeiro site que teria falhado era o nosso.

x-default herda o que a página de fallback declarar

Nossa amostra de sites que declaram x-default é muito pequena para publicar uma taxa de falha, e há uma segunda razão pela qual não a pontuamos: HTML capturado prova que uma anotação x-default é declarada, não qual público o editor pretendia atender. Essa questão de correção não é decidível a partir do documento, então a verificação relata o que pode e os fatos vizinhos — forma URL, saúde alvo, anotações recíprocas, alinhamento canônico — são avaliados independentemente contra o mesmo alvo. O que o mecanismo implica vale a pena declarar de qualquer maneira. x-default é o fallback para buscadores cujo idioma o site não serve, então normalmente aponta para a página de mercado principal. Se essa página carrega um canônico cross-language, o fallback para cada buscador não correspondido no planeta herda a contradição, e a auditoria o reportará através das verificações de saúde alvo em vez de x-default em si.

Verifique em raw HTML, por localidade, em ambas as direções

Busque a página do jeito que um crawler faz e leia 3 coisas:

curl -s -A "Googlebot" https://example.com/fr/pricing | grep -iE '<html|rel="canonical"|hreflang'

O atributo lang, a entrada hreflang auto-referenciando, e o canônico devem concordar em 1 localidade e 1 URL:

html
<!-- On https://example.com/fr/pricing -->
<html lang="fr">
<link rel="canonical" href="https://example.com/fr/pricing" />
<link rel="alternate" hreflang="en" href="https://example.com/pricing" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/pricing" />
<link rel="alternate" hreflang="x-default" href="https://example.com/pricing" />

Em seguida repita em 1 página por localidade, e busque cada URL que a anotação nomeia para confirmar que cada um canoniza para si mesmo. A regra é curta o suficiente para entregar a um desenvolvedor: cada membro de um cluster hreflang canoniza para si mesmo. Um canônico cross-language é correto em exatamente 1 situação — quando o URL localizado não está localizado de forma alguma e serve o mesmo idioma que o original — e nessa situação o URL não pertence ao cluster também. A Inspeção URL do Search Console dá a segunda opinião autoritária sobre qual canônico Google foi realmente selecionado, por URL. Nossa auditoria executa o loop pelo cluster em cada relatório, e o free report lista cada par contraditório com a página em que foi encontrado. Os prefixos de localidade 9 em seoreport.dev passam agora, e eles passam porque enviamos o defeito primeiro, em um site cujo produto inteiro está encontrando-o.

Veja como seu site está classificado

Get a free IA-powered SEO report with actionable findings and priority fixes for your website.

Não é necessário cadastro.