robots.txt 사양

초록

본 문서에서는 Google의 웹사이트 크롤러가 공개적으로 액세스할 수 있는 웹사이트를 크롤링하고 색인을 생성하는 방식을 제어하는 robots.txt 파일을 Google에서 어떻게 처리하는지 설명합니다.

요구사양 언어

본 문서에서 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY' 및 'OPTIONAL'은 RFC 2119에 명시된 대로 해석되어야 합니다.

기본 정의

정의
크롤러 크롤러는 웹사이트를 크롤링하는 서비스 또는 에이전트입니다. 일반적으로 크롤러는 표준 웹브라우저를 통해 액세스할 수 있는 콘텐츠를 노출하는 호스트의 알려진 URL을 재귀적으로 자동 액세스합니다. 또한 기존에 크롤링된 페이지의 링크, 사이트맵 파일 등 다양한 방법을 통해 새로운 URL이 발견되면 같은 방식으로 크롤링됩니다.
사용자 에이전트 특정 크롤러나 크롤러 집합을 식별하는 수단입니다.
명령어 robots.txt 파일에 명시된 크롤러 또는 크롤러 그룹에 적용할 수 있는 가이드라인의 목록입니다.
URL RFC 1738에 정의된 Uniform Resource Locator입니다.
Google 특정 이 요소는 Google의 robots.txt 구현에 관련된 것으로 타사와 관련이 없을 수 있습니다.

적용 대상

본 문서에 명시된 가이드라인은 Google의 자동화된 모든 크롤러가 따릅니다. 에이전트가 사용자 대신 URL에 액세스할 때는(예: 번역, 수동으로 구독한 피드, 멀웨어 분석 등) 이러한 가이드라인을 적용할 필요가 없습니다.

파일 위치 및 유효성 범위

robots.txt 파일은 호스트의 최상위 디렉토리에 위치하여 해당 프로토콜과 포트 번호를 통해 액세스할 수 있어야 합니다. robots.txt(및 웹사이트 크롤링)에서 일반적으로 허용되는 프로토콜은 'http'와 'https'입니다. http와 https에서 robots.txt 파일은 비조건부 HTTP GET 요청을 사용하여 가져옵니다.

Google 특정: Google은 FTP 사이트에서도 robots.txt 파일을 허용하며 이를 따릅니다. FTP 기반 robots.txt 파일은 익명 로그인을 사용하여 FTP 프로토콜을 통해 액세스됩니다.

robots.txt 파일에 나열된 명령어는 파일이 호스팅된 호스트, 프로토콜, 포트 번호에만 적용됩니다.

유효한 robots.txt URL의 예

Robots.txt URL 예
http://example.com/robots.txt 유효함:
  • http://example.com/
  • http://example.com/folder/file
유효하지 않음:
  • http://other.example.com/
  • https://example.com/
  • http://example.com:8181/
http://www.example.com/robots.txt

유효함: http://www.example.com/

유효하지 않음:

  • http://example.com/
  • http://shop.www.example.com/
  • http://www.shop.example.com/
http://example.com/folder/robots.txt 유효한 robots.txt 파일이 아닙니다. 크롤러는 하위 디렉토리의 robots.txt 파일은 확인하지 않습니다.
http://www.müller.eu/robots.txt 유효함:
  • http://www.müller.eu/
  • http://www.xn--mller-kva.eu/

유효하지 않음: http://www.muller.eu/

ftp://example.com/robots.txt

유효함: ftp://example.com/

유효하지 않음: http://example.com/

Google 특정: Google은 FTP 리소스에 robots.txt를 사용합니다.

http://212.96.82.21/robots.txt

유효함: http://212.96.82.21/

유효하지 않음: http://example.com/ (212.96.82.21에 호스팅된 경우에도)

http://example.com:80/robots.txt

유효함:

  • http://example.com:80/
  • http://example.com/

유효하지 않음: http://example.com:81/

http://example.com:8181/robots.txt

유효함: http://example.com:8181/

유효하지 않음: http://example.com/

HTTP 결과 코드 처리

