검색 엔진이 비정규 페이지의 인덱싱을 차단하기 시작

:warning: 중요

추가 조사 후, 비정식(non-canonical) 인덱싱을 활성화한 상태로 유지하기로 결정했습니다. 자세한 내용은 다음 링크에서 확인하세요: Search engines now blocked from indexing non-canonical pages - #30 by sam

원래 공지사항

요청된 페이지가 리소스의 정식(canonical) 페이지가 아닌 경우, Discourse는 이제 X-Robots-Tag: noindex 헤더로 응답합니다.

Discourse는 주제 목록과 주제 모두에 자동 스크롤 디자인을 사용하지만, GoogleBot과 같은 검색 엔진 크롤러에게 표시되는 것은 이와 다릅니다. 검색 엔진은 각 페이지에 20개의 게시물이 포함된 페이지네이션된 주제를 인식합니다. 그러나 사용자가 자신의 게시물에서 특정 게시물을 링크할 때 /t/title/topic_id/post_id URL 형식을 사용하므로, 이러한 URL이 크롤러에 의해 수집되어 사이트 검색 결과에 중복된 콘텐츠가 추가되고 도메인의 귀하고 제한적인 크롤 예산을 낭비하게 됩니다.

이 문제를 완화하기 위해, 사용자 커뮤니티는 게시물별 URL과 같은 URL에 X-Robots-Tag: noindex를 추가할 것을 제안했으며, 우리는 이를 Discourse의 모든 비정식 URL로 확장하는 데 성공했습니다. 이 기능은 3개월 전 숨겨진 사이트 설정으로 출시되어 기본적으로 비활성화되었으며, 그 동안 커뮤니티 사이트와 meta.discourse.org에서 이 헤더를 활성화하는 실험을 진행했습니다.

이 기간의 결과가 지금까지 양호하게 나타나고 있어, 이 설정을 기본적으로 활성화되도록 변경했습니다.

어떤 이유로든 인스턴스에서 이 동작을 원하지 않는 경우, 서버에서 docker exec -i app rails runner "SiteSetting.allow_indexing_non_canonical_urls = true"를 실행하여 비정식 페이지의 인덱싱을 활성화할 수 있습니다.

크롤링과 검색 결과에 즉각적인 극적인 변화는 기대하지 마십시오. 하지만 향후 몇 달 동안 게시물별 페이지의 크롤링과 검색 결과가 감소하는 것을 볼 수 있을 것이며, 이는 도메인의 크롤 예산 제약으로 인해 아직 인덱싱되지 않은 콘텐츠와 사이트의 새로운 주제에 더 많은 크롤링 시간이 사용되도록 할 것입니다.

32개의 좋아요

요약: 비정규(non-canonical) 페이지를 차단하지 마세요. <link rel="canonical" … > 태그를 사용하여 올바른 URL로 유도하는 것만으로 충분합니다. 이 태그가 바로 그 용도로 만들어졌습니다.


이 기능은 장기적으로 SEO 링크 빌딩에 해를 끼칠 수 있습니다:
이제 모든 토픽 내 답변에 대한 딥링크(deep-link)가 noindex 페이지에 있습니다! 구글은 이런 방식을 좋아할까요?

사실 canonical 태그가 항상 토픽 URL을 가리키도록 설정되어 있다면(답변에 딥링크하는 페이지의 경우에도) – X-Robots-Tag: noindex를 추가하지 않고도 – 이 역할을 완벽하게 수행할 수 있습니다:
딥링크된 답변 페이지를 처음 크롤링할 때 구글은 해당 페이지 URL(토픽 내 답변)이 canonical-url과 일치하지 않음을 인식하고, canonical-url(토픽)만 크롤링하도록 결정합니다.


이 토픽-답변 딥링크를 수행하는 모든 링크에 <a rel="nofollow" …>를 추가할 수 있을까요? 수정: 아니요, Search engines now blocked from indexing non-canonical pages - #9 by j127 참고
이렇게 하면 검색 엔진의 귀하고 제한된 크롤 버짓을 더 절약할 수 있습니다:
검색 엔진은 링크를 처음부터 추출하지도 않고 해당 URL에 호출을 보내지도 않습니다. URL 호출은 X-Robots-Tag: noindex HTTP 헤더를 포함하는 응답을 반환하므로, 검색 엔진의 내부 ‘noindex’ 목록에 URL을 추가하여 응답이 '폐기’되기 때문입니다.

