Quando as Tags Canônicas Apontam Entre Idiomas, o Hreflang Quebra
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:
<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:
<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 presente | A página inicial está ausente de suas próprias anotações hreflang | 58% de 88 avaliações; 59% de 34 sites |
| Canônico da página inicial presente | A página inicial declara nenhum canônico URL de forma alguma | 29% 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.
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:
<!-- 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.