robotsメタタグは累積で適用、robots.txtとは違う

検索エンジンのロボットのウェブページへのアクセスするを制御するときには、robots.txtrobots meta タグを利用します。

robots.txtもrobots meta タグのどちらもロボットのユーザーエージェント名を特定して指示ができます。
しかしGoogleでは、ユーザーエージェント名を指定せずにすべてのロボットに対して指示した場合と、Googlebotを明示的に指定した指示した場合において、それらの指示が互いに反するときの動作に違いがあるようです。

Google Webmaster Centralの公式ヘルプフォーラムでGoogle社員のJohnMu(Johm Mueller: ジョン・ミューラー氏)は次のようにコメントしています。

For the robots meta tag, the effects are cumulative with regards to the restrictions, eg:

<meta NAME=”ROBOTS” CONTENT=”NOINDEX, NOFOLLOW”>
<meta NAME=”GOOGLEBOT” CONTENT=”INDEX, FOLLOW, NOODP, NOIMAGEINDEX”>

would result in Googlebot treating it as a noindex, nofollow, noodp, noimageindex. This is different than the robots.txt file. You cannot provide more restrictive directives for the generic “robots” setting than for individual crawlers.

1つ目のrobots metaタグでは、すべての検索検索エンジンに対して(ROBOTS)、ウェブページを検索結果に表示することを禁止し(NOINDEX)、ページ内のリンクをたどることを禁止(NOFOLLOW)しています。

2つ目のrobots metaタグでは、Googleに対して(GOOGLBOT)、検索結果表示とリンクをたどることを許可し(INDEX/FOLLOW)、DMOZに登録されたタイトルや説明文を使わないように指示し(NOODP)、画像検索に画像を表示しないように指示(NOIMAGEINDEX)しています。

すべての検索エンジンに対しては「noindex」と「nofollow」で禁止し、一方でGooglebot(Googleのウェブ用ロボット)に対しては「index」と「follow」で許可しています。

相反した命令になっています。

どちらに従うのでしょうか?

Johm Mueller氏の説明によれば、制限に関してはGoogleは累積して適用していくとのことです。
つまり、「noindex」と「nofollow」に従います。

この点でrobots.txtの動きとは異なります。

たとえば、robots.txtに次のように記述していたとしましょう。

User-agent: *
Disallow: /

User-agent: Googlebot
Disallow:

1つめのセクションでは、すべての検索エンジンのロボット(*)に対してサイト内すべてのページ(/)へのアクセスを禁止しています。

2つめのセクションでは、Googleのロボット(Googlebot)対して禁止するディレクトリを指定していません。すなわちアクセスを拒否せず全コンテンツへのアクセスを許可しています。
(”Disallow:”のあとが空白の時は、「禁止するものはありませんよ」つまり「すべて許可しますよ」という解釈になる)

この場合、Googleは2つめのセクションの命令に従います。
つまりサイト内のコンテンツを自由にクロールします。

GoogleはAllowディレクティブをサポートするので、同じ命令を次のようにも記述できます。

User-agent: *
Disallow: /

User-agent: Googlebot
Allow: /

2つめのセクションでは、全てのページへのアクセスを明示的に許可しています。

User-agent: *
Disallow: /

User-agent: Googlebot
Allow: /comehere/

上のように記述すると、サイト内のすべてのページに対してアクセスを禁止しつつ、comehere という名前のディレクトリの中にあるコンテンツだけにはGooglebotのアクセスを許可できます。
それ以外の場所にあるコンテンツには、Googleを含めすべての検索エンジンはアクセス禁止です。

robots.txtは、基本的に条件をより限定してある命令に従うようです。

上の例は、robots metaタグのパターンなら「すべての検索エンジンはすべてのページにアクセスできない」という命令“も”採用するので、2つめのセクションで許可されている comehere にもアクセスできないということになります。

ユーザーエージェント名が明示的に記述されていても優先しません。

今日のエントリはやや高度だったかもしれませんね。
robots.txtやrobots metaタグをほとんど使わないし、ましてや検索エンジンごとに制御を分離することもないというのであれば、知っていなくても問題は発生しないでしょう。

ただしrobots.txtの適用ルールについては、理解が不十分だと思ったら勉強しておくことを推奨します。
検索エンジンによっても解釈は違ってくるはずです。

Googleはウェブマスターツールでrobots.txtのテストができます(「サイト設定」 ⇒ 「クローラのアクセス」)。
想定どおりの動きになるか事前にテストしておくと安心です。