robots.txt 파일을 가져오면 일반적으로 다음과 같이 세 개의 다른 결과가 나타납니다.

  • 전체 허용: 모든 콘텐츠를 크롤링할 수 있습니다.
  • 전체 금지: 어떠한 콘텐츠도 크롤링할 수 없습니다.
  • 조건부 허용: robots.txt의 명령어가 특정 콘텐츠의 크롤링 기능을 결정합니다.
HTTP 결과 코드 처리
2xx(성공) 크롤링의 '조건부 허용' 성공 결과를 나타내는 HTTP 결과 코드입니다.
3xx(리디렉션) 일반적으로 유효한 결과를 찾을 수 있거나 루프를 인식할 때까지 리디렉션이 이어집니다. Google에서는 제한된 수의 리디렉션 홉 (HTTP/1.0의 경우 RFC 1945에서 허용하는 최대 홉 수: 5)을 따른 다음 중단하고 이를 404로 처리합니다. robots.txt파일이 크롤링할 수 없는 URL로 리디렉션 처리되는 경우는 정의되어 있지 않으며 사용하지 않는 것이 좋습니다. 2xx를 반환하는 HTML 콘텐츠 기반의 robots.txt 파일에 대한 논리적 리디렉션(프레임, 자바스크립트, 메타 새로고침 유형 리디렉션)은 정의되어 있지 않으며 사용하지 않는 것이 좋습니다.
4xx(클라이언트 오류) Google에서는 모든 4xx 오류를 같은 방식으로 처리하며 유효한 robots.txt 파일이 없다고 가정합니다. 또한 제한이 없다고 가정합니다. 이는 크롤링의 '전체 허용'입니다.
5xx(서버 오류)

서버 오류는 크롤링 '전체 금지'의 원인이 되는 일시적인 오류로 인해 나타납니다. 서버 오류가 아닌 HTTP 결과 코드를 얻을 때까지 요청이 다시 시도됩니다. 503 (Service Unavailable) 오류는 잦은 재시도로 인해 발생합니다. 크롤링을 일시 중지하려면 503 HTTP 결과 코드를 사용하는 것이 좋습니다. 영구적인 서버 오류 처리는 정의되어 있지 않습니다.

Google 특정: Google이 누락된 페이지에 대해 404 대신 5xx를 반환하도록 사이트를 잘못 구성한 것으로 판단할 수 있는 경우 해당 사이트의 5xx 오류를 404로 처리합니다.

실패한 요청 또는 불완전한 데이터 시간 초과, 잘못된 응답, 연결 재설정/중단, HTTP 청킹 오류 등 DNS 또는 네트워크 문제로 인해 가져올 수 없는 robots.txt 파일 처리는 정의되어 있지 않습니다.
캐시 robots.txt 요청은 일반적으로 최대 하루 분량이 캐시되지만 시간 초과 또는 5xx 오류 등으로 인해 캐시된 버전을 새로 고칠 수 없는 경우 캐시 기간이 더 길어질 수 있습니다. 캐시된 응답은 다른 크롤러에 의해 공유될 수 있습니다. Google은 max-age Cache-Control HTTP 헤더를 기반으로 하여 캐시 기간을 늘리거나 줄일 수 있습니다.

파일 형식

예상 파일 형식은 UTF-8로 인코딩된 일반 텍스트입니다. 파일은 CR, CR/LF 또는 LF로 구분된 레코드(행)로 구성됩니다.

유효한 레코드만 고려되며 그 외 다른 콘텐츠는 모두 무시됩니다. 예를 들어 결과 문서가 HTML 페이지인 경우 유효한 텍스트 줄만 고려되며 나머지는 경고나 오류를 내보내지 않고 삭제됩니다.

문자 인코딩이 사용되었는데 사용된 문자가 UTF-8 하위 집합이 아닌 경우 파일 콘텐츠가 잘못 파싱될 수 있습니다.

robots.txt 파일 첫 부분의 선택적 유니코드 BOM(바이트 순서 표시)은 무시됩니다.

