在我的 robots.txt 中:
Disallow: /account
Allow: /account/
在我的站点中,有一个页面/account
只有登录的人才能访问,但是要查看另一个用户的个人资料页面,您可以转到/account/username
. 所以我希望 robots.txt 禁止单/account
页但允许目录。这个设置有效吗?
推论:是否Disallow: /account
也不允许该目录/account/
,或者我只是在浪费时间然后明确允许它?
在我的 robots.txt 中:
Disallow: /account
Allow: /account/
在我的站点中,有一个页面/account
只有登录的人才能访问,但是要查看另一个用户的个人资料页面,您可以转到/account/username
. 所以我希望 robots.txt 禁止单/account
页但允许目录。这个设置有效吗?
推论:是否Disallow: /account
也不允许该目录/account/
,或者我只是在浪费时间然后明确允许它?
这里有几件事要注意。
首先,正如@plasticinsect 在他的回答中所说,最具体的规则获胜。对于谷歌机器人。但是,其他机器人使用原始 robots.txt 协议中的规则,即指令按顺序处理 - 它们出现在 robots.txt 文件中的顺序。那些机器人会看到 Disallow 并停止。
至少,您应该交换 Allow 和 Disallow 的顺序。
此外,有时对于是否/account
不同/account/
的 url 存在分歧。如果爬虫使用 访问您的网站http://example.com/account/
,则 robots.txt 将允许它。您可能想要禁止/account/$
. 这不会阻止所有机器人(那些不支持$
字符串结尾标记的机器人将忽略该指令),但值得一试。
鉴于此,我建议:
Disallow: /account/$
Allow: /account/
Disallow: /account
或者,如果您只是担心 Googlebot 和其他主要抓取工具:
Disallow: /account$
Disallow: /account/$
对于 Googlebot,这肯定会奏效。对于其他网络机器人,它可能会也可能不会,这取决于它们如何实现 robots.txt。我不会指望它。
根据:https ://developers.google.com/webmasters/control-crawl-index/docs/robots_txt ,
“在组成员级别,特别是对于允许和禁止指令,基于 [path] 条目长度的最具体规则将胜过不太具体(较短)的规则。”
由于“/account/”比“/account”长,因此允许将覆盖禁止,至少在 Googlebot 上是这样。
然而,这几乎肯定不会在许多其他网络机器人上工作。最初的 robots.txt 标准甚至不包括 Allow 指令。即使机器人确实支持允许,也不能保证它的优先级与谷歌相同。所以,如果你只关心谷歌,那就去吧。如果您需要它为其他机器人工作,您可能想要找到不同的解决方案,可能是机器人元标记或 X-Robots-Tag 标头。
要回答您的相关问题,“禁止:/account”将阻止任何以“/account”开头的文件或路径,包括“/account/user”,所以是的,您确实需要允许。