?page=가 다른 canonical URL을 가진 페이지로 리다이렉트되는 경우

고객 중 한 명이 다음 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) 오류일 수 있다고 생각합니다.

7개의 좋아요

정규화(canonical) 관련 괄호 처리에 약간의 불일치가 있는 것 같습니다. @kris.kotlarek 님, 다음 주에 이 문제를 조사해 주시겠습니까? 로컬 환경에서 44개의 답글이 달린 게시글을 생성한 후 결과를 확인해 보셔야 합니다.

6개의 좋아요

@kris.kotlarek 님이 수정 사항을 병합했습니다!

아직 문제가 해결되지 않았다면 알려주세요!

3개의 좋아요