각 레코드는 필드, 콜론 및 값으로 구성됩니다. 공백은 선택사항이지만 쉽게 읽을 수 있도록 사용하는 것이 좋습니다. 주석은 '#' 문자를 사용하여 파일의 어느 위치에나 삽입될 수 있습니다. 주석의 시작부터 레코드 끝까지 모든 내용은 주석으로 처리되며 무시됩니다. 일반 형식은 <field>:<value><#optional-comment>입니다. 레코드의 시작과 끝에 있는 공백은 무시됩니다.

<field> 요소는 대소문자를 구분합니다. <value> 요소는 <field> 요소에 따라 대소문자를 구분할 수 있습니다.

간단한 오류나 오타가 있는 <field> 요소(예: 'user-agent' 대신 'useragent' 사용) 처리는 정의되어 있지 않으며 일부 user-agent에서는 올바른 명령어로 해석될 수 있습니다.

크롤러당 최대 파일 크기가 제한될 수 있습니다. 최대 파일 크기를 넘는 콘텐츠는 무시될 수 있습니다. 현재 Google에서는 크기를 500킬로바이트(KB)로 제한합니다.

공식 구문/정의

다음은 robots.txt 파일을 기술하기 위한 문법입니다. 배커스 나우어 형식(BNF)이며, 여러 개 중 하나를 선택하는 '|'를 제외하고 RFC 822와 동일합니다. 리터럴은 ""로 인용되며 괄호 '(' 및 ')'는 요소의 그룹을 지정하는 데 사용됩니다. 선택적 요소는 [꺽쇠 괄호]를 사용하여 묶고 <n>*으로 시작되는 요소는 다음 요소의 n번 이상의 반복을 나타낼 수 있습니다. n의 기본값은 0입니다.

robotstxt = *entries
entries = *( ( <1>*startgroupline
  *(groupmemberline | nongroupline | comment)
  | nongroupline
  | comment) )
startgroupline = [LWS] "user-agent" [LWS] ":" [LWS] agentvalue [comment] EOL
groupmemberline = [LWS] (
  pathmemberfield [LWS] ":" [LWS] pathvalue
  | othermemberfield [LWS] ":" [LWS] textvalue) [comment] EOL
nongroupline = [LWS] (
  urlnongroupfield [LWS] ":" [LWS] urlvalue
  | othernongroupfield [LWS] ":" [LWS] textvalue) [comment] EOL
comment = [LWS] "#" *anychar
agentvalue = textvalue

pathmemberfield = "disallow" | "allow"
othermemberfield = ()
urlnongroupfield = "sitemap"
othernongroupfield = ()

pathvalue = "/" path
urlvalue = absoluteURI
textvalue = *(valuechar | SP)
valuechar = <any UTF-8 character except ("#" CTL)>
anychar = <any UTF-8 character except CTL>
EOL = CR | LF | (CR LF)

'absoluteURI', 'CTL', 'CR', 'LF', 'LWS'에 대한 구문은 RFC 1945에 정의되어 있습니다. 'path'에 대한 구문은 RFC 1808에 정의되어 있습니다.

레코드 그룹 지정

레코드는 <field> 요소의 유형에 따라 다음과 같이 다양한 유형으로 분류됩니다.

  • start-of-group
  • group-member
  • non-group

start-of-group 레코드부터 다음 start-of-group 레코드까지 모든 group-member 레코드는 하나의 레코드 그룹으로 처리됩니다. 유일한 start-of-group 필드 요소는 user-agent입니다. 여러 start-of-group 줄은 마지막 start-of-group 줄을 따라 서로 group-member 레코드를 따라갑니다. 선행 start-of-group 레코드가 없는 group-member 레코드는 모두 무시됩니다. 모든 non-group 레코드는 모든 그룹과 관계없이 유효합니다.

유효한 <field> 요소는 다음과 같으며 본 문서에 별도로 자세히 설명됩니다.

  • user-agent(start of group)
  • disallow(group-member 레코드로만 유효함)
  • allow(group-member 레코드로만 유효함)
  • sitemap(non-group 레코드)

그 외 모든 <field> 요소는 무시될 수 있습니다.

