web-dev-qa-db-ja.com

robots.txtはルートのみを許可し、それ以外はすべて禁止しますか?

私はこれを機能させることができないようですが、それは本当に基本的なようです。

ドメインルートをクロールしたい

http://www.example.com

しかし、クロールするものは他になく、すべてのサブディレクトリは動的です

http://www.example.com/*

私は試した

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

しかし、Googleウェブマスターテストツールは、すべてのサブディレクトリが許可されていると言っています。

誰かがこれに対する解決策を持っていますか?ありがとう:)

35
cotopaxi

Googleのrobots.txtドキュメント のバッカスナウア記法(BNF)解析定義によると、AllowおよびDisallowディレクティブの順序は重要ではありません。したがって、順序を変更しても実際には役に立ちません。

代わりに、$演算子を使用してパスの終了を示す必要があります。

このrobots.txtをテストします。私はそれがあなたのために働くはずだと確信しています(私はGoogle SearchConsoleでも確認しました):

user-agent: *
Allow: /$
Disallow: /

これにより、http://www.example.comhttp://www.example.com/をクロールできますが、それ以外はすべてブロックされます。

注:Allowディレクティブは特定のユースケースを満たしますが、index.htmlまたはdefault.phpがある場合、これらのURLはクロールされません。

補足:私はGooglebotとbingbotの動作に精通しているだけです。対象としている他のエンジンがある場合、それらには、ディレクティブのリスト方法に関する特定のルールがある場合とない場合があります。したがって、「余分な」確実性が必要な場合は、いつでもAllowおよびDisallowディレクティブブロックの位置を入れ替えることができます。コメントの一部をデバンキングするように設定しました。

44
eywu

Google robots.txtの仕様を見ると、次のことがわかります。

Google、Bing、Yahoo、およびAskは、パス値に対して限定された形式の「ワイルドカード」をサポートしています。これらは:

  1. *は、有効な文字の0個以上のインスタンスを示します
  2. $はURLの終わりを示します

https://developers.google.com/webmasters/control-crawl-index/docs/robots_txt?hl=en#example-path-matches を参照してください

それからeywuが言ったように、解決策は

user-agent: *
Allow: /$
Disallow: /
9
charlesdg