웹사이트의 웹 크롤러 제어하기

:bookmark: 이 가이드는 Discourse 사이트에서 웹 크롤러를 관리하는 방법을 설명합니다.

:person_raising_hand: 필요한 사용자 권한: 관리자

웹 크롤러는 페이지뷰와 서버 부하를 증가시켜 사이트 성능에 상당한 영향을 미칠 수 있습니다.

사이트에서 페이지뷰가 갑자기 급증하는 경우, 웹 크롤러가 그 원인에 어떻게 기여하고 있는지 확인하는 것이 중요합니다.


크롤러 활동 확인

크롤러가 사이트에 영향을 미치고 있는지 확인하려면 관리자 대시보드에서 Site Traffic(사이트 트래픽) 보고서(/admin/reports/site_traffic)로 이동하세요. 이 보고서는 로그인한 브라우저 사용자, 익명 브라우저 사용자, 크롤러 및 기타 소스의 페이지뷰 수를 세분화하여 보여줍니다.

크롤러가 정상적으로 작동하는 사이트:

크롤러가 통제 불능 상태인 사이트:

특정 크롤러 식별

Web Crawler User Agent(웹 크롤러 사용자 에이전트) 보고서(/admin/reports/web_crawlers)로 이동하여 페이지뷰 수 기준으로 정렬된 웹 크롤러 이름 목록을 확인하세요.

문제 있는 웹 크롤러가 사이트에 접근하면, 해당 크롤러의 페이지뷰 수가 다른 웹 크롤러보다 훨씬 높게 나타납니다. 동시에 여러 악성 웹 크롤러가 작동하고 있을 수도 있다는 점에 유의하세요.

크롤러 차단 및 제한

Google, Bing, Baidu(중국), Yandex(러시아), Naver(한국), DuckDuckGo, Yahoo 및 기타 주요 검색 엔진의 크롤러를 차단하지 않는 것이 좋은 습관입니다(국가에 따라 다름).

웹 크롤러가 통제 불능 상태에 빠졌다면, 동일한 크롤러가 다른 사이트에도 접근했을 가능성이 높으며, 이미 다른 사람이 해당 크롤러에 대한 정보를 요청하거나 보고서를 작성해 두었을 수 있습니다. 이는 해당 크롤러를 제한하거나 차단할지 여부를 판단하는 데 유용할 수 있습니다.

스립트를 통해 제3자 서비스를 사용하여 사이트를 모니터링하거나 기능을 추가하는 경우, 일부 크롤러가 상당한 양의 페이지뷰를 기여할 수 있다는 점에 유의하세요.

신뢰할 수 없는 웹 크롤러 목록을 얻으려면 이 목록을 참조할 수 있습니다. https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/blob/master/robots.txt/robots.txt

크롤러 설정 조정

Admin > Settings(관리자 > 설정)에서 특정 크롤러의 속도를 제한하는 데 도움이 되는 몇 가지 설정이 있습니다:

  • 크롤러 속도 감소:

    • slow down crawler user agents(크롤러 사용자 에이전트 속도 감소) — 기본적으로 gptbot, claudebot, anthropic-ai, brightbot을 포함합니다.
    • slow down crawler rate(크롤러 속도 감소) — 크롤러당 허용되는 요청 사이의 초 단위(기본값: 60)
  • 크롤러 차단:

    • blocked crawler user agents(차단된 크롤러 사용자 에이전트) — 기본적으로 mauibot, semrushbot, ahrefsbot, blexbot, seo spider를 포함합니다.
  • 특정 크롤러만 허용:

    • allowed crawler user agents(허용된 크롤러 사용자 에이전트) — 설정 시, 목록에 있는 크롤러만 사이트 접근이 허용되며, 나머지는 모두 차단됩니다. 이는 엄격한 허용 목록(allowlist)으로 작동합니다. 경고: 이 설정을 사용하면 blocked crawler user agents가 무시되고, 목록에 없는 모든 크롤러(포함되지 않은 경우 주요 검색 엔진 포함)가 차단됩니다.

조절하려는 크롤러의 정확한 사용자 에이전트 이름을 알고 있는지 확인하세요. 위의 설정을 조정했음에도 해당 에이전트의 페이지뷰가 감소하지 않는다면, 올바른 이름을 사용하고 있는지 다시 한번 확인해 보시는 것이 좋습니다.

어떻게 조치해야 할지 확신이 서지 않을 때는 항상 완전한 차단보다는 “속도 감소” 옵션부터 시작하세요. 시간이 지나면서 개선되는지 확인하십시오. 눈에 띄는 결과가 없다면 완전한 차단을 진행할 수 있습니다.

17개의 좋아요

이것이 잘 동작하는 대상에만 적용된다는 경고문이 있어야 하지 않을까요? 그리고 Gmail에서 링크로 오는 경우라면 Google조차도 이러한 모든 제한을 우회합니다.

두 가지 모두 서버에서 적용됩니다.

