robots.txtで許可と禁止を処理する適切な方法は何ですか?


8

かなり大規模なWebクローラーを実行しています。私たちは、受け入れられたコミュニティ標準の範囲内でクローラーを操作するために一生懸命努力しています。クローラーに関する苦情はほとんどありませんが、多くの場合、robots.txtの処理についての苦情です。ほとんどの場合、ウェブマスターがrobots.txtに誤りを犯したため、その旨を指摘してください。しかし、Allowとの処理を含む灰色の領域に定期的に出くわしDisallowます。

robots.txtののページがカバーしていませんAllow。他のページを見たことがあります。その中には、クローラーが「最初に一致する」ルールを使用しているものと、指定していないものがあります。これは混乱を招きます。たとえば、robots.txtに関するGoogleのページには、この例がありました。

User-agent: Googlebot
Disallow: /folder1/
Allow: /folder1/myfile.html

明らかに、ここでの「最初に一致する」ルールは機能しません。クローラーがを表示してDisallow立ち去るため、特別に許可されたファイルをクロールすることがないためです。

すべてのAllow行を無視すれば明確ですが、クロールが許可されているものをクロールしない可能性があります。見逃してしまいます。

Allow最初に確認しDisallow、次に確認することで、私たちは大きな成功を収めました。アイデアは、Allowより具体的であるように意図されていましたDisallow。これは、デフォルトで(つまり、反対の指示がない場合)、すべてのアクセスが許可されるためです。しかし、次のようなものに出くわします。

User-agent: *
Disallow: /norobots/
Allow: /

ここでの意図は明白ですが、これAllow: /により、Allow最初にチェックするボットは、サイト上のあらゆるものをクロールできると考えます。

この場合でもそれは回避できます。マッチングをAllowと比較してDisallow、/ norobots /の何もクロールできないことを確認できます。しかし、これはワイルドカードに直面すると失敗します。

User-agent: *
Disallow: /norobots/
Allow: /*.html$

では、ボットはクロールを許可されてい/norobots/index.htmlますか?

「最初に一致」ルールでは、すべての曖昧さを排除し、私は多くの場合、より具体的に入れて、古いGoogleの例のようなものを示しサイトを参照してくださいAllow Disallow。この構文では、ボットによる処理がさらに必要であり、解決できないあいまいさが生じます。

それで私の質問は、物事を行うための正しい方法は何ですか?robots.txtの処理に関して、ウェブマスターは行儀の良いボットに何を期待していますか?


すべてのディレクティブを順番に(上から下に)処理するだけで、あいまいさがすべて取り除かれているように見えます(公式には「未定義」であるワイルドカード URLパターンの処理を含みます)。ただし、メインの検索エンジンボット(Googlebot、Bingbotなど)はそのように機能しないため、機能しません。
MrWhite 2016年

回答:


4

1つの非常に重要な注意:Allowステートメントは、具体的なステートメントに関係なく、Disallowステートメントの前に置く必要があります。したがって、3番目の例では、ボットはクロールしません。/norobots/index.html

一般に、個人的なルールとして、許可ステートメントを最初に置き、次に許可されていないページとフォルダーをリストします。


それで、私は「最初に一致するルール」の標準に従うことを勧めていますか?つまり、ボットはrobots.txtを読み取り、問題のURLに一致する最初の許可または拒否を行いますか?
ジムミッシェル、

1
しかし、それがrobots.txtの一般的に受け入れられている解釈かどうか知っていますか?つまり、「最初の一致ルール」標準を実装するとしたら、それはほとんどのWebマスターが期待することでしょうか?
ジムミッシェル

4
robots.txtに関するWikipediaの記事-en.wikipedia.org/wiki/Robots_exclusion_standard#Allow_directive-(および他のいくつかのサイト)でのAllowの説明には、「最初に一致するルール」が標準であると記載されています。それは100%明確で、実装し、正しいことを証明するのが簡単なので、それは私が行ったものです。
ジムミッシェル

1
あなた自身の質問に答えてくれてありがとう:)私はどのように答えるかわかりませんでした。一般的に受け入れられている方法についてはわかりませんが、SEOのエキスパートとして働き始めて以来、この方法を使用してきました。常に正しく機能してきました。
Vergil Penkov、2010

1
AllowステートメントとDisallowステートメントの順序は、代わりに特定性を調べるGooglebotにとって違いはありません。Bingも他の検索エンジンについては知らないので、疑わしい場合は最初にAllowsを指定することを推測します。
pelms

2

これらの3つの例で私が目にするものについて、私の見解を示します。

例1ファイル以外のディレクトリ
全体を無視します。彼らはそれを明示的に許可しているので、ブロックしたいすべてのファイルをリストするのではなく、ディレクトリ全体をブロックし、その1つのファイルを明示的に許可するほうが簡単だと思います。そのディレクトリに多数のファイルとサブディレクトリが含まれている場合、robots.txtファイルは扱いにくく速くなります。/folder1/myfile.html

例2ディレクトリが立入禁止であり、他のすべてをクロールできると
想定/norobots/します。私はこれを「/ norobots /ディレクトリ以外のすべてをクロールする」と読みました。

例3
例2と同様に、/norobots/ディレクトリが立入禁止であり.html、そのディレクトリにないすべてのファイルをクロールできると想定します。私はこれを「すべての.htmlファイルをクロールしますが、/ norobots /ディレクトリ内のコンテンツはクロールしません」と読みました。

うまくいけば、ボットのユーザーエージェントにURLが含まれていて、クロールの習慣に関する詳細情報を見つけたり、削除リクエストを行ったり、botがrobots.txtをどのように解釈したいかについてフィードバックしたりできます。


1
あなたの答えはおそらく私がやや疑わしいと思う最後のものを除いて、意図と一致します。これらの特定のケースでは、ロボットが正しく処理するようにコーディングできますが、それほど簡単に判別できないあいまいなケースもあります。さらに、私は一般的な解決策を探しています。そして、はい、ユーザーエージェント文字列にはFAQページへのリンクがあります。robots.txtの処理方法については説明できますが、必要がなければ、関係者全員にとって最善の方法です。つまり、誰もが同じように物事を処理した場合。しかし、そうではないようです。
ジムミッシェル

上記は、robots.txtテストツール(ウェブマスターツール>ブロックされたURL)でテストできるように、Googlebotがサンプルを処理する方法です。Googleは、許可と拒否のどちらを先にしても構いませんが、特定性を決定するアルゴリズムを使用しているため、明らかでない結果が生じることがあります。たとえば、3番目の例で「/*.html$」を「/*myfile.html$」に置き換えると、ブロックされるのではなく「myfile.html」が許可されます。または、「」から末尾の「/」が失われる場合/norobots/'、.htmlファイルも許可されます。
pelms

ああ!ウィキペディアによると、Googleは文字数を調べてどのディレクティブを使用するかを決定し、「ドロー」の場合は「許可」を使用します。
pelms
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.