Robots.txt の仕様

概要

このドキュメントでは、Google での robots.txt ファイルの処理方法について説明します。robots.txt ファイルを使用すると、Google のウェブサイト クローラが一般公開されたウェブサイトをクロールしてインデックスに登録する方法を制御できます。

トップへ戻る

言語の要件

このドキュメントにおけるキーワード「しなければならない(MUST)」、「してはならない(MUST NOT)」、「要求されている(REQUIRED)」、「することになる(SHALL)」、「することはない(SHALL NOT)」、「する必要がある(SHOULD)」、「しないほうがよい(SHOULD NOT)」、「推奨される(RECOMMENDED)」、「する場合がある、できる(MAY)」、「省略可能である(OPTIONAL)」は、RFC 2119(リンク先は英語)で説明されているように解釈する必要があります。

トップへ戻る

基本的な定義

  • クローラ: ウェブサイトをクロールするサービスやエージェントです。一般に、クローラは、標準的なウェブブラウザでアクセスできるコンテンツを公開するホストの既知の URL に、自動的に繰り返しアクセスします。(既存のクロール済みページにあるリンクや、サイトマップ ファイルなどのさまざまな手段によって)新しい URL が検出されると、この URL も同じ方法でクロールされます。
  • ユーザーエージェント: 特定のクローラまたは複数のクローラを識別するための手段です。
  • ディレクティブ: robots.txt ファイルで指定される、クローラまたはクローラのグループに対して適用されるガイドラインのリストです。
  • URL: RFC 1738 に定義されている Uniform Resource Locator です。
  • Google 固有: この要素は Google の robots.txt 実装に固有のもので、他の団体には該当しない場合があります。

トップへ戻る

適用性

このドキュメントで規定されているガイドラインは、Google のすべての自動クローラに適用されます。ユーザーに代わってエージェントが URL にアクセスする場合(たとえば、翻訳、手動登録フィード、マルウェア解析などの目的で)は、このガイドラインを適用する必要はありません。

トップへ戻る

ファイルの場所と有効範囲

robots.txt ファイルは、ホストの最上位ディレクトリに配置し、適切なプロトコルとポート番号を使用してアクセスできなければなりません。通常、robots.txt(およびウェブサイトのクロール)で受け付けられるプロトコルは、「http」と「https」です。http と https では、条件付きでない HTTP GET リクエストを使用して、robots.txt ファイルを取得します。

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 固有: 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 ファイルは、そのポート番号で利用可能なコンテンツに対してのみ有効です。

トップへ戻る

HTTP 結果コードの処理

一般に、robots.txt ファイルを取得した場合の結果は次の 3 種類です。

  • 完全許可: すべてのコンテンツをクロールできます。
  • 完全不許可: クロールできるコンテンツはありません。
  • 条件付き許可: robots.txt 内のディレクティブによって、特定のコンテンツをクロールできるかどうかが決まります。
2xx(成功)
「条件付き許可」のクロールで結果が成功であることを示す HTTP 結果コード。
3xx(リダイレクト)
通常、有効な結果が見つかるまで(またはループが検出されるまで)、リダイレクトに従います。一定のホップ回数(RFC 1945(リンク先は英語)では HTTP/1.0 で最大 5 回のホップを許可しています)までリダイレクトした後、停止して 404 として処理します。許可されていない URL への robots.txt のリダイレクトの処理は定義されておらず、おすすめしません。2xx を返す HTML コンテンツに基づく robots.txt ファイルに対する論理リダイレクト(フレーム、JavaScript、meta refresh タイプのリダイレクト)の処理は、定義されておらず、おすすめしません。
4xx(クライアント エラー)
Google では、すべての 4xx エラーは同じように扱われ、有効な robots.txt ファイルが存在しないものとみなされます。制限はないものとみなされます。これは、クロールの「完全許可」です。注: これには、401「未認証」と 403「禁止」の HTTP 結果コードも含まれます。
5xx(サーバーエラー)
サーバーエラーは一時的なエラーとみなされ、クロールが「完全不許可」になります。リクエストは、サーバーエラー以外の HTTP 結果コードを取得するまで再試行されます。503(サービス利用不可)エラーでは、頻繁に再試行が行われます。クロールを一時的に停止するには、503 HTTP 結果コードを提供することが推奨されます。永続的なサーバーエラーの処理は定義されていません。

