Google による robots.txt の指定の解釈

Google の自動クローラRobots Exclusion Protocol(REP)をサポートしています。 つまり、Google のクローラは、クロールする前に対象サイトの robots.txt をダウンロードして解析し、そのサイトのどの部分をクロールできるかについての情報を抽出します。この REP は、ユーザーが管理するクローラ(フィードの購読など)や、ユーザーの安全性を高めるためのクローラ(マルウェア解析など)には適用されません。

robots.txt ファイルとは

サイトのセクションがクローラにアクセスされないようにするには、robots.txt ファイルを作成して、適切なルールを含めます。robots.txt ファイルとは、どのクローラにサイトのどの部分へのアクセスを許可するかを記述した、シンプルなテキスト ファイルです。

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

robots.txt ファイルは、サイトの最上位ディレクトリに配置し、サポート対象プロトコルでアクセスできるようにする必要があります。Google 検索の場合、サポート対象プロトコルは HTTP、HTTPS、FTP です。HTTP、HTTPS の場合、クローラは HTTP の条件付きでない GET リクエストで robots.txt ファイルを取得します。FTP の場合は、匿名ログインによって標準の RETR (RETRIEVE) コマンドを使用します。

robots.txt ファイルに記述したルールは、その 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.exämple.com/robots.txt 有効:
  • http://www.exämple.com/
  • http://xn--exmple-cua.com/

無効: http://www.example.com/

ftp://example.com/robots.txt

有効: ftp://example.com/

無効: http://example.com/

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 をリクエストした際にサーバーから返される HTTP ステータス コードによって、Google のクローラによる robots.txt ファイルの扱い方は異なります。

エラーと HTTP ステータス コードの処理
2xx(成功) 成功を示す HTTP ステータス コードが返されると、Google のクローラはそのサーバーが提供する robots.txt の処理に進みます。
3xx(リダイレクト)

Google は、RFC 1945 に定義されているとおり、少なくとも 5 ホップ数以上リダイレクトした後で停止し、robots.txt の 404 として処理します。リダイレクト チェーンのいずれかの URL が許可されていない場合も、クローラはリダイレクトが原因でルールを取得できないため、同様に処理します。

Google は、robots.txt ファイルの論理リダイレクト(フレーム、JavaScript、メタ リフレッシュ タイプのリダイレクト)には従いません。

4xx(クライアント エラー)

4xx のエラーが返されると、Google のクローラは有効な robots.txt ファイルが存在しないものとみなします。つまり、制限なしでクロールします。

5xx(サーバーエラー)

robots.txt リクエストに対してサーバーから明確な応答がないため、Google は一時的なサーバーエラーと解釈し、サイトが完全に許可されていない場合と同様に処理します。Google は、サーバーエラー以外の HTTP ステータス コードを取得するまで robots.txt ファイルのクロールを試行します。503 (service unavailable) エラーの場合、再試行が頻繁に行われます。robots.txt に 30 日以上アクセスできない場合、Google は robots.txt の最後のキャッシュ コピーを使用します。利用できない場合、Google はクロールの制限がないものとみなします。

Google は、サイトが誤って構成されているためにページ不明の 404 ではなく 5xx が返されていると判断できる場合、そのサイトからの 5xx エラーを 404 エラーとして扱います。たとえば、5xx ステータス コードを返すページのエラー メッセージが「ページが見つかりません」の場合、Google はそのステータス コードを 404 (not found) と解釈します。

その他のエラー DNS またはネットワークの問題(タイムアウト、無効な応答、接続のリセットや遮断、HTTP チャンクのエラーなど)が原因で robots.txt ファイルを取得できない場合は、サーバーエラーとして扱われます。

キャッシュ

Google は、通常 robots.txt ファイルの内容を最大 24 時間キャッシュに保存しますが、(たとえば、タイムアウトや 5xx エラーが原因で)その内容を更新できないと、さらに長く保存する場合があります。キャッシュされている応答は、他のクローラと共有できます。 Google は max-age Cache-Control HTTP ヘッダーに基づいて、キャッシュ期間を延長または短縮する場合があります。

ファイル形式

robots.txt ファイルは、UTF-8 エンコードされた書式なしテキスト ファイルでなければならず、行の区切りには CRCR/LFLF のいずれかを使用する必要があります。

Google は、robots.txt ファイルの先頭の Unicode Byte Order Mark(BOM)など、ファイル内の無効な行は無視し、有効な行のみを使用します。たとえば、ダウンロードした内容が robots.txt ルールではなく HTML であった場合、Google はその内容を解析してルールを抽出し、他はすべて無視します。

