안녕하세요! NLnet Labs에서는我们的产品(community.nlnetlabs.nl)을 위해 Discourse를 설정해 왔습니다. 한 사용자가 특정 주제(예: https://community.nlnetlabs.nl/c/cascade/10)의 RSS 피드를 받는 방법에 대해 질문했는데, 그의 RSS 리더에서 해당 피드를 찾을 수 없었기 때문입니다.
저도 해당 주제 전용 페이지를 제가 사용하는 RSS 피드 리더로 시도해 보았지만, 두 개의 피드만 발견했습니다: “NLnet Labs Community - Latest Posts”(/posts.rss)와 “NLnet Labs Community - Latest topics”(/latest.rss). /c/cascade/10.rss가 유효한 RSS 피드임은 알고 있지만, 제 피드 리더가 자동으로 이를 찾지 못했습니다. 이는 다소 좌절스러운 상황입니다. 앞으로 이러한 URL을 직접 안내해야 하기 때문입니다.
개인 웹사이트에 대한 RSS 피드 자동 발견(auto-discovery)을 조사해 본 경험이 있어, 웹 페이지의 <head> 부분을 확인해 보았습니다. 다음과 같은 링크들을 발견했습니다:
<link rel="alternate" type="application/rss+xml" title="Latest posts" href="https://community.nlnetlabs.nl/posts.rss">
<link rel="alternate" type="application/rss+xml" title="Latest topics" href="https://community.nlnetlabs.nl/latest.rss">
<link rel="alternate nofollow" type="application/rss+xml" title="RSS feed of topics in the 'Cascade' category" href="https://community.nlnetlabs.nl/c/cascade/10.rss">
즉, <head>에는 주제별 RSS 피드를 위한 세 번째 링크가 실제로 포함되어 있습니다. 하지만 일부 RSS 피드 리더가 rel="nofollow" 속성을 지원하지 않는 것으로 보입니다.
<form>, <a>, <area> 태그에 관련되는 nofollow 키워드는 검색 엔진 스파이더가 링크 관계를 무시하도록 지시합니다. nofollow 관계는 현재 문서의 소유자가 참조된 문서를 보증하지 않음을 나타낼 수 있습니다. 이는 검색 엔진 최적화(SEO) 전문가들이 자신의 링크 팜이 스팸 페이지가 아님을 가장하기 위해 자주 포함합니다.
이 문제에 대해 Discourse Meta에서 어떠한 논의도 찾을 수 없었습니다. PR이 2022년에 이미 병합되었음에도 불구하고요. 분명히 RSS 피드 리더와 Discourse 사이에 RSS 피드를 위한 <link> 태그의 관행에 대한 오해가 존재합니다. 따라서 다음과 같이 질문드립니다:
rel="nofollow"가 사이트 크롤러의 우선순위 개선을 위한 원래 의도를 여전히 수행하고 있는 것입니까, 아니면 다른 기법으로 대체되었습니까?
RSS 피드 리더의 자동 발견 과정에서 이 동작(즉, rel="nofollow" 링크를 무시하는 것)이 일반적인 것입니까? 다른 사람들도 이를 재현할 수 있습니까? RSS 피드 자동 발견에 대한 권위 있는 표준이 있는지 잘 알지 못합니다.
RSS 피드 리더가 올바른 게시물을 자동으로 발견할 수 있도록 이 사용 사례를 지원할 의향이 있습니까? 제 피드 리더에서 사용되지 않더라도 주제별 <link> 태그가 존재한다는 사실은 이를 가능하게 할 수 있을 것 같다는 생각을 하게 합니다. 아마도 rel="nofollow"가 추가될 때 기능 손실이 단순히 간과되었을 뿐일 것입니다.
네 — 이것은 피드 리더의 버그가 아니라, 현재 Discourse가 주제별 RSS 피드를 처리하는 방식 때문에 발생하는 결과입니다. 근본적인 원인은 Discourse가 주제/카테고리 RSS 피드의 <link> 요소에 rel="nofollow"를 추가하기 때문입니다. 많은 피드 리더가 nofollow가 있는 링크를 무시하므로, 피드 자체는 유효하고 직접 접근 시 정상적으로 작동하더라도 자동 발견이 차단됩니다.
실용적인 해결책은 **테마 컴포넌트(Theme Component)**를 사용하여 nofollow 없이 주제별 RSS 링크를 추가하는 것입니다. 간단한 예시는 다음과 같습니다:
결국 RSS 피드 자동 발견에 대한 표준이 실제로 존재합니다: https://www.rssboard.org/rss-autodiscovery#element-link-rel. 이 표준은 rel 속성에 alternate를 제외한 어떤 값도 명시적으로 허용하지 않습니다. 따라서 Discourse가 생성하는 HTML은 표준을 위반하고 있습니다. 이것이 반드시 변경되어야 한다는 뜻은 아니지만, 중요한 점을 알아두어야 합니다. 아마도 rel="nofollow"를 추가한 것이 해당 사이트 크롤러에서 작동했던 이유는, 크롤러가 사용자의 RSS 피드 리더와 구별되지 않는 상태에서 자동 발견 표준을 준수하고 있었기 때문일 수 있으며, 이번 변경으로 인해 크롤러와 피드 리더 양쪽 모두에 문제가 발생했을 수 있습니다.
예를 들어, 다음 URL에 대한 호출인 경우 https://meta.discourse.org/t/rss-feeder-auto-discovery-can-miss-topic-specific-feeds/392890.rss
다음과 같은 HTTP 헤더를 추가합니다: Link: <https://meta.discourse.org/t/rss-feeder-auto-discovery-can-miss-topic-specific-feeds/392890>; rel="canonical"