학습 봇만 막으려다 검색 인용 봇까지 차단한 robots.txt를 벤더별 user-agent 단위로 다시 나눈 과정을 정리했습니다.
AI 크롤러 robots.txt 설정을 처음 손댔을 때는 간단하게 생각했습니다. User-agent를 별표(*)로 묶고 Disallow만 걸면 학습용 수집이 끊길 거라고 봤습니다. 그런데 그렇게 하고 나니 ChatGPT나 Perplexity 같은 곳에서 이 사이트가 검색 결과로 인용되는 경로까지 같이 닫혀버렸습니다. 막고 싶었던 건 학습용 수집이지 검색 인용이 아니었는데, 봇 이름을 구분하지 않고 한 번에 처리한 게 문제였습니다.OpenAI, Anthropic, Perplexity 모두 크롤러 이름이 목적별로 나뉘어 있습니다. OpenAI는 학습용 GPTBot과 검색 색인용 OAI-SearchBot을 따로 씁니다. Anthropic도 학습용 ClaudeBot과 검색 품질용 Claude-SearchBot이 다릅니다. Perplexity는 PerplexityBot 하나가 검색 색인 역할을 합니다. 이 구분을 모르고 회사 이름만 보고 막으면, 예를 들어 ClaudeBot만 눈에 들어와 그걸 Disallow 처리하면서 Claude-SearchBot까지 같이 막은 걸로 착각하기 쉽습니다. 실제로는 별도 이름이라 규칙도 따로 써야 하는데, 하나로 묶어서 처리하다 보니 검색 인용 통로가 조용히 닫혀 있었습니다.
처음 택한 방식은 User-agent: * 아래에 Disallow: / 를 거는 것이었습니다. 벤더별로 봇 이름이 계속 늘어나는 게 번거로워서, 이름을 일일이 나열하지 않고 한 번에 막아버리면 관리가 편할 거라고 생각했습니다. 하지만 이 방식은 학습 봇과 검색 봇을 구분하지 않습니다. User-agent에 와일드카드를 쓰면 해당 회사의 모든 봇이 같은 규칙을 적용받기 때문에, 학습만 막으려던 의도와 달리 검색 인용용 봇의 요청까지 걸러졌습니다. 이름을 따로 쓰지 않고 뭉뚱그린 규칙이 원인이었습니다.
벤더별로 학습용 이름과 검색용 이름을 분리해서 규칙을 다시 썼습니다. 학습 목적인 GPTBot, ClaudeBot은 Disallow로 막고, 검색 색인·품질 확인 목적인 OAI-SearchBot, Claude-SearchBot, PerplexityBot은 Allow로 열어뒀습니다. Google-Extended는 제미나이 학습과 그라운딩에 쓰이는 이름인데, 구글 문서에 이 항목을 막아도 구글 검색 색인이나 순위에는 영향이 없다고 명시돼 있어서 학습 차단 목적으로만 걸어뒀습니다. ChatGPT-User, Claude-User, Perplexity-User는 사람이 직접 질문했을 때 그 자리에서 페이지를 확인하러 오는 요청이라 자동 수집과 성격이 다릅니다. robots.txt 규칙이 이 봇들에는 적용되지 않을 수 있다고 알려져 있어서, 이번 정리에서는 따로 규칙을 걸지 않고 그대로 뒀습니다.
User-agent: GPTBot
Disallow: /
User-agent: OAI-SearchBot
Allow: /
User-agent: ClaudeBot
Disallow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Google-Extended
Disallow: /
수치로 보여줄 로그는 없지만, 구조가 무엇을 확인할 수 있게 바뀌었는지는 정리할 수 있습니다.
| 항목 | 이전 | 이후 |
|---|---|---|
| 규칙 단위 | User-agent: * 하나로 전체 차단 | 벤더·목적별 봇 이름 6개로 개별 지정 |
| 학습 봇 | 차단 여부 불명확 | GPTBot, ClaudeBot 명시적 Disallow |
| 검색 인용 봇 | 의도치 않게 차단됨 | OAI-SearchBot, Claude-SearchBot, PerplexityBot Allow |
| 제미나이 관련 | 구분 없이 처리 | Google-Extended만 별도 차단, 검색 색인엔 무관 |
| 사용자 요청 봇 | 일괄 규칙에 포함 | 규칙 대상에서 제외, 별도 처리 안 함 |
robots.txt는 권고 사항이라 이를 따르지 않는 수집기가 존재합니다. 이번에 정리한 규칙은 표준을 지키는 크롤러에만 적용되고, 그렇지 않은 수집기까지 막지는 못합니다. 또 ChatGPT-User, Claude-User, Perplexity-User처럼 사용자가 즉석에서 요청해 접근하는 봇은 robots.txt가 적용되지 않을 수 있다는 점을 알고 있을 뿐, 실제로 이 사이트에서 어떻게 동작하는지는 확인할 방법이 마땅치 않습니다. 벤더들이 봇 이름을 새로 추가하거나 역할을 바꿀 때마다 이 목록을 다시 점검해야 한다는 점도 유지보수 부담으로 남습니다.
봇 이름을 회사 단위로 뭉쳐서 막으면 학습 차단과 검색 인용 차단이 같이 걸립니다. 목적별로 나뉜 이름을 그대로 살려서 규칙을 쓰는 것만으로도 의도한 부분만 막고 원하는 통로는 열어둘 수 있었습니다. 다만 robots.txt는 상대가 지킬 때만 의미가 있는 약속이라는 점은 그대로 남습니다.
이 글에서 다룬 크롤러 구분은 결국 어떤 AI 모델이 이 콘텐츠에 어떤 방식으로 접근하는지를 정리하는 작업이었습니다. KIMS에서는 본인이 가진 API 키를 직접 연결해 Claude·GPT·Gemini 중 원하는 모델을 붙여 쓸 수 있는 구조를 두고 있습니다. 어떤 벤더의 검색 인용 경로를 열어둘지 판단하는 과정과, 어떤 모델을 직접 연결해 쓸지 고르는 과정은 같은 맥락에서 함께 점검해볼 만합니다.
KIMS AI 도구를 직접 붙여 쓰는 개인 사용자·개발자를 위한 서비스 — 자세히 보기