同様に、robots.txt ファイルの文字エンコードが UTF-8 でない場合、Google が UTF-8 範囲外の文字を無視した結果、robots.txt ルールが無効と解釈される可能性があります。

Google は現在、robots.txt のファイルサイズの上限を 500 KiB としています。最大ファイルサイズを超えた内容は無視されます。robots.txt ファイルのサイズを減らすには、サイズを増やす原因となっているディレクティブを統合します。たとえば、除外したマテリアルを別のディレクトリに配置します。

構文

robots.txt の有効な行は、フィールド、コロン、値で構成されます。スペースは省略可能です(ただし、読みやすくするために使用することが推奨されます)。行の先頭と末尾にある空白文字は無視されます。コメントを含めるには、コメントの前に # 文字を付けます。# 文字以降はすべて無視されることに注意してください。一般的な形式は <field>:<value><#optional-comment> です。

Google は次のフィールドをサポートしています。

  • user-agent: ルールを適用するクローラを指定します。
  • allow: クロールを許可する URL パス。
  • disallow: クロールを許可しない URL パス。
  • sitemap: サイトマップの完全な URL。

allow フィールドと disallow フィールドは、「ディレクティブ」とも呼ばれます。 ディレクティブは、常に directive: [path] の形式で指定します([path] は省略可能です)。既定では、指定したクローラに対するクロールの制限はありません。クローラは、[path] がないディレクティブを無視します。

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

user-agent

user-agent 行には、どのクローラにルールを適用するかを指定します。robots.txt ファイルで使用できる user-agent 文字列については、Google のクローラとユーザー エージェント文字列の一覧をご覧ください。

user-agent 行では、大文字と小文字は区別されません。

disallow

disallow ディレクティブにより、user-agent 行(この disallow ディレクティブと同じグループの)で指定したクローラにアクセスを許可しないパスを指定します。 パスを指定しない場合、クローラはそのディレクティブを無視します。

disallow ディレクティブの値では、大文字と小文字が区別されます。

使用方法:

disallow: [path]

allow

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

allow ディレクティブの値では、大文字と小文字が区別されます。

使用方法:

allow: [path]

sitemap

Google、Bing などの主要な検索エンジンは、sitemaps.org で定義されている robots.txt の sitemap フィールドをサポートしています。

sitemap フィールドの値では、大文字と小文字が区別されます。

使用方法:

sitemap: [absoluteURL]

[absoluteURL] の行は、サイトマップまたはサイトマップ インデックス ファイルの場所を指定します。 プロトコルやホストを含む完全修飾 URL である必要がありますが、URL エンコードされている必要はありません。この URL は robots.txt ファイルと同じホスト上でなくてもかまいません。複数の sitemap フィールドを指定できます。サイトマップ フィールドは特定のユーザー エージェントに関連付けられていないため、すべてのクローラが使用できます(クロールが許可されていない場合を除く)。

例:

user-agent: otherbot
disallow: /kale

sitemap: https://example.com/sitemap.xml
sitemap: https://cdn.example.org/other-sitemap.xml
sitemap: https://ja.example.org/テスト-サイトマップ.xml

行とルールのグループ化

複数のユーザー エージェントに適用するルールは、各クローラの user-agent 行を繰り返すことでグループ化できます。

例:

user-agent: a
disallow: /c

user-agent: b
disallow: /d

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

user-agent: h

この例には、次の 4 つの異なるルールグループがあります。

  • ユーザー エージェント「a」に対して 1 つのグループ。
  • ユーザー エージェント「b」に対して 1 つのグループ。
  • ユーザー エージェント「e」と「f」の両方に対して 1 つのグループ。
  • ユーザー エージェント「h」に対して 1 つのグループ。

グループの技術的な説明については、REP の 2.1 節をご覧ください。

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

特定のクローラに対して有効なグループは 1 つだけです。Google のクローラは、robots.txt ファイルから自身のユーザー エージェントに一致する最も限定的なユーザー エージェントのグループを見つけることで、適切なルールグループを決定します。他のグループは無視されます。一致しないテキストはすべて無視されます(たとえば、googlebot/1.2googlebot* は両方とも googlebot と同等です)。robots.txt ファイル内のグループの順序は関係ありません。