RSS 피드 URL에 nofollow를 추가하여 크롤 버짓을 더 절약할 수 있습니다:

5개의 좋아요

@rrit님의 제안에 전적으로 동의합니다.

블록 처리하는 것보다 주제 내의 하위 페이지/게시물을 원래의 canonical URL로 지시하는 것이 더 나을 것입니다.

noindex를 추가하는 대신, 주제 아래 각 답변에 nofollow 태그를 추가할 수 있을까요?

1개의 좋아요

이미 그렇게 작동하고 있으므로 무슨 말씀인지 잘 이해가 가지 않습니다.

즉, 여기서 URL을 업데이트해야 한다는 건가요?

페이지 번호와 게시물 앵커를 사용하는 canonical URL을 사용하도록?

이미 robots.txt를 통해 차단되어 있지만, 좋은 아이디어입니다!

이것도 좋은 아이디어 같습니다!

4개의 좋아요

맞습니다, 죄송합니다. 가끔 제 생각에 빠져서 헷갈릴 때가 있습니다. :slight_smile:

간단한 질문입니다만, Discourse를 v2.9로 업데이트하기만 하면 이 기능이 기본적으로 사용 가능한 것으로 이해하면 되나요?

4개의 좋아요

이 기능은 기본적으로 활성화되어서는 안 된다고 생각합니다. 트래픽 측면에서 위험할 수 있으며, 짧은 시간만 활성화되더라도 지금 업데이트하는 사용자에게 원치 않는 문제가 발생할 수 있습니다.

canonical 태그는 Google이 이 문제를 해결하는 방법으로 권장하는 방식이며, 이미 작동하고 있는 것으로 보입니다. canonical 태그를 이상하게 사용하면 Google에서 이상한 문제가 발생할 수 있고, noindex 실수는 복구하기 어려울 수 있습니다.

2개의 좋아요

글의 첫 번째 부분에는 동의하지만, 내부 nofollow가 이상적이라고 생각하지는 않습니다. 내부 링크는 검색 엔진에 사이트 내에서 어떤 페이지가 중요한지를 알려주는 데 도움이 됩니다. Google은 모든 링크를 따라가지 않습니다. 이미 이전에 본 링크임을 알고 있기 때문입니다. example.com/t/1234/5와 같은 URL을 보았지만 이미 크롤링하여 그 canonical URL이 example.com/t/1234임을 알고 있다면, 비정규(canonical이 아닌) 버전을 여러 번 방문하는 데 컴퓨팅 리소스를 낭비하지 않을 가능성이 높습니다.

3개의 좋아요

외부 웹사이트에서 링크된 URL에 대한 ‘noindex’ 제거

죄송합니다. "답변"이라고 한 것은 토픽 안의 "게시물"을 의미합니다:
외부 도메인에서 게시물(예: forum.example.com/t/example-topic/5/11)로 가는 모든 딥링크에 이제 http 헤더 X-Robots-Tag: noindex가 붙어 있습니다! 이 http 헤더를 다시 제거하는 것을 제안합니다.

<link rel="canonical" … >에 게시물 앵커가 포함된 URL(…/t/example-topic/1234/5의 마지막 숫자)을 어디에도 사용하지 않는 것을 제안합니다. Canonical URL은 항상 토픽 URL 자체(…/t/example-topic/1234)를 가리켜야 합니다. 이미 이렇게 구현되어 있다고 생각합니다.


대상 URL이 <link rel="canonical" … >에 의해 "리다이렉트"되는 경우 검색 엔진을 위한 링크 재작성

매우 좋은 지적입니다. 여기에는 rel="nofollow"를 추가하지 않는 것이 좋습니다.

Discourse에는 크롤러를 위한 특수 뷰가 있습니다. 크롤러 뷰 전용으로 새로운 제안:
게시물 URL(example.com/t/1234/5)을 가리키는 모든 내부 링크를 대신하여 해당 토픽 URL(example.com/t/1234)을 가리키도록 변환합니다.
목적: 이러한 추가 URL이 <link rel="canonical" … >에 의해 어쨌든 "리다이렉트"되는 경우, 검색 엔진에 추가 URL을 알리지 않기 위함입니다.