Google 固有: サイトが誤って構成されているためにページ不明の 404 ではなく 5xx が返されていると判断できる場合、Google はそのサイトからの 5xx エラーを 404 エラーとして扱います。
リクエストの失敗または不完全なデータ
DNS またはネットワークの問題(タイムアウト、無効な応答、接続のリセットやハングアップ、HTTP チャンクのエラーなど)が原因で robots.txt ファイルを取得できない場合の処理は、定義されていません。
キャッシュ
通常、robots.txt のリクエストがキャッシュされている期間は最長で 1 日ですが、(たとえば、タイムアウトや 5xx エラーのために)キャッシュされているバージョンを更新できないと、さらに長くキャッシュされる場合があります。キャッシュされている応答は、他のクローラと共有できます。Google は max-age Cache-Control(リンク先は英語)HTTP ヘッダーに基づいて、キャッシュ期間を延長または短縮する場合があります。

トップへ戻る

ファイル形式

予期されるファイル形式は、UTF-8 でエンコードされた書式なしテキストです。このファイルは、CR、CR/LF、または LF で区切られたレコード(行)で構成されます。

有効なレコードだけが考慮され、他のすべての内容は無視されます。たとえば、取得したドキュメントが HTML ページである場合、有効なテキスト行のみが使用され、その他は警告やエラーなしで破棄されます。

文字エンコードで UTF-8 のサブセットではない文字が使用される場合、ファイルの内容が誤って解析される場合があります。

robots.txt ファイルの冒頭に省略可能な Unicode BOM(バイトオーダー マーク)がある場合は、無視されます。

各レコードは、フィールド、コロン、値で構成されます。スペースは省略可能です(ただし、読みやすくするために使用することが推奨されます)。「#」文字を使用して、ファイル内の任意の場所にコメントを含めることができます。コメントの開始からレコードの終わりまでのすべての内容は、コメントとして処理され、無視されます。一般的な形式は、「<field>:<value><#optional-comment>」です。レコードの先頭と末尾にある空白文字は無視されます。

<field> 要素では、大文字と小文字は区別されません。<value> 要素は、<field> 要素によっては大文字と小文字が区別される場合があります。

<field> 要素の単純なエラーやタイプミス(「user-agent」を「useragent」と入力するなど)の処理は定義されていません。一部のユーザーエージェントでは正しいディレクティブとして解釈される場合があります。

適用される最大ファイルサイズは、クローラごとに異なる場合があります。最大ファイルサイズを超えた内容は無視される場合があります。Google では、現在、500 KB のサイズ制限があります。

トップへ戻る

正式な構文または定義

