robots.txt 사양

초록

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

맨위로

요구사양 언어

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

맨위로

기본 정의

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

맨위로

적용 가능성

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

맨위로

파일 위치 및 유효성 범위

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

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

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

참고: robots.txt 파일의 URL은 다른 URL에서와 같이 대소문자를 구분합니다.

맨위로

유효한 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/
하위 도메인의 robots.txt는 해당 하위 도메인에 대해서만 유효합니다.
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/ IDN은 punycode 버전과 같습니다. RFC 3492도 참조하세요.
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에 호스팅된 경우에도) 호스트 이름으로 IP 주소를 사용한 robots.txt는 이 IP 주소를 호스트 이름으로 크롤링하는 경우에만 유효합니다. 해당 IP 주소에 호스팅된 모든 웹사이트에 대해 자동으로 유효하지 않습니다. 하지만 robots.txt 파일을 공유할 수 있으므로 이 경우 공유된 호스트 이름으로 사용할 수 있습니다.
http://example.com:80/robots.txt http://example.com:80/
http://example.com/
http://example.com:81/ 표준 포트 번호(http: 80, https: 443, ftp: 21)는 기본 호스트 이름과 같습니다.
http://example.com:8181/robots.txt http://example.com:8181/ http://example.com/ 비표준 포트 번호의 robots.txt 파일은 해당 포트 번호를 통해 사용할 수 있는 콘텐츠에 대해서만 유효합니다.

맨위로

robots.txt에 대한 HTTP 결과 코드(Response Code)의 처리 방식

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

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

맨위로

공식 구문/정의

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

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

    • user-agent(start of group)
    • disallow(그룹 멤버 레코드로만 유효함)
    • allow(그룹 멤버 레코드로만 유효함)
    • 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' 모두에 대한 그룹이 있습니다. 각 그룹에는 고유 그룹 멤버 레코드가 있습니다. 쉽게 읽을 수 있도록 공백(빈 줄)을 사용할 수도 있습니다.

      맨위로

      user-agent 우선 순위

      특정 크롤러에 대해 하나의 그룹 멤버 레코드 그룹만 유효합니다. 크롤러는 일치하는 가장 관련된 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(web) (그룹 3) 
      이미지 Googlebot (그룹 3) googlebot-images 그룹은 없으므로 좀 더 일반적인 그룹의 규칙을 따릅니다. 따라서 보다 일반적인 그룹을 검색합니다.
      뉴스 Googlebot(이미지를 크롤링할 때) (그룹 1) 뉴스 Googlebot이 이미지를 크롤링하는 경우 뉴스 Googlebot 그룹의 규칙을 따릅니다.
      다른 검색 로봇(web)(그룹 2) 
      다른 검색 로봇(News)(그룹 2) 연관된 검색 로봇을 위한 항목이 있다 하더라도, 이름이 일치하는 경우에만 유효합니다.

      부록: Google의 크롤러와 user-agent 문자열도 참고하세요.

      맨위로

      그룹 멤버 레코드

      본 섹션에서는 일반적인 또는 Google에 특화된 그룹 멤버 레코드에 대해서 다룹니다. 레코드 타입은 크롤러에서는 명령어(directives)라고 불립니다. 명령어는 '명령어: [경로]'의 형태로 사용됩니다. 여기에서 [경로] 부분은 선택사항입니다. 해당 그룹의 기본 값은 지정된 크롤러에 대해서 크롤링에 제한이 없는 것입니다. [경로]가 없는 명령어는 무시됩니다.

      [경로] 를 명기할 경우 해당 웹사이트의 루트로부터 상대적인 경로를 사용합니다. 이 때 같은 프로토콜, 포트 번호, 호스트 및 도메인명의 웹사이트에 존재하는 파일에 대한 상대 경로를 지정합니다. 경로의 값은 루트를 의미하는 '/' 문자로부터 시작해야 합니다. 만일 '/' 문자로 시작하지 않으면 크롤러는 '/' 문자가 맨 앞에 있는 것으로 가정합니다. 경로는 대소문자를 구분합니다. 더 자세한 내용은 아래의 '경로 값에 의한 URL 매칭' 섹션을 참고하세요.

      disallow

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

      사용:

      disallow: [path]
      

      allow

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

      사용:

      allow: [path]
      

      맨위로

      경로 값에 의한 URL 매칭

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

      참고: 'AJAX-크롤링' URL은 크롤링된 버전에 지정해야 합니다. Google의 AJAX 응용프로그램을 크롤링 가능하게 하기 문서도 참조하시기 바랍니다.

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

      1. *는 0개 이상의 유효한 문자 인스턴스를 나타냅니다.
      2. $는 URL의 끝을 나타냅니다.

      경로 일치의 예

      [경로]일치 일치하지 않음설명
      /모든 유효한 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.html
      /fish/salmon.html
      /fishheads
      /fishheads/yummy.html
      /fish.php?id=anything
      /Fish.asp
      /catfish
      /?id=fish
      '/fish'와 같습니다. 뒤쪽 와일드카드는 무시됩니다.
      /fish//fish/
      /fish/?id=anything
      /fish/salmon.htm
      /fish
      /fish.html
      /Fish/Salmon.asp
      뒤쪽 슬래시는 이 폴더 내에 있는 모든 항목과 일치함을 의미합니다.
      fish//fish/와 같음 /fish/와 같음 /fish/와 같음
      /*.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 레코드

      sitemap

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

      사용:

      sitemap: [absoluteURL]
      

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

      맨위로

      그룹 멤버 레코드의 우선 순위

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

      샘플 상황:

      URL허용:금지:결과 설명
      http://example.com/page /p /allow 
      http://example.com/folder/page /folder/ /folderallow 
      http://example.com/page.htm /page /*.htmundefined 
      http://example.com/ /$ /allow 
      http://example.com/page.htm /$ /disallow 

      맨위로