rrit
(Ayke)
3월 7, 2022, 1:35오후
1
sitemap 플러그인은 기본 사이트맵에 ?page=… URL을 포함하지 않습니다. 예: https://meta.discourse.org/sitemap_4.xml
<url>
<loc>
https://meta.discourse.org/t/importing-migrating-from-phpbb3/30810
</loc>
<lastmod>2022-02-25T21:55:40Z</lastmod>
</url>
최근 사이트맵에는 페이지네이션 URL이 포함됩니다. 예: https://meta.discourse.org/sitemap_recent.xml
<url>
<loc>
https://meta.discourse.org/t/importing-migrating-from-phpbb3/30810?page=18
</loc>
<lastmod>2022-03-07T12:03:50Z</lastmod>
</url>
기본 사이트맵에 ?page=… URL이 없는 것이 의도된 설계인가요?
이 모든 ?page=… URL은 정정(canonical) URL이므로 기본 사이트맵에 추가되어야 합니다. 예를 들어 다음과 같이요:
<url>
<loc>
https://meta.discourse.org/t/importing-migrating-from-phpbb3/30810
</loc>
<lastmod>2022-02-25T21:55:40Z</lastmod>
</url>
<url>
<loc>
https://meta.discourse.org/t/importing-migrating-from-phpbb3/30810?page=2
</loc>
<lastmod>2022-03-02T19:08:07Z</lastmod>
</url>
[…]
<url>
<loc>
https://meta.discourse.org/t/importing-migrating-from-phpbb3/30810?page=18
</loc>
<lastmod>2022-03-07T12:03:50Z</lastmod>
</url>
소스
def default
index = params.require(:page)
sitemap = Sitemap.find_by(enabled: true, name: index.to_s)
raise Discourse::NotFound if sitemap.blank?
@output = Rails.cache.fetch("sitemap/#{index}/#{Sitemap.size}", expires_in: 24.hours) do
@topics = Sitemap.topics_query_by_page(index.to_i).pluck(:id, :slug, :bumped_at, :updated_at).to_a
render :default, content_type: 'text/xml; charset=UTF-8'
end
render plain: @output, content_type: 'text/xml; charset=UTF-8' unless performed?
@output
end
def recent
sitemap = Sitemap.find_or_initialize_by(name: Sitemap::RECENT_SITEMAP_NAME)
sitemap.update_last_posted_at!
@output = Rails.cache.fetch("sitemap/recent/#{sitemap.last_posted_at.to_i}", expires_in: 1.hour) do
@topics = Sitemap.topics_query(3.days.ago).limit(Sitemap.size).pluck(:id, :slug, :bumped_at, :updated_at, :posts_count).to_a
render :default, content_type: 'text/xml; charset=UTF-8'
end
render plain: @output, content_type: 'text/xml; charset=UTF-8' unless performed?
@output
end
2개의 좋아요
sam
(Sam Saffron)
3월 8, 2022, 12:54오전
2
이건 의도적으로 한 것 같지 않은데, 수정 PR을 올려주실 수 있을까요?
mstm
(mstm)
3월 11, 2022, 8:37오후
3
@rrit 감사합니다. 몇 달 전에 저도 이걸 알아챘는데, 항상 정상적인 줄 알았어요
rrit
(Ayke)
3월 13, 2022, 7:29오후
4
마지막 수정 날짜에 대해 매우 구체적이지는 않지만, 쉬운 수정을 구현할 수 있습니다. 예를 들어, 하나의 주제(topic)에 있는 모든 페이지가 마지막 수정된 게시물의 동일한 날짜를 사용하도록 하는 방식입니다.
이 경우, 게시물이 많은 주제에서 새 게시물이 작성되면(게시물과 페이지가 많을 때), 마지막 페이지에만 새 날짜가 필요한 경우에도 모든 페이지에 새로운 마지막 변경 날짜가 부여됩니다.
이것이 실현 가능한 해결책일까요?
그렇지 않다면, 주제 내의 모든 게시물을 페이지당 20개씩 묶음으로 처리해야 합니다. 그리고 각 묶음에 대해 마지막 변경 날짜를 개별적으로 계산해야 합니다.
sam
(Sam Saffron)
3월 13, 2022, 11:54오후
5
솔직히 이 부분에 대해 어떤 변경 사항이든 반반인 상태입니다. 문제는 Google이 Discourse 포럼의 콘텐츠를 발견하는 데 어려움을 겪고 있다는 것이 아닙니다.
실제로는 콘텐츠를 발견하고 크롤링한 뒤, "임의의 의사결정"을 내리며 해당 콘텐츠가 인덱스에 속하지 않는다고 판단하는 것입니다.
1개의 좋아요
rrit
(Ayke)
4월 1, 2022, 9:23오전
6
"임의의 의사 결정"은 다음 중 하나의 점을 의미합니까?
(참고: Page indexing report - Search Console Help )
크롤링됨 - 현재 인덱싱되지 않음: 해당 페이지는 Google에 의해 크롤링되었지만 인덱싱되지 않았습니다. 향후 인덱싱될 수도 있고 아닐 수도 있으며, 이 URL을 다시 크롤링하도록 제출할 필요가 없습니다.
발견됨 - 현재 인덱싱되지 않음: 해당 페이지는 Google에 의해 발견되었지만 아직 크롤링되지 않았습니다. 일반적으로 Google은 해당 URL을 크롤링하기를 원했지만 사이트의 과부하가 예상되었기 때문에 크롤링을 재예약했습니다. 이것이 보고서에서 마지막 크롤링 날짜가 비어 있는 이유입니다.
모든 ?page=… 정규화(canonical) URL을 사이트맵에 추가하는 데 있어 장점:
이로써 Google은 이러한 URL에 대해 <lastmod>에 대한 강력한 힌트를 얻게 됩니다. 따라서 Google은 변경되지 않은 ?page=… URL을 다시 크롤링할 이유가 없으며, 더 중요한 URL에 귀중한 크롤링 예산을 사용할 수 있습니다.
사이트맵에 ?page=… URL이 누락되어 있으면, Google은 이를 어쨌든 찾아내고 콘텐츠에 새로운 변경 사항이 전혀 없음에도 불구하고 불필요하게 “임의적으로” 다시 크롤링합니다.
참고: Build and Submit a Sitemap | Google Search Central | Documentation | Google for Developers
Google은 <lastmod> 값이 일관되고 검증 가능할 때(예: 페이지의 마지막 수정 시점과 비교하여) 이를 사용합니다.
Google은 URL을 어디서 알게 되었는지를 실제로 추적하며 차이를 둡니다:
“제출된 모든 페이지”(사이트맵) 또는 “알려진 모든 페이지”(링크 등)
참고: Google Search Console → 인덱스 → 커버리지 보고서
“사이트맵은 Google이 사이트의 URL을 발견하는 중요한 방법입니다.” 참고
“Google은 [ … ], 사이트맵에 URL이 존재하는지 여부, [ … ] 등 여러 요인(또는 신호 )에 기반하여 정규화 페이지를 선택합니다.” 참고
“Google의 처리는 크롤링을 예약하기 위해 복잡한 알고리즘에 의존하므로, 사이트맵을 사용한다고 해서 사이트맵의 모든 항목이 크롤링되고 인덱싱된다는 보장은 없습니다.” 참고
1개의 좋아요
sam
(Sam Saffron)
4월 4, 2022, 5:24오전
8
이것은 분명히 @Roman이 이 기능을 코어에 통합할 때 염두에 두어야 할 사항입니다.
더 많은 변경 사항을 추가하기 전에 먼저 사이트맵을 병합하는 쪽을 훨씬 선호합니다. 하지만 그 작업이 완료되면 … _recent에서 정규 페이지 기반 URL로 시작할 수 있을지도 모릅니다. 이제 사이트맵에서 사용할 수 있는 정규 URL이 있으며, 적절한 캐싱을 거치면 posts.rss에서도 사용할 수 있습니다.
3개의 좋아요
Google Search Console에서 https://example.com/t/title-slug/1234?page=3와 같은 URL을 인덱싱하려고 할 때 문제가 발생하고 있습니다. 이러한 URL은 Discourse에서 404 오류를 발생시킵니다. ?page=x 파라미터를 제거하면 URL이 유효해집니다.
이것은 크롤러에게 제공되는 사이트 버전에 Discourse가 페이지네이션을 추가하는 것의 부수적 영향으로 추정됩니다:
sam
(Sam Saffron)
10월 18, 2023, 7:06오전
11
페이지 URL은 정상적으로 작동합니다. 다만 N개 이상의 게시물이 있어야 합니다.
해당 주제에 삭제된 게시물이 많이 있나요?
Sam Saffron:
해당 주제에 삭제된 게시물이 많이 있나요?
샘, 답변해 주셔서 감사합니다. 이 글을 올린 후에 여기에서 선생님의 설명을 찾았습니다:
That topic was split so you destabilized the page number, it is a fundamental limitation with our numbering implementation
Take a book analogy, in a book if you rip out page 77, page 200 remains page 200. In Discourse page 200 becomes page 199
I guess, maybe it does make sense to auto redirect high page numbers back to last page.
하지만 제 경우엔, 이 문제를 겪는 주제들을 살펴본 결과 원본 스레딩에 대한 수정 사항이 표시되지 않습니다. 유일한 차이점은 이 주제들이 Drupal에서 가져온 것이라는 점입니다. 하지만 불행히도 이런 주제들이 수없이 많아서, 아마도 수천 개에 달할 텐데요, Discourse에서 원래 생성된 주제들도 영향을 받는지 확인하기 위해 다른 예시들을 더 자세히 살펴봐야 할 것 같습니다.
1개의 좋아요
sam
(Sam Saffron)
10월 18, 2023, 10:41오후
13
아니, 드루플에서 대량으로 가져온 건가요? 그게 여기의 공통된 주제인가요?
네, 대략 10만 개의 토픽과 약 200만 개의 게시물 정도입니다. 이 문제가 가져온 토픽에서만 발생하는지 확실하지는 않아요. 추가 이상 사항을 발견하면 여기서 다시 말씀드리겠습니다.
1개의 좋아요