Tag canonical não é redefinido após redirecionamento client-side do crawler de ?page=N para /t/slug/id/<post_number>

Estamos observando um grande número de URLs de perma-links de tópicos e paginação caindo na categoria “Rastejado - atualmente não indexado” do Google Search Console (aproximadamente 35 mil URLs em um fórum importado com cerca de 20 anos de idade, versão do Discourse v2026.9.0-latest, auto-hospedado).

O que descobrimos:

O Discourse serve links de paginação ?page=N para rastreadores em tópicos longos (uma vez que a interface real usa rolagem infinita). Quando um cliente com suporte a JavaScript (incluindo o renderizador do Googlebot) carrega uma dessas URLs ?page=N, o Discourse emite um redirecionamento no lado do cliente para /t/slug//<post_number>.

Reprodução:

  1. Busque uma URL de tópico “a frio”, com qualquer sufixo de número de publicação ou ?page=:
    GET /t///14 →
    GET /t// → mesmo canônico
    GET /t///1 → mesmo canônico
    GET /t//?page=127 → (auto-referenciado, NÃO normalizado)
  2. Carregue o site normalmente (com JS ativado) e navegue, via roteador do Ember, para uma URL que inclua um sufixo de número de publicação (por exemplo, clicando em um link “ir para a primeira publicação não lida” nos Tópicos Sugeridos). Assim que a transição do SPA é concluída, document.querySelector(‘link[rel=canonical]’).href é igual à URL atual com número de publicação — ela não aponta de volta para o tópico base.

Isso contradiz a intenção de design declarada pelo próprio Discourse. Neste thread de 2015, @sam foi explícito:

▎ Tópicos: o canônico deve apontar para o tópico base para impedir que páginas individuais de publicações apareçam como resultados de busca discretos.
▎ Páginas de categoria/listagem: o canônico foi removido completamente, pois listagens paginadas não são duplicatas, segundo a própria orientação do Google.

O que estamos vendo hoje quebra isso de duas maneiras:

  1. Um tópico com ?page=N (paginação do rastreador) exibe a URL paginada no HTML bruto do servidor, em vez do tópico base — mesmo que tópicos (diferentemente das listas de categoria) deveriam explicitamente sempre convergir para a URL base.
  2. Após o redirecionamento no lado do cliente de ?page=N para /t/slug/id/<post_number>, o canônico no DOM renderizado também permanece naquela URL com número de publicação, em vez de resetar para o tópico base.

Ambos parecem ser regressões em relação ao objetivo de design de 2015, e não um comportamento atual intencional.

Por que isso importa para a indexação: o índice do Google usa o canônico do DOM renderizado para o sinal canônico. Qualquer URL com sufixo de número de publicação/página que o Google alcance diretamente — via recurso “link de compartilhamento da publicação” (usado intensivamente no nosso fórum via WhatsApp/Discord), via backlinks externos antigos (estamos mapeando perma-links legados do vBulletin ?p= para URLs com número de publicação), ou via o próprio rastreador — declara seu próprio canônico em vez de consolidar no tópico base. No Search Console, isso aparece como milhares de URLs quase duplicadas presas em “rastejado - não indexado”.

Exemplos de URLs afetadas do nosso relatório do GSC (todas rastejadas pela última vez no início de setembro de 2026):
/t/tengo-que-pasar-la-itv/21100/10
/t/new-honda-nsx-proyect/4910/69
/t/hacer-tubo-recto-sin-silencioso-del-catalizador-hacia-atras/25579/25
/t/kedada-japo-en-cataluna-2014/28148/75
/t/el-diario-de-patricio-de-la-plana/13286?p

Pergunta para a equipe: dado que isso é um problema de mais de 10 anos, algo mudou desde então que torne o canônico auto-referenciado nessas URLs intencional agora? Ou isso vale a pena ser reexaminado como uma regressão? Ficarei feliz em fornecer arquivos HAR / mais exemplos de reprodução, se for útil.

1 curtida