robots.txt
1. 개요
1. 개요
robots.txt는 웹사이트에 웹 크롤러 같은 로봇들의 접근을 제어하기 위한 규약이다. 이 파일은 검색 엔진의 크롤러가 사이트를 방문할 때, 어떤 URL 경로를 크롤링해도 되고 하지 말아야 하는지를 지시하는 역할을 한다. 본질적으로는 사이트 관리자가 크롤러에게 특정 경로에 대한 크롤링을 자제해 줄 것을 권고하는 안내문에 가깝다.
이 규약은 공식적인 표준이 아닌 권고안 상태이므로, 크롤러가 이를 지킬 법적 의무는 없다. 그러나 대부분의 주요 검색 엔진을 포함한 정상적인 웹 크롤러들은 이 규칙을 존중하고 따르는 것이 일반적인 관행이다. 반대로, 사이트 운영자 역시 규칙을 무시하는 크롤러의 접근을 IP 주소 차단 등의 방법으로 제어할 수 있다.
robots.txt 파일은 웹사이트의 최상위 경로, 즉 루트 디렉터리에 위치해야 정상적으로 인식된다. 예를 들어, 'http://example.com/robots.txt'와 같은 경로에서 접근할 수 있어야 한다. 이 파일을 통해 모든 크롤러의 접근을 완전히 차단하거나, 특정 디렉터리만 차단하는 등 다양한 제어가 가능하다.
2. 역사와 표준
2. 역사와 표준
robots.txt의 개념은 1994년에 처음 제안되었다. 당시 검색 엔진 크롤러들이 웹사이트의 원치 않는 부분까지 색인하거나 서버에 과도한 부하를 주는 문제가 발생하자, 이를 관리할 표준 방법의 필요성이 대두되었다. 이에 마틴 코스터를 비롯한 일부 웹 개발자들이 로봇 배제 표준(Robots Exclusion Standard) 초안을 작성하였으며, 이 문서가 웹사이트 루트 디렉터리에 'robots.txt'라는 이름으로 위치하도록 정하였다.
이 초안은 공식적인 인터넷 표준으로 승인된 것은 아니지만, 웹 커뮤니티 내에서 사실상의 표준으로 널리 채택되었다. 주요 검색 엔진인 구글, 빙, 네이버, 다음 등의 웹 크롤러는 대부분 이 규칙을 존중하며 따르고 있다. 표준화를 위한 노력의 일환으로, 2022년에는 IETF에 의해 공식 인터넷 초안으로 발표되기도 하였다[3]. 그러나 이 규약은 여전히 '권고안'의 지위를 가지며, 법적 구속력이 있는 강제 규칙은 아니다.
3. 문법과 작성법
3. 문법과 작성법
3.1. User-agent 지시어
3.1. User-agent 지시어
User-agent 지시어는 robots.txt 파일의 핵심 구성 요소로, 규칙이 적용될 대상 웹 크롤러를 지정한다. 이 지시어는 항상 규칙 블록의 첫 줄에 위치하며, 뒤에 오는 Disallow나 Allow 같은 지시어들의 적용 대상을 정의한다. User-agent 지시어를 통해 웹사이트 관리자는 특정 크롤러에 대한 접근 정책을 세밀하게 설정할 수 있다.
가장 일반적으로 사용되는 값은 별표(*)로, 이는 모든 로봇 또는 크롤러를 의미하는 와일드카드이다. 예를 들어 User-agent: *는 파일에 접근하는 모든 자동화된 에이전트에게 규칙을 적용한다. 반면, 특정 검색 엔진의 크롤러만을 대상으로 규칙을 설정하려면 해당 크롤러의 고유한 사용자 에이전트 문자열을 명시해야 한다. 예를 들어 구글의 기본 웹 크롤러는 Googlebot이며, 네이버의 크롤러는 Yeti이다.
하나의 robots.txt 파일 내에는 여러 개의 User-agent 블록이 존재할 수 있다. 각 블록은 서로 다른 크롤러에 대해 서로 다른 규칙을 정의한다. 크롤러는 파일을 위에서 아래로 순차적으로 읽으며, 자신의 사용자 에이전트 문자열과 일치하는 첫 번째 User-agent 지시어 블록의 규칙을 따르는 것이 일반적이다. 따라서 보다 구체적인 규칙을 우선적으로 배치하는 것이 좋은 관행이다.
3.2. Disallow 지시어
3.2. Disallow 지시어
Disallow 지시어는 robots.txt 파일에서 가장 핵심적인 명령어로, 특정 웹 크롤러에게 접근을 차단하거나 자제해 줄 것을 요청하는 경로를 지정한다. 이 지시어는 User-agent 지시어로 특정한 로봇 또는 모든 로봇(*)에게 적용되며, 차단할 URL 경로를 값으로 가진다. 예를 들어, Disallow: /private/는 /private/ 디렉터리와 그 하위 모든 내용에 대한 크롤링을 차단한다.
Disallow 지시어의 값은 일반적으로 디렉터리 경로를 지정하며, 경로 끝에 슬래시(/)를 붙이는 것이 일반적이다. 슬래시를 생략하면 확장자가 없는 파일로 인식될 수 있어 의도하지 않은 동작을 초래할 수 있다. 또한, 빈 값(Disallow:)은 '아무것도 차단하지 않음', 즉 모든 접근을 허용한다는 의미로 해석된다. 이는 Allow: /와 동일한 효과를 가지지만, Disallow 지시어의 특별한 케이스로 이해된다.
여러 규칙이 존재할 경우, 구체적인 경로를 가진 규칙이 우선적으로 적용된다. 예를 들어, Disallow: /images/와 Allow: /images/public.jpg가 함께 있다면, /images/ 디렉터리는 대부분 차단되지만 그 안의 public.jpg 파일만은 예외적으로 허용된다. 이러한 규칙 해석은 구글과 같은 주요 검색 엔진의 크롤러가 따르는 방식이다.
Disallow 지시어만으로는 완벽한 접근 차단을 보장할 수 없다는 점이 중요하다. 이는 권고안에 불과하기 때문에, 악의적인 크롤러나 규칙을 존중하지 않는 로봇은 이를 무시하고 차단된 경로에도 접근할 수 있다. 따라서 민감한 정보를 보호해야 할 경우, 패스워드 인증이나 IP 주소 차단과 같은 추가적인 보안 수단을 반드시 병행해야 한다.
3.3. Allow 지시어
3.3. Allow 지시어
Allow 지시어는 Disallow 지시어와 함께 사용되어, 특정 웹 크롤러에게 특정 경로나 파일에 대한 접근을 명시적으로 허용하는 역할을 한다. 이 지시어는 주로 Disallow로 차단된 광범위한 영역 내에서 일부 예외 경로를 열어주기 위해 사용된다. 예를 들어, 특정 디렉터리 전체를 차단했으나 그 안의 하나의 하위 페이지는 검색 엔진에 노출시키고 싶을 때 유용하게 활용할 수 있다.
Allow 지시어의 문법은 Disallow와 동일하다. User-agent 지시어로 크롤러를 지정한 후, Allow: 뒤에 허용할 경로를 적는다. 여러 검색 엔진의 로봇 배제 표준 구현에서는 Disallow와 Allow 규칙이 충돌할 경우, 더 구체적인 경로를 가진 규칙이 우선 적용되는 원칙을 따른다. 또한, 일부 크롤러는 Allow 지시어를 인식하지 않을 수 있으므로, 주요 검색 엔진의 공식 문서를 참고하는 것이 좋다.
사용 예시로, 모든 크롤러에게 /private/ 디렉터리 접근을 차단하되, 그 안의 intro.html 파일만은 허용하려면 다음과 같이 작성한다.
```
User-agent: *
Disallow: /private/
Allow: /private/intro.html
```
이 경우, /private/ 경로 아래의 다른 모든 파일은 차단되지만, /private/intro.html 파일에 대해서만은 크롤링이 허용된다. Allow 지시어는 사이트맵 지시어와 함께 웹마스터가 원하는 콘텐츠가 효율적으로 색인되도록 돕는 중요한 도구이다.
3.4. Sitemap 지시어
3.4. Sitemap 지시어
Sitemap 지시어는 웹사이트의 사이트맵 파일 위치를 웹 크롤러에게 알려주는 역할을 한다. 이 지시어는 robots.txt 파일의 권고 사항 중 하나로, 검색 엔진이 사이트의 모든 페이지를 더 효율적으로 발견하고 색인화할 수 있도록 돕는다. 사이트맵 파일은 일반적으로 XML 형식으로 작성되며, 사이트 내의 URL 목록과 각 URL의 최종 수정일, 변경 빈도, 중요도 등의 메타데이터를 포함할 수 있다.
Sitemap 지시어의 문법은 매우 간단하다. "Sitemap:" 뒤에 사이트맵 파일의 절대 URL을 명시하면 된다. 예를 들어, Sitemap: https://example.com/sitemap.xml과 같이 작성한다. 하나의 robots.txt 파일 내에 여러 개의 Sitemap 지시어를 추가하여 여러 사이트맵 파일을 지정하는 것도 가능하다. 이는 대규모 웹사이트나 콘텐츠가 여러 부분으로 나뉘어 있는 경우에 유용하다.
주요 검색 엔진인 구글, 빙, 야후 등의 크롤러는 이 지시어를 인식하고 해당 사이트맵을 참조한다. 특히 새로 생성된 페이지나 깊은 디렉터리 구조에 있는 페이지가 크롤링에서 누락되는 것을 방지하는 데 도움이 된다. 따라서 검색 엔진 최적화 측면에서 유용한 보조 도구로 활용된다.
그러나 Sitemap 지시어는 robots.txt의 다른 지시어들과 마찬가지로 강제성이 있는 규칙이 아니다. 이는 웹마스터가 크롤러에게 사이트맵 위치를 제안하는 것에 불과하며, 크롤러가 이를 반드시 사용하거나 따라야 할 의무는 없다. 또한, 사이트맵을 제출했다고 해서 해당 URL들이 반드시 색인화된다는 보장은 없다. 최종적인 색인 여부는 검색 엔진의 알고리즘과 정책에 따라 결정된다.
3.5. 와일드카드 및 정규식
3.5. 와일드카드 및 정규식
robots.txt 파일에서는 경로 지정 시 와일드카드 문자를 사용할 수 있다. 가장 일반적으로 사용되는 와일드카드는 별표(*)로, 이는 임의의 길이의 문자열을 의미한다. 예를 들어, Disallow: /*.php$와 같은 규칙은 .php로 끝나는 모든 경로를 차단한다. 또한, 달러 기호($)는 문자열의 끝을 나타내는 특수 문자로, 주로 특정 확장자나 정확한 경로를 지정할 때 사용된다.
일부 주요 검색 엔진의 크롤러는 robots.txt 규칙 해석에 정규식(정규 표현식)을 제한적으로 지원하기도 한다. 하지만 이는 공식 표준이 아니며, 모든 로봇이 이를 이해하는 것은 아니다. 구글의 Googlebot은 * 와일드카드와 $ 문자를 인식하지만, 완전한 정규 표현식 문법은 지원하지 않는다. 따라서 복잡한 패턴 매칭이 필요할 경우, 가능한 한 단순한 와일드카드 패턴을 사용하거나, 차단이 필요한 각 경로를 명시적으로 나열하는 것이 더 안전한 방법이다.
와일드카드와 정규식 사용 시 주의할 점은, 의도치 않게 중요한 페이지나 디렉터리의 크롤링을 차단할 수 있다는 것이다. 예를 들어, Disallow: /page*라는 규칙은 /page, /page1, /page/about 등 'page'로 시작하는 모든 경로를 차단한다. 규칙을 적용하기 전에 테스트를 거치거나, 구글 서치 콘솔과 같은 도구의 robots.txt 테스터를 활용하여 예상대로 동작하는지 확인하는 것이 좋다.
4. 사용 예시
4. 사용 예시
4.1. 전체 접근 허용
4.1. 전체 접근 허용
웹사이트의 모든 콘텐츠에 대한 웹 크롤러의 접근을 명시적으로 허용하는 설정이다. 모든 로봇을 의미하는 User-agent: * 지시어와 모든 경로를 허용하는 Allow: / 지시어를 조합하여 작성한다.
이 설정은 기본적으로 대부분의 검색 엔진 크롤러가 접근을 허용하는 것이 일반적이므로, 별도로 robots.txt 파일을 작성하지 않은 경우와 사실상 동일한 효과를 가진다. 따라서 모든 접근을 허용하는 명시적 선언은 특별한 차단 규칙이 없음을 강조하는 의미로 사용될 수 있다.
이러한 설정은 사이트의 모든 페이지가 검색 엔진에 색인되는 것을 원할 때 사용되며, 구글이나 네이버와 같은 주요 검색 엔진의 크롤러는 이 규칙을 존중하여 제한 없이 사이트를 탐색하게 된다.
4.2. 전체 접근 차단
4.2. 전체 접근 차단
웹사이트에서 모든 웹 크롤러의 접근을 완전히 차단하려면 robots.txt 파일에 User-agent: *와 Disallow: / 지시어를 사용한다. 이 설정은 모든 로봇에 대해 사이트의 모든 경로(/)에 대한 접근을 금지한다. 이는 사이트 전체를 검색 엔진의 색인에서 완전히 제외시키고자 할 때 사용하는 방법이다.
이 설정을 적용한 대표적인 사례로는 다음의 메인화면과 검색결과 페이지가 있다. 이들은 모든 크롤러에게 사이트 전체 접근을 차단하는 robots.txt를 사용하고 있다. 그러나 이 방법은 사이트의 모든 페이지가 검색 결과에 노출되지 않게 하므로, 일반적인 공개 웹사이트에는 적합하지 않을 수 있다.
robots.txt는 크롤러에게 접근을 *권고*하는 표준일 뿐, 강제성이 없다는 점을 유의해야 한다. 일부 악의적인 크롤러나 스크래핑 봇은 이 규칙을 무시하고 사이트를 방문할 수 있다. 따라서 완벽한 접근 차단을 위해서는 IP 차단이나 인증 같은 추가적인 서버 측 보안 조치가 필요하다.
4.3. 특정 디렉터리 차단
4.3. 특정 디렉터리 차단
특정 디렉터리나 경로의 크롤링을 차단하는 것은 robots.txt의 가장 일반적인 용도이다. 예를 들어, 관리자 페이지, 로그인 디렉터리, 임시 파일 폴더, 혹은 검색 결과가 노출되면 안 되는 내부 시스템 경로 등을 보호하기 위해 사용한다. 이를 통해 불필요한 서버 트래픽을 줄이고, 민감하거나 중복된 콘텐츠가 검색 엔진에 색인되는 것을 방지할 수 있다.
차단할 디렉터리를 지정할 때는 Disallow 지시어를 사용하며, 경로 끝에 슬래시(/)를 붙여 디렉터리임을 명확히 해야 한다. 슬래시를 생략하면 확장자가 없는 단일 파일로 인식되어 의도한 대로 작동하지 않을 수 있다. 모든 로봇을 대상으로 /admin/ 디렉터리 접근을 차단하는 기본적인 규칙은 다음과 같다.
```
User-agent: *
Disallow: /admin/
```
더 복잡한 규칙을 구성할 수도 있다. 예를 들어, 특정 크롤러만 차단하거나, 여러 개의 디렉터리를 한 번에 지정할 수 있다. 다음 예시는 구글의 이미지 크롤러인 Googlebot-Image에게 /images/temp/와 /cache/ 디렉터리의 크롤링을 금지한다.
```
User-agent: Googlebot-Image
Disallow: /images/temp/
Disallow: /cache/
```
이러한 방식으로 웹사이트 운영자는 검색 엔진 최적화와 서버 자원 관리를 위해 특정 섹션만 선택적으로 크롤러에게 공개할 수 있다. 그러나 이 규칙은 강제성이 없는 권고이므로, 모든 웹 크롤러가 이를 준수한다고 보장할 수 없다는 점에 유의해야 한다.
4.4. 특정 크롤러만 차단
4.4. 특정 크롤러만 차단
특정 웹 크롤러만 차단하려면 User-agent 지시어에 해당 크롤러의 식별자를 명시하면 된다. 예를 들어, 구글의 검색 로봇인 Googlebot만 차단하고 다른 모든 크롤러는 허용하려면 다음과 같이 작성한다.
지시어 | 값 | 설명 |
|---|---|---|
User-agent | Googlebot | 대상 크롤러를 지정한다. |
Disallow | / | 지정된 크롤러에 대해 모든 경로 접근을 차단한다. |
User-agent | * | 다른 모든 크롤러를 의미한다. |
Allow | / | 다른 모든 크롤러에 대해 모든 경로 접근을 허용한다. |
이 방식은 특정 검색 엔진의 인덱싱만 제한하고자 할 때 유용하다. 예를 들어, 네이버의 Yeti나 다음의 Daumoa와 같은 특정 국내 포털 크롤러만 차단하는 정책을 구성할 수 있다. 각 주요 검색 엔진은 고유의 User-Agent 문자열을 사용하므로, 공식 문서에서 해당 값을 확인하여 정확히 지정해야 한다.
주의할 점은, Disallow 지시어만으로는 완벽한 차단이 보장되지 않는다는 것이다. 이는 크롤러에 대한 '권고'에 불과하며, 악의적인 스파이더나 규칙을 무시하는 크롤러는 이를 우회할 수 있다. 따라서 진정한 의미의 접근 차단이 필요하다면 IP 주소 차단이나 패스워드 인증과 같은 서버 수준의 보안 조치를 병행해야 한다.
5. 주요 검색 엔진 크롤러
5. 주요 검색 엔진 크롤러
robots.txt 파일은 특정 웹 크롤러의 User-Agent 문자열을 식별하여 그 접근을 제어한다. 주요 검색 엔진들은 각자의 크롤러를 운영하며, 이들의 User-Agent 문자열을 robots.txt 파일에 명시하여 개별적으로 규칙을 적용할 수 있다.
가장 대표적인 크롤러는 구글의 'Googlebot'이다. 구글은 일반 웹 페이지를 크롤링하는 Googlebot 외에도 이미지 검색을 위한 'Googlebot-Image', 스마트폰용 페이지를 크롤링하는 'Googlebot-Mobile' 등 다양한 크롤러를 보유하고 있다. 네이버의 경우 'Yeti'라는 이름의 크롤러를 사용하며, 다음은 'Daumoa'를 사용한다. 빙 검색엔진의 크롤러는 'Bingbot'으로 알려져 있다.
이 외에도 수많은 포털 사이트, 소셜 미디어 플랫폼, 아카이브 서비스, 보안 스캐너 등이 각자의 로봇을 운영한다. 예를 들어, 야후는 'Slurp', 트위터는 'Twitterbot', 페이스북은 'facebookexternalhit'이라는 크롤러를 사용한다. 최근에는 인공지능 챗봇과 대규모 언어 모델을 학습시키기 위한 크롤러도 등장했으며, OpenAI의 'ChatGPT-User'가 그 예이다.
robots.txt 파일에서 'User-agent: *' 지시어는 모든 크롤러를 대상으로 하지만, 특정 크롤러만을 대상으로 차별적인 규칙을 설정하는 것이 일반적이다. 예를 들어, 검색 엔진 노출은 원하지만 AI 학습용 크롤러의 접근은 차단하고자 할 때, 해당 크롤러의 정확한 User-Agent 문자열을 지정하여 Disallow 규칙을 적용할 수 있다.
6. 주의사항과 한계
6. 주의사항과 한계
6.1. 보안 수단으로의 부적절성
6.1. 보안 수단으로의 부적절성
robots.txt는 크롤러에게 접근 제한을 *요청*하는 권고 사항일 뿐, 강제적인 차단이나 보안 수단으로 사용되어서는 안 된다. 이 파일은 누구나 웹사이트의 루트 디렉토리에서 쉽게 접근하고 읽을 수 있기 때문에, 민감한 디렉토리나 파일의 위치를 오히려 공개하는 결과를 초래할 수 있다. 따라서 실제로 접근을 차단해야 하는 중요한 정보는 robots.txt에 의존하기보다, 패스워드 인증, IP 주소 차단, 방화벽 설정, 또는 서버 설정 파일(예: .htaccess)을 통한 접근 제어 등 적절한 보안 조치를 취해야 한다.
악의적인 크롤러나 스크래퍼는 일반적으로 robots.txt 규칙을 무시하고 사이트의 모든 콘텐츠를 수집하려 시도한다. 또한, 검색 엔진 최적화를 위해 공개하려는 페이지의 위치를 숨기는 데에도 이 파일을 사용해서는 안 되며, 대신 메타 태그나 HTTP 헤더를 활용하는 것이 올바른 방법이다. 결론적으로 robots.txt는 검색 엔진 크롤러와의 소통 도구이지, 어떠한 형태의 보안 장벽도 아니라는 점을 명심해야 한다.
6.2. 준수의무와 크롤러 반응
6.2. 준수의무와 크롤러 반응
robots.txt는 법적 구속력이 있는 강제 규약이 아니라 웹마스터가 크롤러에게 제시하는 일종의 권고안이다. 따라서 크롤러가 이를 반드시 지켜야 할 의무는 없다. 그러나 대부분의 주요 검색 엔진 크롤러(예: 구글의 Googlebot, 네이버의 Yeti)는 이 규칙을 존중하고 준수하는 것이 업계 표준 관행으로 자리 잡았다. 이는 웹 생태계의 상호 존중과 협력에 기반을 둔다.
크롤러의 반응은 다양할 수 있다. 대부분의 정상적인 크롤러는 robots.txt를 읽고 Disallow로 지정된 경로는 크롤링하지 않는다. 그러나 악의적인 목적을 가진 크롤러나 스파이더는 이 규칙을 무시하고 사이트를 무단으로 스캔할 수 있다. 또한, 일부 크롤러는 Allow 지시어나 복잡한 와일드카드 패턴을 완벽히 지원하지 않을 수도 있다.
따라서 웹사이트 관리자는 robots.txt를 절대적인 보안 장벽으로 생각해서는 안 된다. 중요한 정보나 민감한 데이터가 있는 디렉터리는 robots.txt에 차단 목록을 추가하는 대신, 패스워드 인증이나 IP 주소 차단 같은 실제 보안 조치로 보호해야 한다. robots.txt의 주된 역할은 검색 엔진의 인덱싱을 관리하고, 불필요한 서버 트래픽을 줄이며, 사이트맵 위치를 알리는 데 있다.
