Um de nossos clientes identificou o seguinte problema relacionado a SEO, que consigo reproduzir aqui no meta.
Quando o Discourse é acessado por um rastreador, ele insere links de paginação ?page=XX da seguinte forma:
<link rel="next" href="/t/slug/123?page=2">
e
<span itemprop='name'><b><a rel="next" itemprop="url" href="/t/slug/123?page=2">próxima página â</a></b></span>
Quando tal página é carregada em um navegador, o Discourse executa um redirecionamento JavaScript para uma URL /t/slug/123/NN, onde NN é o número de um post.
Assim, https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294?page=2 redireciona para https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294/23
e https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294?page=3 redireciona para https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294/45.
No entanto, às vezes essa página contém uma URL canônica que não corresponde à página original que estava sendo solicitada.
No exemplo acima, ?page=3 redireciona para o post 45 e a página do post 45 contém uma URL canônica ?page=2.
<link rel="canonical" href="https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294?page=2" />
Citando o relatório de SEO do cliente:
Isso cria uma cadeia de tags canônicas e redirecionamentos, e o Google começará a não confiar nas tags canônicas implementadas.
Não consigo descobrir a origem disso. Às vezes, a URL canônica tem um número de página maior, às vezes refere-se a um número de página menor (como neste exemplo), e às vezes está correta.
Pensei que pudesse estar relacionado a posts excluídos ou sussurros, mas um tópico com muitos posts removidos não apresenta esse comportamento por si só (como em https://meta.discourse.org/t/topic-list-previews/101646?page=5, que vai para o post 471 (!), o qual possui a URL canônica correta ?page=5). Acredito que possa ser um erro de off-by-one.