如何使用 robots.txt 和 X-Robots-Tag 排除除 Googlebot 和 Bingbot 之外的所有机器人

Vin*_*ceJ 5 html robots.txt meta-tags x-robots-tag

我有两个关于爬行器和机器人的问题。

\n\n

背景信息

\n\n

我只想将 Google 和 Bing 排除在 \xe2\x80\x9cdisallow\xe2\x80\x9d 和 \xe2\x80\x9cnoindex\xe2\x80\x9d 限制之外。换句话说,我希望除 Google 和 Bing 之外的所有搜索引擎都遵循 \xe2\x80\x9cdisallow\xe2\x80\x9d 和 \xe2\x80\x9cnoindex\xe2\x80\x9d 规则。另外,我还想要一个用于我提到的搜索引擎的 \xe2\x80\x9cnosnippet\xe2\x80\x9d 功能(它们都支持 \xe2\x80\x9cnosnippet\xe2\x80\x9d)。我应该使用哪些代码来执行此操作(同时使用 robots.txt 和 X-Robots-Tag)?

\n\n

我希望将其作为 X-Robots-Tag 包含在 robots.txt 文件和 htacess 文件中。我知道 robots.txt 可能已经过时,但我希望向爬虫提供清晰的说明,即使它们 \xe2\x80\x99re 被视为 \xe2\x80\x9cin effective\xe2\x80\x9d 和 \xe2\x80\x9coutdated\xe2\ x80\x9d 除非你另有想法。

\n\n

问题1

\n\n

我是否正确地获取了以下代码,仅允许 Google 和 Bing 建立索引(以防止其他搜索引擎在其结果中显示),并进一步阻止 Bing 和 Google 在其搜索结果中显示片段?

\n\n

X-Robots-Tag 代码(这是正确的吗?我认为我不需要向 googlebot 和 bingbot 添加“index”,因为“index”是默认值,但不确定。)

\n\n\n\n
X-Robots-Tag: googlebot: nosnippet\nX-Robots-Tag: bingbot: nosnippet\nX-Robots-Tag: otherbot: noindex\n
Run Code Online (Sandbox Code Playgroud)\n\n

robots.txt 代码(这是正确的吗?我认为第一个是,但不确定。)

\n\n
    User-agent: Googlebot\n    Disallow:\n    User-agent: Bingbot\n    Disallow:\n    User-agent: *\n    Disallow: /\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者

\n\n
    User-agent: *\n    Disallow: /\n    User-agent: Googlebot\n    Disallow:\n    User-agent: Bingbot\n    Disallow:\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题2:robots.txt和X-Robots-Tag之间的冲突

\n\n

我预计 robots.txt 和 X-Robots-Tag 之间会发生冲突,因为不允许函数和 noindex 函数不允许一起工作(使用 X-Robot-Tag 而不是 robots.txt 有什么优势吗?) 。我该如何解决这个问题,您有什么建议?

\n\n

最终目标

\n\n

如前所述,这样做的主要目标是明确告诉所有较旧的机器人(仍在使用 robots.txt)和除 Google 和 Bing(使用 X-Robots-Tag)之外的所有较新的机器人不要在搜索中显示我的任何页面结果(我假设在 noindex 函数中总结)。我知道他们可能不会全部遵循它,但我希望他们所有人都知道,除了 Google 和 Bing 之外,不要在搜索结果中显示我的页面。为此,我希望为 robots.txt 代码和 X-Robots-Tag 代码找到正确的代码,这些代码对于我正在尝试构建的 HTML 网站来说,不会与此功能发生冲突。

\n

uno*_*nor 4

robots.txt 并没有过时。它\xe2\x80\x99s仍然是唯一开放/与供应商无关的方式来控制不应该被抓取的内容。X-Robots-Tag(以及相应的meta- robots)是唯一开放/与供应商无关的方式来控制不应该被索引的内容。

\n\n

正如您\xe2\x80\x98 所知,您可以\xe2\x80\x99t 禁止同一 URL 两者。这是没有办法解决的。如果机器人想要抓取https://example.com/foo,它(希望)检查https://example.com/robots.txt是否允许它\xe2\x80\x99s 抓取它:

\n\n
    \n
  • 如果允许爬行,机器人会请求该文档,然后才知道不允许它\xe2\x80\x99对其建立索引。显然它已经抓取了文档,并且它\xe2\x80\x99s仍然允许抓取它。

  • \n
  • 如果不允许抓取,则机器人不会请求文档,因此永远不会知道它也不允许对其建立索引,因为它需要抓取文档才能查看 HTTP 标头或 HTML 元素。

  • \n
\n\n

robots.txt 中的一个Noindex字段可以解决此冲突,Google 似乎已将其作为实验性功能支持,但您不能期望它能够工作。

\n\n

所以,你必须选择:don\xe2\x80\x99t你想出现在其他搜索引擎\xe2\x80\x99结果(\xe2\x86\x92 X-Robots-Tag),或者don\xe2\x80\ x99您希望其他搜索引擎\xe2\x80\x99机器人抓取您的文档(\xe2\x86\x92 robots.txt)。

\n\n

X-机器人标签

\n\n

如果您想定位所有其他机器人(而不是像您的otherbot建议那样列出每个机器人,这实际上是不可能的),您应该使用

\n\n
X-Robots-Tag: bingbot: nosnippet\nX-Robots-Tag: googlebot: nosnippet\nX-Robots-Tag: noindex\n
Run Code Online (Sandbox Code Playgroud)\n\n

(我想 Bingbot/Googlebot 会忽略最后一行,因为它们已经与前一行匹配,但可以肯定的是,您可以添加index到两个机器人的行中。)

\n\n

机器人.txt

\n\n

记录(每条记录以一行开头User-agent)需要用空行分隔:

\n\n
User-agent: *\nDisallow: /\n\nUser-agent: Bingbot\nDisallow:\n\nUser-agent: Googlebot\nDisallow:\n
Run Code Online (Sandbox Code Playgroud)\n\n

记录的顺序\ xe2\x80\x99并不重要,除非机器人“监听”robots.txt中的多个名称(它将遵循与其名称匹配的第一个记录;并且仅当没有名称匹配时,它才会遵循记录*)。因此,添加空行后,两个 robots.txt 文件都很好。

\n\n

您还可以为两个机器人使用一条记录:

\n\n
User-agent: *\nDisallow: /\n\nUser-agent: Bingbot\nUser-agent: Googlebot\nDisallow:\n
Run Code Online (Sandbox Code Playgroud)\n