robots.txt robots.txt
robots.txt는 검색엔진과 AI 크롤러에게 사이트의 어떤 경로를 크롤링해도 되는지 알려주는, 사이트 루트에 두는 표준 텍스트 파일입니다. 1994년 제안된 로봇 배제 프로토콜(REP)이 2022년 IETF RFC 9309로 공식 표준화되었고, 구글은 물론 OpenAI·Anthropic·Perplexity의 크롤러도 이 파일을 확인합니다. 다만 구글 공식 문서에 따르면 robots.txt 차단은 색인 제거를 보장하지 않으므로 noindex와 구분해 사용해야 합니다.
왜 중요한가 - 크롤러가 가장 먼저 여는 문
robots.txt는 검색엔진과 AI 크롤러에게 사이트의 어떤 경로를 크롤링해도 되는지 알려주는, 사이트 루트에 두는 일반 텍스트 파일입니다. 구글 검색센터는 이 파일을 "크롤러가 접근할 수 있는 URL을 알려주는 파일이며, 주로 사이트에 요청이 과도하게 몰리는 것을 피하기 위해 쓴다"고 설명합니다 Google 공식. 같은 문서는 파일이 반드시 대상 호스트의 루트에 있어야 한다고 분명히 밝힙니다 - https://www.example.com/ 아래 URL을 제어하려면 파일 위치는 https://www.example.com/robots.txt 여야 합니다.
이 방식의 출발점은 1994년 Martijn Koster가 제안한 로봇 배제 프로토콜(REP)이고, IETF는 2022년 9월 이를 RFC 9309로 공식 표준화했습니다 RFC 9309. 표준은 파서가 최소 500KiB까지 처리해야 한다고 정해 두었고, 구글도 "500KiB(키비바이트) 크기 제한을 적용하며 이를 초과하는 내용은 무시한다"고 밝힙니다 Google 공식.
역할은 크게 둘입니다. 첫째는 크롤링 트래픽 관리로, 구글 크롤 예산 문서는 페이지 100만 개 이상 대규모 사이트에서 무한 스크롤 복제나 정렬 변형처럼 통합이 어려운 URL을 robots.txt로 차단하라고 권합니다 Google 공식. 둘째는 GPTBot·ClaudeBot·PerplexityBot 같은 AI 크롤러의 접근을 허용할지 밝히는 정책 문서 역할이며, AI 검색에서 인용되는 것이 목표라면 이 파일이 첫 번째 점검 대상입니다.
기본 문법과 예시 코드
구글 검색센터에 따르면 규칙은 User-agent 줄로 시작하는 그룹 단위로 묶이며, disallow는 크롤링을 원치 않는 경로를, allow는 disallow를 덮어쓰는 예외 경로를 지정합니다 Google 공식. 규칙이 충돌하면 구글은 "규칙 경로의 길이를 기준으로 가장 구체적인 규칙"을 적용하고, 길이가 같아 똑같이 충돌하면 덜 제한적인 규칙을 사용합니다 Google 공식.
# 일반 검색엔진 크롤러
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /?s=
# AI 검색 노출용 크롤러 - 인용을 원한다면 허용
User-agent: OAI-SearchBot
Allow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /
# AI 모델 학습용 크롤러 - 콘텐츠 정책에 따라 결정
User-agent: GPTBot
Allow: /
# 사이트맵 위치는 절대 URL로
Sitemap: https://www.example.com/sitemap.xml
/wp-admin/ 전체를 막으면서 admin-ajax.php만 예외로 허용한 것은 프런트엔드 기능이 이 엔드포인트를 호출하는 경우가 있기 때문입니다. 구글은 "리소스가 없어서 크롤러가 페이지를 이해하기 어려워진다면 해당 리소스를 차단하지 말라"고 경고합니다 Google 공식.
Sitemap 지시어
Sitemap 지시어는 XML 사이트맵의 위치를 크롤러에게 알려줍니다. 구글은 "사이트맵 URL이 완전한 형태(fully-qualified)여야 하며, http/https·www 유무 같은 변형을 추정하거나 확인하지 않는다"고 명시합니다 Google 공식. 또한 sitemap 필드는 구글·빙 등 주요 검색엔진이 지원하며 개수 제한 없이 여러 개를 지정할 수 있습니다.
가장 큰 오해 - 차단은 색인 제거가 아닙니다
가장 흔한 오해부터 정리합니다. 구글은 robots.txt가 "웹페이지를 구글 검색결과에서 제외하는 수단이 아니"라고 못 박습니다 Google 공식. 차단된 페이지도 다른 사이트에서 링크되면 색인될 수 있고, 이때 URL 주소와 앵커 텍스트 같은 공개 정보가 검색결과에 나타날 수 있습니다. 서치 콘솔 페이지 색인 보고서의 "robots.txt에 의해 차단되었지만 색인이 생성됨" 상태가 바로 이 경우입니다.
색인에서 확실히 제거하려면 noindex 메타 태그나 X-Robots-Tag HTTP 헤더를 써야 합니다. 여기 결정적인 함정이 있습니다 - 구글은 "noindex 규칙이 효력을 가지려면 해당 페이지나 리소스가 robots.txt로 차단되어 있지 않아야 하고, 크롤러가 접근할 수 있어야 한다"고 명시합니다 Google 공식. robots.txt로 차단한 페이지에 noindex를 넣으면 크롤러가 그 태그를 영영 보지 못합니다. 색인 제거가 목적이라면 robots.txt는 열어 두고 noindex만 적용하는 것이 올바른 순서이며, 크롤링과 색인이 별개의 단계임을 이해하면 이 구분이 자연스러워집니다.
AI 크롤러와 robots.txt - 학습용과 검색용을 구분합니다
OpenAI 공식 문서는 봇을 셋으로 구분합니다. GPTBot은 파운데이션 모델 학습용, OAI-SearchBot은 ChatGPT 검색에 사이트를 노출하는 크롤러, ChatGPT-User는 사용자 질문에 따라 페이지를 방문하는 fetcher 이며, 각 봇은 robots.txt에서 독립적으로 제어할 수 있습니다 OpenAI 공식. Anthropic도 ClaudeBot(학습)·Claude-SearchBot(검색)·Claude-User(사용자 요청) 세 봇을 안내하며 "Anthropic의 봇은 robots.txt의 업계 표준 지시어를 준수한다"고 명시합니다 Anthropic 공식. Perplexity는 PerplexityBot이 검색 노출용이라고 설명하면서, 사용자 요청으로 동작하는 Perplexity-User는 "일반적으로 robots.txt 규칙을 무시한다"고 같은 문서에 밝힙니다 Perplexity 공식.
그런데 "준수한다"는 공식 선언과 실제 크롤러 행동이 늘 일치하지는 않습니다. 이 지점에서 제작사의 공식 입장과 현장 실측 결과가 갈립니다.
| 제작사 공식 입장 | OpenAI·Anthropic·Perplexity 공식 문서는 자사 검색 크롤러가 robots.txt의 업계 표준 지시어를 준수한다고 명시합니다. Perplexity 공식 |
|---|---|
| 전문가 실측 결과 | Cloudflare 실측(2025)은 robots.txt로 전체 차단한 신규 도메인에서도 Perplexity가 Chrome을 사칭한 미신고 크롤러로 우회 접근해 하루 300~600만 요청을 보낸 사실을 확인하고, Perplexity를 검증된 봇 목록에서 제외했습니다. Cloudflare 실측 |
차이가 나는 이유는 robots.txt가 물리적 잠금장치가 아니라 '요청'이기 때문입니다. 지킬지는 크롤러 운영사의 정책에 달려 있고, 벤더마다 다릅니다 - 같은 실측에서 OpenAI의 ChatGPT-User는 robots.txt를 확인한 뒤 크롤링을 멈춘 모범 사례로 꼽혔습니다 Cloudflare 실측. 실무 판단은 두 갈래입니다. 검색·인용 노출을 관리하는 목적이라면 robots.txt로 충분하지만, 반드시 막아야 할 콘텐츠라면 인증·서버 차단·WAF처럼 강제력 있는 수단을 함께 씁니다.
제작사 관점의 실무 체크포인트
- 실제 응답이 어디서 나오는지 먼저 확인합니다. CMS는 루트에 물리 파일이 없을 때 robots.txt를 동적으로 생성해 응답하기도 합니다. 물리 파일과 동적 응답을 이중 관리하면 사고로 이어지므로, 브라우저에서 /robots.txt를 직접 열어 현재 응답의 출처부터 확인합니다.
- 스테이징 차단과 오픈 시 해제를 배포 체크리스트에 넣습니다. 개발 중 전체 차단(Disallow: /)을 라이브 전환 시 해제하지 않으면 사이트 전체의 크롤링이 계속 차단됩니다.
- CSS와 JS는 차단하지 않습니다. 렌더링에 필요한 자원을 막으면 구글이 그 리소스가 필요한 페이지를 제대로 분석하지 못한다고 구글 문서가 경고합니다 Google 공식.
- AI 크롤러 정책을 클라이언트와 합의합니다. OpenAI·Anthropic·Perplexity 공식 문서 모두 학습용 봇과 검색 노출용 봇을 구분하므로 OpenAI 공식, "모델 학습 제공"과 "AI 검색 노출" 중 무엇을 허용할지 분리해서 결정한 뒤 파일에 반영합니다.
- 변경 후에는 서치 콘솔의 robots.txt 보고서로 검증합니다. 이 보고서는 구글이 발견한 robots.txt 파일과 마지막 크롤링 시점, 파싱 오류·경고를 보여주며 긴급한 변경 시 재크롤링 요청도 지원합니다 GSC 고객센터.
자주 하는 실수
- 스테이징용 "Disallow: /" 를 라이브 서버에 그대로 배포하는 실수. 가장 치명적이고 가장 흔합니다.
- 경로 매칭 방식 오해. 구글 문서에 따르면 규칙 경로는 접두사로 매칭되어 "/fish" 규칙이 /fishheads처럼 같은 문자열로 시작하는 모든 경로와 매치되므로, 디렉터리만 막으려면 끝에 슬래시를 붙입니다 Google 공식.
- 민감한 경로를 robots.txt로 숨기려는 시도. 이 파일은 루트 URL로 누구나 열람할 수 있어 오히려 감춰야 할 경로 목록을 공개하는 셈이 되므로, 접근 제어는 인증으로 해결해야 합니다.
- 서브도메인 누락. 구글은 "robots.txt의 규칙은 그 파일이 호스팅된 호스트·프로토콜·포트에만 적용된다"고 명시하므로 blog.example.com 에는 별도 파일이 필요합니다 Google 공식.
- Sitemap 지시어에 상대 경로를 쓰는 실수. 구글 문서 기준으로 사이트맵 URL은 완전한 절대 URL 이어야 합니다.
참고 자료
- robots.txt 소개 및 가이드 - Google Search Central
- Google의 robots.txt 사양 해석 방식 - Google Search Central
- robots.txt 파일 작성 및 제출 방법 - Google Search Central
- noindex를 사용해 색인 생성 차단하기 - Google Search Central
- 대규모 사이트의 크롤링 예산 관리 - Google Search Central
- robots.txt 보고서 - Google Search Console 고객센터
- RFC 9309: Robots Exclusion Protocol - IETF
- Overview of OpenAI Crawlers - OpenAI
- Does Anthropic crawl data from the web? - Anthropic Support
- Perplexity Crawlers - Perplexity Docs
- Perplexity is using stealth, undeclared crawlers to evade no-crawl directives - Cloudflare