start-of-group 요소 user-agent는 그룹이 유효한 크롤러를 지정하는 데 사용됩니다. 특정 크롤러에 대해 하나의 레코드 그룹만 유효합니다. 우선순위는 본 문서에서 나중에 다룹니다.

예제 그룹:

user-agent: a
disallow: /c

user-agent: b
disallow: /d

user-agent: e
user-agent: f
disallow: /g

지정된 고유 그룹은 세 개가 있으며, 'a' 그룹, 'b' 그룹을 비롯하여 'e'와 'f' 모두에 대한 그룹이 있습니다. 각 그룹에는 고유 group-member 레코드가 있습니다. 쉽게 읽을 수 있도록 공백(빈 줄)을 사용할 수도 있습니다.

user-agent 우선순위

특정 크롤러에 대해 하나의 group-member 레코드 그룹만 유효합니다. 크롤러는 일치하는 가장 관련된 user-agent가 있는 그룹을 찾아서 올바른 레코드 그룹을 결정해야 합니다. 다른 모든 레코드 그룹은 크롤러에 의해 무시됩니다. user-agent는 대소문자를 구분하지 않습니다. 일치하지 않는 모든 텍스트는 무시됩니다. 예를 들어 googlebot/1.2googlebot*는 모두 googlebot과 같습니다. robots.txt 파일 내 그룹의 순서는 서로 관련이 없습니다.

다음 robots.txt 파일 가정:

user-agent: googlebot-news
(group 1)

user-agent: *
(group 2)

user-agent: googlebot
(group 3)

다음은 크롤러가 관련 그룹을 선택하는 방법입니다.

크롤러마다 이어지는 레코드 그룹
Googlebot 뉴스 이어지는 레코드 그룹은 그룹 1입니다. 가장 구체적인 그룹만 이어지며 나머지는 모두 무시됩니다.
Googlebot(웹) 이어지는 레코드 그룹은 그룹 3입니다.
Googlebot 이미지 이어지는 레코드 그룹은 그룹 3입니다. 특정 googlebot-images 그룹이 없으므로 좀 더 일반적인 그룹을 따릅니다.
Googlebot 뉴스(이미지를 크롤링할 때) >이어지는 레코드 그룹은 그룹 1입니다. Googlebot 뉴스에서 크롤링하는 이미지이므로 Googlebot 뉴스 그룹만 따릅니다.
다른 검색 로봇(웹) 이어지는 레코드 그룹은 그룹 2입니다.
다른 검색 로봇(뉴스) 이어지는 레코드 그룹은 그룹 2입니다. 연관된 크롤러를 위한 항목이 있다 하더라도 이름이 일치하는 경우에만 유효합니다.

Google의 크롤러 및 user-agent 문자열도 참조하세요.

group-member 레코드

본 섹션에서는 일반적인 및 Google에 특화된 group-member 레코드 유형에 대해서만 다룹니다. 이러한 레코드 유형은 크롤러에서는 '명령어'라고 불립니다. 명령어는 directive: [path] 형식으로 지정되며, 여기에서 [path]는 선택사항입니다. 기본적으로 지정된 크롤러에 대한 크롤링의 제한은 없습니다. [path]가 없는 명령어는 무시됩니다.

지정되는 경우 [path] 값은 동일한 프로토콜과 포트 번호, 호스트, 도메인 이름을 사용하여 robots.txt 파일을 가져온 웹사이트의 루트로부터 상대적인 것으로 간주되어야 합니다. 경로 값은 '/'에서 시작하여 루트를 지정해야 합니다. 경로는 대소문자를 구분합니다. 자세한 내용은 아래의 '경로 값에 의한 URL 일치' 섹션을 참조하세요.

금지

disallow 명령어는 지정된 크롤러가 액세스하면 안 되는 경로를 지정합니다. 경로를 지정하지 않으면 명령어가 무시됩니다.

사용:

disallow: [path]

허용

allow 명령어는 지정된 크롤러가 액세스할 수 있는 경로를 지정합니다. 경로를 지정하지 않으면 명령어가 무시됩니다.

사용 목적:

allow: [path]

경로 값에 의한 URL 일치