하지만 악성 봇이 헤더를 위조하여 Chrome이나 다른 것으로 가장하는 경우, 헤더를 이용해 이를 감지할 수 없게 됩니다…

2개의 좋아요

충격적인 사실: 미리보기 카드가 페이지 뷰로 집계됩니다!

제가 관리하는 서버는 http.rb/5.1.0 (Mastodon/4.0.2; + [https://mstdn.science/](https://mstdn.science/)) 형태의 미리보기 카드 요청으로 폭주한 것으로 보입니다.

미리보기 카드가 자동으로 추가되지 않도록 마스토돈 게시자가 이미지를 포함하도록 요청하는 것 외에는 어떤 조치도 취할 수 없다고 생각합니다.

1개의 좋아요

크롤러에 의한 일일 히트가 이미 1500회를 넘고 있습니다. :tired_face: Cloudflare DNS를 사용하여 이들을 모두 차단할 수 있을까요? 아니면 모두를 강제 차단하려면 어떤 옵션이 필요한가요? (개인 인스턴스)

솔직히 그들을 원하지 않습니다.

nginx 같은 리버스 프록시를 사용해 원치 않는 사용자 에이전트를 차단하는 방법이 있습니다. 이 방법은 매우 효과적입니다. 필요 없는 국가를 차단하는 것도 상당한 도움이 됩니다.

미국, 프랑스, 독일(대형 VPS 국가)은 차단할 수 없지만, 제 경우에는 러시아, 베트남, 이란, 이라크 등을 차단하는 것이 큰 도움이 되었습니다.

하지만 Discourse는 꽤… ‘견고하다(resilient)’가 적절한 표현일 것입니다. WordPress의 경우, 쓸모없는 SEO 봇, 공격자, 스크립트 키디, 악성 행위자들이 서버를 쉽게 무너뜨릴 수 있지만, Discourse의 상황은 매우 다릅니다.

2개의 좋아요

저는 Hetzner 독일 서버를 사용 중이며, 방화벽에서 포트 80/443만 열려 있습니다. Discourse는 NGINX 프록시 매니저 뒤에 실행되고 있습니다 (더 나은 솔루션이 있긴 하지만, 저는 코딩하기가 귀찮고 웹 프론트엔드를 선호하는 사람이거든요).

이제 화이트리스트 방식을 도입할 예정입니다. 무작위 문자열 하나만 허용하는 방식으로 말이죠… 앞으로는 더 이상 페이지 뷰가 없겠네요 :smiley:

“크롤러 사용자 에이전트 속도 제한” 항목에 정확히 무엇을 입력해야 하는지에 대한 질문입니다.
저희 사이트에서는 Facebook이 주요 원인으로 꼽히며, Bing이 근소한 차이로 3위를 차지하고 있습니다.
리포트에 따르면, 다음과 같은 에이전트들이 페이지 뷰를 대량으로 소모하는 주요 크롤러로 나타났습니다:

“크롤러 사용자 에이전트 속도 제한” 항목에 정확히 무엇을 입력해야 하나요 - “https” 또는 "http"를 포함한 이 정확한 URL들을 입력해야 하나요? 아니면 이중 슬래시(//) 이후의 내용만 입력해야 하나요? 아니면 다른 형식이 필요한가요? 아니면 그냥 시행착오로 해보는 수밖에 없나요?

감사합니다!

단순화를 위해 해당 봇의 이름을 사용하는 것이 좋습니다. 하지만 사용자 에이전트 문자열의 어떤 부분도 사용할 수 있으며, 원하지 않는 부분에 영향을 주지 않도록 주의해야 합니다.

봇을 늦추는 방법은 매우 비신뢰성이 높지만, 일부는 이 규칙을 따릅니다. 하지만 이는 공유 등으로부터 유입된 것이며, 그렇게 많은 부하를 발생시키지 않습니다. WordPress의 경우 이야기가 달라질 수 있습니다.

하지만 이것은 제가 차단하는 봇 목록의 일부입니다. 의도를 이해하셨을 것입니다.

1개의 좋아요

이 글 감사합니다, @Jagster - 정말 유용하네요. 가끔은 두더지 잡기 게임처럼 느껴지기도 하지만, 크롤러 이름 문자열 전체 대신 그 일부만 사용하는 개념은 이해했습니다.

사이트 관리자로서 아직 진행 중인 과정인 것 같네요 - 계속 나아가겠습니다!

1개의 좋아요

여러 가지 이유가 있을 수 있지만, 구글봇에는 크롤링 예산이 있습니다. 사이트맵이 링크를 찾는 가장 중요한 방법이라면, 일별/주별/월별 예산이 소진될 때 구글봇은 내부 링크에 도달하지 못합니다.

그리고 포럼에서는 내부 링크가 구글이 아니라 사용자들에게 중요합니다.

하지만 구글봇이 내부 링크를 실제로 보는지는 알 수 없습니다. 다만, 그렇게 되어야 합니다.

1개의 좋아요