robots.txtでAllowを使うのはどんな時?

[対象: 中〜上級]

Googlebotくん
調べる機会があったので忘備録も兼ねた「robots.txtの“Allow”の使い方」の解説が今日のテーマです。

robots.txtは検索エンジンのクローラのアクセスを拒否するために使用します。

英語で「許可しない」を意味する“Disallow”という命令をアクセスを拒否するために用います。

たとえば、以下のようにrobots.txtに記述したとします(ユーザーエージェントを指定する記述は省略してます)。

Disallow: /private/

この場合は、ルートディレクトリのなかにある「private」ディレクトリに含まれているすべてのコンテンツへのクローラのアクセスをブロックできます。

ところが英語で「許可する」を意味する“Allow”という命令をrobots.txtで使用することができます。

よくあるのが次のようなrobots.txtです。

User-Agent: *
Allow: /

「すべてのクローラにたいしてすべてのコンテンツ(URL)へのアクセスを許可する」という命令になります。

まず覚えておいてほしいのは、Allowはrobots.txtの標準の仕様では定義されていない拡張仕様だということです。

Googleはサポートしていますが、すべての検索エンジンのクローラがAllowをサポートしているわけではないことを知っておきましょう。

そこでこれ以降はGoogleにおけるrobots.txtのAllowの動作の説明になります。

さて上の例で挙げたすべてを許可するAllowのrobots.txtの件に戻って、この記述は不要です。
「不要」は言いすぎとしても僕からすると素人っぽく見えます(SEOを仕事にしてる人が設定していたのならなおさら)。

置いてはいけないということでは決してありませんが、Allowはすべての検索エンジンがサポートしているとは限らない点を考えると次の記述がより適切でしょう。

User-Agent: *
Disallow:

「どの検索エンジンのクローラに対しても何も拒否しない」、すなわちすべて許可するという記述になります。

もしくはrobots.txtそのものを置かないという選択も取れます。
このときはrobots.txtへのアクセスには404/410を必ず返すようにします。
※詳しくは、クロールを一切ブロックしないときのrobots.txtを説明した過去記事をご覧ください。

それでは、どんな場面でAllowを使うのでしょうか?

一般的に多いのは特定のコンテンツにだけ例外的にクロールを許可する場面です。

Disallow: /private/
Allow: /private/sample.html

上のように記述すると、「private」ディレクトリのなかのコンテンツに対するクロールは禁止するけれど、sample.htmlへのクロールだけは例外として許可するという命令になります。

同じprivateディレクトリのなかに、たとえばabc.htmlxyz.htmlがあったとすると、それらをクロールすることはできません。

ここでDisallowとAllowのどちらが優先されるのかという疑問が出てきます。

より特定されたパス、言い換えるとより長いパスに対する命令が優先されます。

1)

Disallow: /
Allow: /aaa/

1)は、すべてのコンテンツへのクロールはブロックされていますが、Allowのほうがパスが長いので、「aaa」ディレクトリへのクロールは許可されます。

2)

Disallow: /aaa/
Allow: /aaa/bbb.html

2)もAllowのほうがパスが長いので、/aaa/bbb.htmlへのクロールは許可されます。
/aaa/内にあるbbb.html以外のその他のコンテンツへのアクセスはブロックされます。

3)

Disallow: /aaa/
Allow: /aaa/bbb/
Disallow: /aaa/bbb/ccc/

3)はどうでしょう?
/aaa/red.htmlへのクロールはブロックされます。
/aaa/bbb/blue.htmlへのクロールは許可されます。
/aaa/bbb/ccc/green.htmlへのクロールはブロックされます。

もっともこんな変則的な記述をrobots.txtに書く人はいないと思いますが理論的にはこのように振る舞います。

ということでまとめると、robots.txtのAllowはブロックするコンテンツがないのであれば使う理由はありません。
ブロックするコンテンツがあるけれどそのパスに含まれる一部のコンテンツを例外的に許可するときにAllowを使います。

DisallowとAllowにバッティングする命令が存在するときは、より特定された方言い換えると指定するパスの長いほうが優先されます。

【リファレンス】