特定のユーザー エージェントに対して複数のグループが宣言されている場合、特定のユーザー エージェントに適用されるグループのすべてのルールが内部的に 1 つのグループに統合されます。

user-agent フィールドの一致判定

user-agent: googlebot-news
(group 1)

user-agent: *
(group 2)

user-agent: googlebot
(group 3)

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

クローラごとに使用するグループ
ニュース用 Googlebot group 1 が最も限定的なグループであるため、googlebot-news は group 1 に従います。
Googlebot(ウェブ) googlebot は group 3 に従います。
画像用 Googlebot googlebot-images には限定的なグループがないため、googlebot-images は group 2 に従います。
ニュース用 Googlebot(画像をクロールする場合) 画像をクロールする場合、googlebot-news は group 1 に従います。 googlebot-news は Google 画像検索の画像をクロールしないため、group 1 のみに従います。
Otherbot(ウェブ) その他の Google クローラは group 2 に従います。
Otherbot(ニュース) ニュース コンテンツをクロールするものの googlebot-news としては識別されない Google クローラは、group 2 に従います。関連するクローラに対するエントリがある場合でも、エントリが有効になるのは明確に一致する場合のみです。

ルールのグループ化

robots.txt ファイルに特定のユーザー エージェントに関連するグループが複数ある場合は、Google のクローラが内部的にグループを統合します。次に例を示します。

user-agent: googlebot-news
disallow: /fish

user-agent: *
disallow: /carrots

user-agent: googlebot-news
disallow: /shrimp

クローラは、ユーザー エージェントに基づいて内部的にルールをグループ化します。次に例を示します。

user-agent: googlebot-news
disallow: /fish
disallow: /shrimp

user-agent: *
disallow: /carrots

パスの値に基づく URL の一致判定

サイト上の特定の URL にルールを適用するかどうかは、allow ディレクティブと disallow ディレクティブのパスの値に基づいて決定されます。これは、クローラが取得しようとしている URL のパス コンポーネントとルールを比較することによって行われます。 パスには、7 ビット ASCII 文字以外の文字を、UTF-8 文字または RFC 3986(リンク先は英語)に従って % 記号でエスケープされ UTF-8 でエンコードされた文字として指定できます。

Google、Bing などの主要な検索エンジンは、パスの値として、限られた形式の「ワイルドカード」をサポートしています。サポートしているものは次のとおりです。

  • * は 0 個以上の有効な文字を示します。
  • $ は URL の末尾を示します。
パスの一致の例
/ ルートおよびその下位にあるすべての URL が一致します。
/* / と同じです。末尾のワイルドカードは無視されます。
/$ ルートのみが一致します。下位レベルの URL はクロールが許可されます。
/fish

/fish で始まるすべてのパスが一致します。

一致:

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

不一致:

  • /Fish.asp
  • /catfish
  • /?id=fish
  • /desert/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/
  • /animals/fish/
  • /fish/?id=anything
  • /fish/salmon.htm

不一致:

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

.php を含むすべてのパスが一致します。

一致:

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

不一致:

  • /(/index.php にマップされている場合でも一致しない)
  • /windows.PHP
/*.php$

.php で終わるすべてのパスが一致します。

一致:

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

不一致:

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

/fish.php をこの順序で含む任意のパスが一致します。

一致:

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

不一致: /Fish.PHP

ルールの優先順位

robots.txt ルールと URL との一致判定を行う際、クローラはパスの長さに基づいて最も限定的なルールを使用します。ワイルドカードを含むルールが競合する場合は、最も制限の少ないルールを使用します。

以下に、URL に対して Google のクローラがどのルールを適用するかについて、具体例を示します。

http://example.com/page

allow: /p
disallow: /

適用するルール: allow: /p。より限定的であるため。

http://example.com/folder/page

allow: /folder
disallow: /folder

適用するルール: allow: /folder。複数のルールが一致する場合、Google は最も制限の少ないルールを使用するため。

http://example.com/page.htm

allow: /page
disallow: /*.htm

適用するルール: disallow: /*.htm。URL 内のより多くの文字が一致することから、より限定的であるため。

http://example.com/page.php5

allow: /page
disallow: /*.ph

適用するルール: allow: /page。複数のルールが一致する場合、Google は最も制限の少ないルールを使用するため。

http://example.com/

allow: /$
disallow: /

適用するルール: allow: /$。より限定的であるため。

http://example.com/page.htm

allow: /$
disallow: /

適用するルール: disallow: /allow ルールはルート URL にのみ適用されるため。