이러한 게시물 링크가 발견되는 위치:

  • 사용자 콘텐츠에 수동으로 추가된 링크
  • 자동 생성된 링크:
    • 인용문
    • 토픽의 첫 번째 게시물: 다른 토픽에서 온 “인바운드 추적 링크”
    • 토픽의 첫 번째 게시물: “선택된 답변”
    • 토픽의 첫 번째 게시물 - 토픽 맵 열림: “토픽 링크”/“좋아한 링크”

여담: 구글은 모든 이러한 URL을 어디서 찾을까요?


검색 엔진을 위한 “인바운드 추적 링크”

바로 이 이유 때문에, 토픽의 첫 번째 게시물에 자동 생성되는 "다른 토픽에서 온 인바운드 추적 링크"도 검색 엔진에서 볼 수 있어야 합니다.
현재 이러한 "인바운드 추적 링크"는 크롤러 뷰에 없습니다. 수정: 크롤러 뷰에 이미 있습니다.

하지만 토픽 URL 대신 게시물 URL을 가리킴 (HTML 소스 참조)
<div class="crawler-linkback-list" itemscope="" itemtype="http://schema.org/ItemList">
      <div itemprop="itemListElement" itemscope="" itemtype="http://schema.org/ListItem">
        <a href="https://meta.discourse.org/t/removing-the-2-3-4-etc-links-for-each-reply-within-a-topic-url/209648/26" itemscope="" itemtype="http://schema.org/DiscussionForumPosting" itemprop="item">
          <meta itemprop="url" content="https://meta.discourse.org/t/removing-the-2-3-4-etc-links-for-each-reply-within-a-topic-url/209648/26">
          <span itemprop="name">토픽 URL 내에서 각 답변에 대한 /2, /3, /4 등 링크 제거</span>
        </a>
        <meta itemprop="position" content="2">
      </div>
</div>
3개의 좋아요

이것은 매우 중요한 포인트입니다. 모든 페이지가 인덱싱되는 것과 해당 페이지가 관련성 높은 순위를 얻는 것은 다른 문제입니다. 제 경험상(대형 출판사 사이트의 경우), 이러한 결과를 달성하는 데 스마트한 내부 링크 구성이 핵심입니다.

1개의 좋아요

오늘 아침에 갱신했는데, 이렇게 하면 비정규(non-canonical) 페이지의 인덱싱을 활성화하는 것을 권장하시나요?

제 인덱싱이 더 나빠지는 것은 원하지 않습니다.

1개의 좋아요

OP(원문) 게시일 이후에 사이트를 업데이트한 분들을 위한 안내입니다.

새로운 헤더가 해당 페이지의 크롤링 시간을 줄여준다는 데이터를 보유하고 있으며, 해당 페이지에는 항상 canonical 설정이 적용되어 있었습니다.

하지만 해당 페이지는 애초에 크롤링 대상이 아닙니다. URL이 포함된 메타데이터는 토픽 수준에서 설정되며, 게시글 수준은 중복된 콘텐츠이므로 Google이 게시글 수준까지 크롤링하는 것을 원하지 않습니다.

좋아요, 그러면 여기서는 변경할 필요가 없겠네요.

런타임에 이를 수행하면 CPU 비용이 너무 많이 들 수 있으며, 모든 게시글의 두 버전을 저장하면 디스크 비용이 많이 듭니다.

우리가 제공하는 기본 설정은 항상 우리가 권장하는 방식입니다. 다만, 사이트 설정을 유지 및 공지하는 이유는 사용자가 기본 설정이 자신의 사이트에 이상적이지 않다고 판단할 경우 다른 선택을 할 수 있도록 하기 위해서입니다.

5개의 좋아요

좋아요, 그러면 권장대로 두겠습니다.
감사합니다

2개의 좋아요

마지막으로 한 가지만 더 여쭤볼게요. 더 이상 귀찮게 하지 않을게요 :sweat_smile:

그런 링크가 포함된 sitemap_recent.xml 파일에 문제가 생길 수 있을까요?
https://meta.discourse.org/t/category-moderator-improvements/158628?page=2

1개의 좋아요

그 예는 정형화된 페이지(canonical page)이므로, OP에서 언급된 변경 사항의 영향을 받지 않습니다.

2개의 좋아요

외부 링크가 게시물 URL로 연결될 때 큰 차이가 있다고 생각합니다.

# A: 
External Domain
|
|--(link juice)--> post-url
                   |
                   |__/ crawling:      \---> post-url not indexed and
                      \ header noindex /     link-juice mostly gone

