로봇 배제 프로토콜
로봇 배제 프로토콜(Robots Exclusion Protocol, REP)은 웹사이트 운영자가 자동화된 크롤러에게 특정 경로나 자원에 접근하지 말 것을 요청하기 위한 규칙이다. 일반적으로 웹사이트 루트 경로에 위치한 robots.txt 파일을 통해 적용된다.
로봇 배제 프로토콜은 웹 크롤러가 웹사이트를 방문할 때 어떤 경로를 수집해도 되는지, 어떤 경로를 수집하지 말아야 하는지를 안내하는 프로토콜이다.
예를 들어 사이트 운영자는 다음과 같은 robots.txt 파일을 통해 모든 크롤러가 특정 관리자 경로를 크롤링하지 않도록 요청할 수 있다.
User-agent: *
Disallow: /admin/
로봇 배제 프로토콜은 검색엔진, 아카이브, AI 학습용 크롤러, 가격 수집 봇 등 자동화된 클라이언트가 웹사이트를 무분별하게 수집하는 것을 완화하기 위해 사용된다.
다만 이 프로토콜은 강제적 접근제어 수단이 아니라, 크롤러가 자발적으로 준수해야 하는 규칙이다. 악의적인 크롤러나 규칙을 무시하는 봇은 robots.txt를 따르지 않을 수 있다.
로봇 배제 프로토콜의 공식 표준 문서는 RFC 9309이다.
RFC 9309의 제목은 다음과 같다.
Robots Exclusion Protocol
즉, robots.txt와 관련된 표준명은 "Robots Exclusion Protocol"이다. 한국어로는 일반적으로 "로봇 배제 프로토콜"이라고 번역할 수 있다.
로봇 배제 프로토콜의 목적은 다음과 같다.
- 크롤러가 접근하지 말아야 할 경로 안내
- 서버 부하 완화
- 검색엔진 색인 대상 조정
- 중복 페이지 또는 불필요한 페이지 수집 제한
- 비공개에 가까운 운영 경로의 검색 노출 방지
- 사이트 운영자의 크롤링 정책 전달
robots.txt는 로봇 배제 프로토콜을 구현하기 위해 사용하는 텍스트 파일이다.
일반적으로 다음 위치에 둔다.
https://example.com/robots.txt
크롤러는 웹사이트를 크롤링하기 전에 robots.txt 파일을 확인하고, 자신에게 적용되는 규칙을 해석한 뒤 크롤링 여부를 결정한다.
robots.txt 파일은 하나 이상의 그룹으로 구성된다.
각 그룹은 보통 다음과 같은 구조를 가진다.
User-agent: 크롤러명
Disallow: 차단할 경로
Allow: 허용할 경로
예:
User-agent: *
Disallow: /private/
Allow: /private/public.html
User-agent는 규칙을 적용할 크롤러를 지정한다.
예:
User-agent: Googlebot
모든 크롤러에 적용하려면 별표를 사용한다.
User-agent: *
Disallow는 크롤러가 접근하지 말아야 할 경로를 지정한다.
예:
Disallow: /admin/
위 규칙은 `/admin/`으로 시작하는 경로를 크롤링하지 말라는 의미이다.
Allow는 특정 경로에 대한 접근을 허용한다.
예:
User-agent: *
Disallow: /images/
Allow: /images/public/
위 예시는 `/images/` 전체는 차단하되, `/images/public/` 경로는 허용하는 방식이다.
일부 지시어는 RFC 9309의 핵심 규칙은 아니지만, 검색엔진이나 크롤러 실무에서 널리 사용된다.
Sitemap 지시어는 사이트맵 파일의 위치를 알려준다.
예:
Sitemap: https://example.com/sitemap.xml
사이트맵은 검색엔진이 사이트의 URL 구조를 파악하는 데 도움을 준다.
Crawl-delay는 크롤러 요청 간 지연 시간을 지정하기 위해 일부 크롤러에서 사용하는 지시어이다.
예:
Crawl-delay: 10
다만 모든 검색엔진이 Crawl-delay를 지원하는 것은 아니므로, 서버 부하 제어는 웹 서버 설정, 방화벽, rate limiting, 검색엔진별 크롤링 설정 등을 함께 고려해야 한다.
모든 크롤러의 모든 경로 접근을 허용한다.
User-agent: *
Disallow:
모든 크롤러의 모든 경로 접근을 차단 요청한다.
User-agent: *
Disallow: /
모든 크롤러에게 `/admin/`과 `/tmp/` 경로를 크롤링하지 말라고 요청한다.
User-agent: *
Disallow: /admin/
Disallow: /tmp/
특정 크롤러만 차단한다.
User-agent: BadBot
Disallow: /
특정 크롤러에는 별도 규칙을 적용하고, 나머지 크롤러에는 일반 규칙을 적용한다.
User-agent: Googlebot
Disallow: /test/
User-agent: *
Disallow: /admin/
크롤러는 일반적으로 다음 순서로 동작한다.
- 대상 사이트의 robots.txt 파일을 요청한다.
- robots.txt 파일의 내용을 해석한다.
- 자신의 User-agent에 해당하는 규칙을 찾는다.
- 요청하려는 URL 경로가 Allow 또는 Disallow 규칙에 해당하는지 확인한다.
- 허용된 경로만 크롤링한다.
robots.txt의 Allow와 Disallow는 URL 전체가 아니라 보통 경로 부분에 적용된다.
예를 들어 다음 규칙이 있다고 하자.
User-agent: *
Disallow: /board/
이 경우 다음 경로는 차단 대상이 된다.
/board/
/board/list
/board/view?id=1
그러나 다음 경로는 일반적으로 다른 경로로 취급된다.
/notice/board/
실무에서는 별표와 달러 기호를 이용한 패턴 매칭이 자주 사용된다.
예:
User-agent: *
Disallow: /*?sort=
Disallow: /*.pdf$
의미는 다음과 같다.
| 기호 | 의미 |
|---|---|
| * | 임의의 문자열 |
| $ | URL 끝 |
다만 크롤러별로 세부 지원 범위가 다를 수 있으므로, 중요한 크롤링 정책은 검색엔진별 문서를 함께 확인하는 것이 좋다.
robots.txt 파일 요청에 대한 서버 응답에 따라 크롤러의 해석이 달라질 수 있다.
일반적인 해석은 다음과 같다.
| 상황 | 의미 |
|---|---|
| robots.txt가 정상적으로 제공됨 | 파일의 규칙을 해석하여 적용 |
| robots.txt가 없음 | 차단 규칙이 없는 것으로 보고 크롤링 가능 |
| 서버 오류로 robots.txt에 접근할 수 없음 | 일시적으로 크롤링을 보류하거나 제한적으로 해석 가능 |
| robots.txt 파일 파싱 오류 | 해석 가능한 규칙만 적용 가능 |
운영자는 robots.txt가 의도한 상태 코드로 정상 제공되는지 확인해야 한다.
크롤러는 robots.txt 파일을 매 요청마다 다시 가져오지 않고 일정 시간 캐시할 수 있다.
따라서 robots.txt를 수정해도 모든 크롤러에 즉시 반영되지 않을 수 있다.
운영 관점에서는 다음을 고려해야 한다.
- robots.txt 변경 후 반영 지연 가능성
- 검색엔진별 캐시 정책 차이
- 테스트 도구를 통한 적용 여부 확인
- 검색엔진 콘솔에서 robots.txt 상태 확인
로봇 배제 프로토콜은 보안 기능이 아니다.
robots.txt는 누구나 볼 수 있는 공개 파일이며, 차단 경로를 명시하면 오히려 민감한 경로의 존재를 알려줄 수 있다.
예를 들어 다음과 같은 규칙은 `/secret-admin/`이라는 경로의 존재를 외부에 노출한다.
User-agent: *
Disallow: /secret-admin/
민감한 정보나 관리자 페이지를 보호하려면 robots.txt가 아니라 다음과 같은 보안 조치를 적용해야 한다.
- 인증
- 접근제어
- 방화벽
- IP 제한
- 세션 관리
- 권한 검증
- 서버 설정
- 비공개 네트워크 분리
robots.txt는 크롤링을 제어하는 수단이지, 검색 결과 노출을 완전히 통제하는 수단은 아니다.
어떤 URL이 robots.txt로 크롤링 차단되어 있더라도, 외부 링크 등을 통해 URL 자체가 검색엔진에 알려지면 검색 결과에 URL만 노출될 수 있다.
검색 결과에서 페이지 내용을 제거하거나 색인을 막고 싶다면 다음 방법을 상황에 맞게 사용해야 한다.
- noindex 메타 태그
- X-Robots-Tag HTTP 헤더
- 검색엔진 콘솔의 URL 제거 도구
- 인증 기반 접근제어
- 404 또는 410 응답
- canonical 태그
robots.txt와 noindex는 혼동하기 쉽지만 목적이 다르다.
| 구분 | robots.txt | noindex |
|---|---|---|
| 목적 | 크롤링 제어 | 색인 제어 |
| 적용 위치 | 사이트 루트의 robots.txt 파일 | HTML 메타 태그 또는 HTTP 헤더 |
| 페이지 접근 | 크롤러 접근 자체를 막을 수 있음 | 크롤러가 페이지를 읽어야 적용 가능 |
| 주요 효과 | 특정 경로 수집 제한 | 검색 결과 색인 제외 |
| 보안 기능 여부 | 아님 | 아님 |
주의할 점은 robots.txt로 차단된 페이지에 noindex 태그가 있어도, 크롤러가 해당 페이지를 읽지 못하면 noindex를 확인할 수 없다는 점이다.
로봇 배제 프로토콜은 접근제어가 아니다.
| 구분 | 로봇 배제 프로토콜 | 접근제어 |
|---|---|---|
| 성격 | 크롤러에 대한 요청 또는 권고 | 시스템이 강제하는 보안 통제 |
| 준수 주체 | 선의의 크롤러 | 서버, 애플리케이션, 보안 장비 |
| 악의적 접근 차단 | 불가능 | 가능 |
| 대표 수단 | robots.txt | 로그인, 권한검사, 방화벽, ACL |
SEO에서 robots.txt는 검색엔진 크롤링 자원을 관리하는 데 사용된다.
대표적인 활용은 다음과 같다.
- 관리자 페이지 크롤링 방지
- 검색 결과에 필요 없는 필터 페이지 제한
- 중복 URL 크롤링 감소
- 내부 검색 결과 페이지 크롤링 제한
- 사이트맵 위치 제공
- 크롤링 예산 관리
다만 잘못 설정하면 중요한 페이지가 검색엔진에 수집되지 않을 수 있으므로 주의해야 한다.
최근에는 검색엔진 크롤러뿐 아니라 AI 학습용 크롤러도 robots.txt를 참고하는 경우가 있다.
운영자는 특정 AI 크롤러의 User-agent를 확인하여 허용 또는 차단 규칙을 작성할 수 있다.
예:
User-agent: ExampleAIBot
Disallow: /
다만 모든 AI 크롤러가 robots.txt를 준수하는 것은 아니므로, 중요한 데이터 보호는 별도의 접근제어와 법적·계약적 조치를 함께 고려해야 한다.
다음 설정은 민감한 경로 이름을 외부에 노출할 수 있다.
User-agent: *
Disallow: /private-customer-data/
민감 데이터는 robots.txt가 아니라 인증과 접근제어로 보호해야 한다.
다음 설정은 모든 크롤러에게 전체 사이트 크롤링을 차단 요청한다.
User-agent: *
Disallow: /
개발 서버에서 사용하던 설정을 운영 서버에 그대로 배포하면 검색 노출이 급감할 수 있다.
robots.txt는 색인 제거용 도구가 아니므로, 검색 노출을 막으려면 noindex나 접근제어를 함께 고려해야 한다.
robots.txt를 점검할 때는 다음 항목을 확인한다.
- 루트 경로에 robots.txt가 존재하는가
- HTTP 상태 코드가 정상인가
- User-agent 그룹이 의도대로 작성되었는가
- 중요한 페이지가 실수로 차단되지 않았는가
- 민감한 경로명이 불필요하게 노출되지 않았는가
- 사이트맵 경로가 정확한가
- 검색엔진 콘솔에서 차단 여부가 의도와 일치하는가
- 개발 환경의 robots.txt가 운영 환경에 잘못 반영되지 않았는가
- AI 크롤러 차단 정책이 필요한가
- 서버 로그에서 크롤러가 규칙을 준수하는지 확인했는가
일반적인 웹사이트의 robots.txt 예시는 다음과 같다.
User-agent: *
Disallow: /admin/
Disallow: /login/
Disallow: /cart/
Disallow: /search
Allow: /
Sitemap: https://example.com/sitemap.xml
다만 사이트 구조와 검색 전략에 따라 적절한 설정은 달라질 수 있다.
| 구분 | robots.txt | 사이트맵 |
|---|---|---|
| 목적 | 크롤링 제한 또는 허용 정책 전달 | 크롤러에게 수집할 URL 목록 제공 |
| 대표 파일 | robots.txt | sitemap.xml |
| 성격 | 크롤러 제어 규칙 | URL 안내 문서 |
| 구분 | Disallow | noindex |
|---|---|---|
| 위치 | robots.txt | HTML 메타 태그 또는 HTTP 헤더 |
| 목적 | 크롤링 차단 | 색인 제외 |
| 페이지 내용 확인 필요 | 필요 없음 | 필요함 |
| 검색 결과 제거 목적 | 부적합할 수 있음 | 적합 |
| 구분 | 설명 |
|---|---|
| 크롤러 | 웹 문서를 자동으로 수집하는 프로그램 |
| 봇 | 자동화된 작업을 수행하는 프로그램의 일반적 표현 |
| 검색엔진 크롤러 | 검색 색인을 만들기 위해 웹페이지를 수집하는 크롤러 |
로봇 배제 프로토콜은 보안 통제가 아니므로 다음 원칙을 지켜야 한다.
- 민감한 파일은 robots.txt로 숨기지 않는다.
- 관리자 페이지는 인증과 접근제어로 보호한다.
- 개인정보 파일이나 백업 파일은 웹 루트에 두지 않는다.
- robots.txt에 민감한 경로명을 불필요하게 노출하지 않는다.
- 악성 봇 차단은 방화벽, WAF, rate limiting, 봇 차단 솔루션으로 수행한다.
- 크롤링 정책과 실제 접근제어 정책을 구분한다.
- 로봇 배제 프로토콜의 공식 영문명은 Robots Exclusion Protocol이다.
- robots.txt는 로봇 배제 프로토콜을 구현하는 대표 파일이다.
- robots.txt는 웹사이트 루트 경로에 위치한다.
- User-agent는 규칙을 적용할 크롤러를 지정한다.
- Disallow는 크롤러가 접근하지 말아야 할 경로를 지정한다.
- Allow는 특정 경로의 접근 허용을 지정한다.
- robots.txt는 보안용 접근제어 수단이 아니다.
- robots.txt는 크롤링 제어 수단이고, noindex는 색인 제어 수단이다.
- robots.txt에 민감한 경로를 적으면 오히려 경로가 노출될 수 있다.
- 모든 크롤러가 robots.txt를 준수하는 것은 아니다.
- 사이트맵 위치를 robots.txt에 함께 기재할 수 있다.
- 검색엔진 노출을 막으려면 robots.txt, noindex, 접근제어의 차이를 구분해야 한다.
- RFC 9309, Robots Exclusion Protocol.
- Google Search Central, robots.txt 관련 문서.
- Bing Webmaster Tools, robots.txt 관련 문서.
