是否可以在一行中列出多个用户代理?

elh*_*bre 6 user-agent robots.txt

是否有可能在robots.txt中向多个机器人发出一条指令,而不必反复提及它?

例:

User-agent: googlebot yahoobot microsoftbot
Disallow: /boringstuff/
Run Code Online (Sandbox Code Playgroud)

IMS*_*SoP 10

实际上很难给出明确的答案,因为robots.txt没有一个定义明确的标准,而且很多文档都含糊不清或相互矛盾.

谷歌的机器人理解格式的描述是相当全面的,包括这种略带乱码句子:

直接在组之后的多组起始线将遵循最终组起始线之后的组成员记录.

这似乎在摸索以下示例中显示的内容:

user-agent: e
user-agent: f
disallow: /g
Run Code Online (Sandbox Code Playgroud)

根据下面的解释,这构成了一个"组",不允许两个不同用户代理的相同URL.

因此,您想要的正确语法(关于任何机器人与Google的工作方式相同)将是:

User-agent: googlebot
User-agent: yahoobot
User-agent: microsoftbot
Disallow: /boringstuff/
Run Code Online (Sandbox Code Playgroud)

然而,正如Jim Mischel指出的那样,robots.txt文件中没有任何意义,一些机器人会正确解释,但其他人可能会窒息,所以最好采用重复块的"最小公分母",也许通过使用简单的"配方"和更新脚本动态生成文件.


uno*_*nor 5

我觉得原来的robots.txt规范定义不是含糊其辞:一个 User-agent行只能有一个值。

记录(又名块,组)由组成。每一都有这样的形式

<field>:<optionalspace><value><optionalspace>

User-agent是一个字段。它的价值

此字段的值是记录描述其访问策略的机器人的名称。

它是单数(“机器人的名字”),而不是复数(“机器人的名字”)。

机器人在解释这个领域时应该是自由的。建议不区分版本信息的名称的大小写子字符串匹配。

如果允许多个值,解析器怎么可能是自由的?无论定界字符是 ( ,, , ;, ...),它都可以是机器人名称的一部分。

记录以一个或多个 User-agent 行开始

User-agent如果您可以在一行中提供多个值,为什么要使用多行?

此外:

  • 该规范没有定义分隔符来在一行中提供多个值
  • 它没有定义/允许它Disallow要么

所以代替

User-agent: googlebot yahoobot microsoftbot
Disallow: /boringstuff/
Run Code Online (Sandbox Code Playgroud)

你应该使用

User-agent: googlebot
User-agent: yahoobot
User-agent: microsoftbot
Disallow: /boringstuff/
Run Code Online (Sandbox Code Playgroud)

或者(可能更安全,因为您无法确定所有相关的解析器是否支持不那么常见User-agent的记录多行方式)

User-agent: googlebot
Disallow: /boringstuff/

User-agent: yahoobot
Disallow: /boringstuff/

User-agent: microsoftbot
Disallow: /boringstuff/
Run Code Online (Sandbox Code Playgroud)

(当然User-agent: *