고객 중 한 명이 다음 SEO 관련 문제를 발견했으며, 저는 meta에서 이를 재현할 수 있습니다.
크롤러가 Discourse를 방문하면 Discourse는 다음과 같은 방식으로 페이지네이션 링크 ?page=XX를 삽입합니다:
<link rel="next" href="/t/slug/123?page=2">
그리고
<span itemprop='name'><b><a rel="next" itemprop="url" href="/t/slug/123?page=2">다음 페이지 â</a></b></span>
이러한 페이지가 브라우저에서 로드되면, Discourse는 NN이 게시글 번호인 /t/slug/123/NN URL로 JavaScript 리다이렉트를 수행합니다.
즉, https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294?page=2는 https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294/23으로 리다이렉트되고
https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294?page=3는 https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294/45로 리다이렉트됩니다.
그러나 때로는 해당 페이지에 요청된 원래 페이지와 일치하지 않는 canonical URL이 포함된 경우가 있습니다.
위 예시에서 ?page=3은 45번 게시글로 리다이렉트되며, 45번 게시글의 페이지에는 canonical URL이 ?page=2로 포함되어 있습니다.
<link rel="canonical" href="https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294?page=2" />
고객의 SEO 보고서에서 인용하면 다음과 같습니다:
이로 인해 canonical 태그와 리다이렉트의 체인이 생성되며, Google은 설정된 canonical 태그를 신뢰하지 않게 되기 시작합니다.
이것이 어디서 비롯되는지 파악하지 못하고 있습니다. 때로는 canonical URL의 페이지 번호가 더 높고, 때로는 더 낮은 페이지 번호를 참조하며(이 예시처럼), 때로는 올바르게 표시됩니다.
삭제된 게시글이나 속삭임(whispers)과 관련이 있을 것이라 생각했지만, 많은 게시글이 삭제된 주제에서도 이러한 동작이 반드시 나타나는 것은 아닙니다(예: https://meta.discourse.org/t/topic-list-previews/101646?page=5는 471번 게시글(!)로 이동하며, 이 게시글에는 올바른 canonical URL ?page=5가 있습니다). 이는 오프바이원(off-by-one) 오류일 수 있다고 생각합니다.