# B:
External Domain
|
|--(link juice)--> post-url
                   |
                   |__/ crawling:        \__|--> post-url not indexed
                      \ answer canonical /  |--> topic-url indexed (anyway)
                                                 with link-juice transfer

이 문제를 다음 링크에서 논의해야 합니다.

1개의 좋아요

SEO에 대해 저처럼 초보적인 수준인 사람에게 질문이 있습니다. 이는 잠재적으로 Google 검색 결과에서 약간의 증가나 이점을 가져올 수 있는 SEO 개선 사항을 의미하는 것인가요?

3개의 좋아요

네, 그것이 목표입니다!

몇 달 동안 테크 뉴스 커뮤니티에서 해당 변경 사항을 테스트해 본 결과, 익명 페이지 조회수가 피크 대 피크 기준으로 크게 증가하는 것을 확인했습니다. 궁극적인 목표는 항상 모든 Discourse 커뮤니티가 모든 측면에서 더 건강해지도록 하는 것입니다.

6개의 좋아요

이 효과가 Google Search Console 보고서의 ‘설정’ → ‘크롤링’ → '크롤링 통계’에서 확인 가능한가요?

1개의 좋아요

다음 사항들을 고려할 때 …

A. 크롤링 감소

B. 콘텐츠의 두 가지 버전 금지

C. canonical 태그 사용

D. nofollow 사용 금지

E. noindex 사용 금지

… 그리고 내부 링크가 있는 위치는 …

… 최적의 타협점을 얻기 위해 다음과 같은 구현을 제안합니다:

  1. http 헤더 X-Robots-Tag: noindex를 추가하지 않습니다.
    – [E] 고려 –
  2. canonical 태그가 항상 주제 URL을 가리키도록 유지합니다.
    – 크롤링 감소 [A] 및 [C] 고려 –
  3. 크롤러 뷰에만 적용: 주제 첫 번째 게시물의 “다른 주제에서 온 인바운드 추적 링크” 및 "주제 맵 열림: 주제 링크/좋아한 링크"의 모든 링크에 대해, 자동으로 생성된 링크가 항상 게시물 URL이 아닌 주제 URL을 가리키도록 변환합니다.
    – 크롤링 감소 [A] 및 [D] 고려, 그러나 의도적으로 [B]를 무시 –
    [B]에 대해: CPU 비용은 크롤러 방문 시에만 발생하며, 내부 URL의 끝부분에 두 개의 숫자로 끝나는 마지막 숫자를 잘라내는 정규식 치환으로 구성됩니다. 예: …/t/example-topic/1234/5 → …/t/example-topic/1234. 이는 주제 첫 번째 게시물의 “다른 주제에서 온 인바운드 추적 링크” 및 “주제 맵 열림” 구역 내에서만 제한적으로 수행됩니다.
  4. 모든 뷰에 적용: 인용문 및 사용자 콘텐츠에 수동으로 추가된 링크에 내부 nofollow를 추가합니다.
    – 크롤링 감소 [A] 및 [B] 고려, 그러나 [D]를 약간 무시 –
    [D]에 대해: 중요한 링크는 이미 “주제 맵 열림: 주제 링크/좋아한 링크” 섹션의 첫 번째 주제에 자동으로 복제되어 있습니다(3번 항목 참조) 그리고 대부분의 인용문은 어쨌든 주제 자체 안에 남아 있습니다.

내부 링크에 대한 몇 가지 아이디어

Google은 이렇게 말합니다. How to Specify a Canonical with rel="canonical" and Other Methods | Google Search Central  |  Documentation  |  Google for Developers

그리고 Google은 이렇게 말합니다. SEO Link Best Practices for Google | Google Search Central  |  Documentation  |  Google for Developers

따라서 Discourse는 내부 링크를 다음과 같이 설정할 수 있습니다:

<a href="/t/example-topic/1234" routerLink="/t/example-topic/1234/5">…</a>

Google에게는 링크가 canonical 주제 URL …/1234로 직접 연결되며, Google은 이 링크 구문에서 게시물 URL …/1234/5에 대해 알지 못하게 됩니다.

사용자 내비게이션을 위해 Ember 앱에서 추가적인 JavaScript가 이 일을 처리할 것입니다:
예: href를 routerLink로 대체합니다.

2개의 좋아요

정말 훌륭한 개선인 것 같습니다! @Falco님과 Discourse 팀, 이렇게 만들어 주셔서 감사합니다!

3개의 좋아요