RFC 822(リンク先は英語)の規則を用いた、バッカスナウア記法(BNF)に類似した構文となっています。例外として、「|」は代替を示すために使用します。リテラルは引用符 "" で囲みます。丸かっこ ( と ) は要素をグループ化するために使用し、省略可能な要素は大かっこ [ と ] で囲まれています。要素の前に記述できる <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> 要素のタイプに基づいて、次に示す各タイプに分類されます。

  • グループ開始
  • グループ メンバー
  • 非グループ
  • グループ開始レコードの後から次のグループ開始レコードまでのすべてのグループ メンバー レコードは、1 グループのレコードとして扱われます。グループ開始のフィールド要素は user-agent のみです。複数のグループ開始行を連続して記述した場合、最後のグループ開始行の後にあるグループ メンバー レコードに従います。グループ メンバー レコードの前にグループ開始レコードの記述がない場合、そのグループ メンバー レコードは無視されます。すべての非グループ レコードは、すべてのグループとは無関係に有効です。

    有効な <field> 要素を次に示します。それぞれの詳細はこのドキュメントで後述します。

    • user-agent(グループ開始)
    • disallow(グループ メンバー レコードとしてのみ有効)
    • allow(グループ メンバー レコードとしてのみ有効)
    • sitemap(非グループ レコード)
    • 他のすべての <field> 要素はすべて無視できます。

      グループ開始要素 user-agent は、そのグループを有効にするクローラを指定するために使用します。1 つのクローラに対して有効なレコード グループは 1 つだけです。優先順位については後で説明します。

      グループの例:

      user-agent: a
      disallow: /c
      
      user-agent: b
      disallow: /d
      
      user-agent: e
      user-agent: f
      disallow: /g
      

      3 つの異なるグループが指定されています。「a」で 1 グループ、「b」で 1 グループ、そして「e」と「f」の両方で 1 グループです。各グループには、固有のグループ メンバー レコードがあります。読みやすくするために、省略可能な空白文字(空白行)を使用しています。

      トップへ戻る

      ユーザーエージェントの優先順位

      1 つのクローラに対して有効なグループ メンバー レコードのグループは 1 つだけです。クローラは、合致する最も限定的なユーザーエージェントのグループを探すことで、正しいレコード グループを特定しなければならなりません。クローラは、他のすべてのレコード グループを無視します。ユーザーエージェントでは大文字と小文字は区別されません。合致しないテキストはすべて無視されます(たとえば、googlebot/1.2googlebot*googlebot と同等です)。robots.txt ファイル内のグループの順序は関係ありません。

      例:

      次のような robots.txt ファイルについて考えます。

      user-agent: googlebot-news
      (group 1)
      
      user-agent: *
      (group 2)
      
      user-agent: googlebot
      (group 3)
      

      クローラによる関連するグループの選択は次のとおりです。

      クローラの名前使用するレコード グループ コメント
      ニュース用 Googlebot (group 1) 最も限定的なグループのみが使用され、他はすべて無視されます。
      Googlebot(ウェブ) (group 3) 
      画像用 Googlebot (group 3) googlebot-images という限定的なグループはないため、最も一般的なグループが使用されます。
      ニュース用 Googlebot(画像をクロールする場合) (group 1) この画像はニュース用 Googlebot によってクロールされるため、ニュース用 Googlebot グループのみが指定されています。
      Otherbot(ウェブ)(group 2) 
      Otherbot(ニュース)(group 2) 関連するクローラに対するエントリがある場合でも、エントリが有効になるのは明確に一致する場合のみです。

      Google クローラとユーザーエージェント文字列もご覧ください。

      トップへ戻る

      グループ メンバー レコード

      この項目では、一般的なグループ メンバー レコードと Google 固有のグループ メンバー レコードのタイプについてのみ説明します。このレコードタイプは、クローラに対する「ディレクティブ」とも呼ばれます。このディレクティブは、「directive: [path]」の形式で指定します([path] は省略可能です)。既定では、指定されたクローラに対するクロールの制限はありません。[path] のないディレクティブは無視されます。

      [path] の値が指定されている場合、値は(同じプロトコル、ポート番号、ホストおよびドメイン名を使用して)robots.txt ファイルを取得したウェブサイトのルートからの相対パスとして認識されます。path の値の最初には、ルートを意味する「/」を付けなければなりません。省略した場合は、ルートであるとみなされます。path では大文字と小文字が区別されます。詳しくは、後述の「path の値に基づく URL の一致」をご覧ください。

      disallow

      disallow ディレクティブは、指定されたクローラがアクセスしてはならないパスを指定します。パスを指定しない場合、このディレクティブは無視されます。

      使用方法:

      disallow: [path]
      

      allow

      allow ディレクティブは、指定されたクローラがアクセスできるパスを指定します。パスを指定しない場合、このディレクティブは無視されます。

      使用方法:

      allow: [path]
      

      トップへ戻る

      path の値に基づく URL の一致

      サイト上の特定の URL にルールが適用されるかどうかは、パスの値に基づいて決定されます。ワイルドカードを除き、パスを使用して URL の冒頭(および、同じパスで始まる有効なすべての URL)と一致するかどうか判定されます。パスには、7 ビット ASCII 文字以外の文字を、UTF-8 文字または RFC 3986(リンク先は英語)に従って % 記号でエスケープされ UTF-8 でエンコードされた文字として指定できます。

      注意: 「AJAX クロール」の URL は、クロールされた時の状態の URL で指定しなければなりません。AJAX アプリケーションをクロール可能にするもご覧ください。

      Google、Bing、Yahoo、Ask では、path の値として、限られた形式の「ワイルドカード」をサポートしています。サポートしているものは次のとおりです。

      1. * は 0 個以上の有効な文字を示します
      2. $ は URL の末尾を示します

      path の一致の例

      [path]一致 一致しないコメント
      /有効なすべての 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 がサポートする非グループ メンバー レコード

      sitemap

      Google、Ask、Bing、Yahoo でサポートされます。sitemaps.org に定義されています。

      使用方法:

      sitemap: [absoluteURL]
      

      [absoluteURL] にはサイトマップ、サイトマップ インデックス ファイル、または同等の URL を指定します。この URL は robots.txt ファイルと同じホスト上でなくてもかまいません。複数の sitemap エントリを指定できます。非グループ メンバー レコードであるため、特定のユーザーエージェントには関連付けられません。すべてのクローラが使用できます(不許可に指定されているクローラを除く)。

      トップへ戻る

      グループ メンバー レコードの優先順位

      グループ メンバー レベル、特に allow および disallow ディレクティブでは、[path] エントリの長さに基づいて、最も限定的なエントリが、限定的でない(短い)ルールよりも優先されます。ワイルドカードを含んだルールの優先順位は定義されていません。

      例:

      URLallow:disallow:判定結果 コメント
      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 /$ /不許可 

      トップへ戻る

       

フィードバックを送信...