경로 값은 사이트의 특정 URL에 규칙을 적용할지 여부를 결정하기 위한 기준으로 사용됩니다. 와일드 카드를 제외하고 경로는 URL 및 같은 경로로 시작하는 유효한 모든 URL의 시작을 비교하는 데 사용됩니다. RFC 3986에 따라 UTF-8 문자 또는 퍼센트 이스케이프 처리된 UTF-8 인코딩된 문자로 7비트가 아닌 ASCII 문자가 경로에 포함될 수 있습니다.

Google, Bing, Yahoo 및 Ask에서는 경로 값에 대해 제한된 형태의 '와일드 카드'를 지원합니다. 자세한 내용은 다음과 같습니다.

  • *는 0개 이상의 유효한 문자 인스턴스를 나타냅니다.
  • $는 URL의 끝을 나타냅니다.
경로 일치의 예
/ 루트 및 그 이하 수준의 모든 URL과 일치합니다.
/* /와 같습니다. 뒤쪽 와일드 카드는 무시됩니다.
/fish

일치 항목:

  • /fish
  • /fish.html
  • /fish/salmon.html
  • /fishheads
  • /fishheads/yummy.html
  • /fish.php?id=anything

일치하지 않음:

  • /Fish.asp
  • /catfish
  • /?id=fish
/fish*

/fish와 같습니다. 뒤쪽 와일드 카드는 무시됩니다.

일치 항목:

  • /fish
  • /fish.html
  • /fish/salmon.html
  • /fishheads
  • /fishheads/yummy.html
  • /fish.php?id=anything

일치하지 않음:

  • /Fish.asp
  • /catfish
  • /?id=fish
/fish/

뒤쪽 슬래시는 이 폴더 내에 있는 모든 항목과 일치함을 의미합니다.

일치 항목:

  • /fish/
  • /fish/?id=anything
  • /fish/salmon.htm

일치하지 않음:

  • /fish
  • /fish.html
  • /Fish/Salmon.asp
/*.php

일치 항목:

  • /filename.php
  • /folder/filename.php
  • /folder/filename.php?parameters
  • /folder/any.php.file.html
  • /filename.php/

일치하지 않음:

  • /(/index.php에 매핑하는 경우에도 해당)
  • /windows.PHP
/*.php$

일치 항목:

  • /filename.php
  • /folder/filename.php

일치하지 않음:

  • /filename.php?parameters
  • /filename.php/
  • /filename.php5
  • /windows.PHP
/fish*.php

일치 항목:

  • /fish.php
  • /fishheads/catfish.php?parameters

일치하지 않음: /Fish.PHP

Google에서 지원하는 non-group-member 레코드

사이트맵

Google, Ask, Bing, Yahoo에서 지원하며 sitemaps.org에 정의되어 있습니다.

사용 목적:

sitemap: [absoluteURL]

[absoluteURL]은 사이트맵이나 사이트맵 색인 파일 또는 그에 상응하는 URL을 가리킵니다. URL이 robots.txt 파일과 같은 호스트에 있을 필요는 없습니다. 여러 sitemap 항목이 존재할 수 있습니다. non-group-member 레코드로서 어떠한 특정 user-agent에도 연결되어 있지 않으며 disallow로 지정하지 않은 모든 크롤러가 검색할 수 있습니다.

group-member 레코드의 우선순위

group-member 수준에서 특히 allowdisallow 명령어의 경우 [path] 항목의 길이를 기준으로 한 가장 구체적인 규칙이 덜 구체적인(짧은) 규칙보다 우선합니다. 와일드 카드가 있는 규칙에 대한 우선순위는 정의되어 있지 않습니다.

샘플 상황
http://example.com/page

허용: /p

금지: /

결과: 허용

http://example.com/folder/page

허용: /folder

금지: /folder

결과: 허용

http://example.com/page.htm

허용: /page

금지: /*.htm

결과: 정의되지 않음

http://example.com/

허용: /$

금지: /

결과: 허용

http://example.com/page.htm

허용: /$

금지: /

결과: 금지

다음에 대한 의견 보내기...