Googlebot 未抓取“robots.txt”中的通用规则

尊敬的 Discourse 团队:

首先,我们要赞扬你们在构思和维护 Discourse 方面所付出的心血和毅力。我们和我们的社区成员一直很乐意使用它。

我们总结了今天发现的一些小问题,希望对你们有所帮助。另一方面,我们也乐于听到任何我们方面的误解。

此致,
Andreas。


引言

在研究我们托管的 Discourse 实例 https://community.crate.io/robots.txt 定义文件 [1] 的行为时,我们发现 Googlebot 可能没有按预期遵守设置。

评估

让我们以 Meta [2] 上的 robots.txt 为例,使用我的个人资料 URL https://meta.discourse.org/u/amotl/ 来进行测试。

通过比较这个免费的 robots.txt 验证器 [3] 的结果,可以快速发现差异:


使用 Googlebot 进行评估


使用 MSNBot 进行评估

研究

关于这个主题,我们相信已经找到了答案:

想法

因此,我们倾向于认为 Googlebot 目前可能完全忽略 User-agent: * 部分 [3:1] 中定义的规则,而遵守 User-agent: Googlebot [4] 部分中的规则。


  1. https://community.crate.io/robots.txt ↩︎

  2. https://meta.discourse.org/robots.txt ↩︎

  3. robots.txtUser-agent: * 部分

    User-agent: *
    Disallow: /admin/
    Disallow: /auth/
    Disallow: /assets/browser-update*.js
    Disallow: /email/
    Disallow: /session
    Disallow: /user-api-key
    Disallow: /*?api_key*
    Disallow: /*?*api_key*
    Disallow: /badges
    Disallow: /u
    Disallow: /my
    Disallow: /search
    Disallow: /tag
    Disallow: /g
    Disallow: /t/*/*.rss
    Disallow: /c/*.rss
    
    ↩︎ ↩︎
  4. robots.txtUser-agent: Googlebot 部分

    User-agent: Googlebot
    Disallow: /auth/
    Disallow: /assets/browser-update*.js
    Disallow: /email/
    Disallow: /session
    Disallow: /*?api_key*
    Disallow: /*?*api_key*
    
    ↩︎

如果我理解正确的话,答案并非那么简单。如果单个用户通过 Gmail 发送了链接,Googlebot 不会遵守 robots.txt。同样,如果链接被分享到某个地方(反向链接),Googlebot 会将其视为正常的日常链接。

再次强调——robots.txt 只是一种请求。

还有另一种,但更…… 相当多的机器人会表明自己是 Googlebot,而真实情况只能通过 IP 地址找到。

这是正确的,并且是故意这样实现的。

因此,对于那些确实不应该被索引的页面,Googlebot 会收到一个额外的 http-header X-Robots-Tag: noindex。请参阅:


对于您自己的域名,您可以使用 Google Search Console → 检查网址

然后尝试添加一个用户配置文件 URL 进行索引 – 例如 https://www.example.com/u/jacob

尊敬的 Ayke:

确认。

$ http https://meta.discourse.org/u/amotl --print hH | grep -i robot
X-Robots-Tag: noindex

非常感谢您的快速回复、解释以及提供相关补丁的参考。

此致,
Andreas。

我已将此移至 Support,感谢您在此处撰写的精彩的错误报告。

我们花费了大量时间来精心调整我们的规则以满足 Google 的要求,x-robots-tag noindex 的支持程度不一,但它是行业标准。仅仅禁止抓取的问题在于,由于某些原因,在特定条件下,页面可能会被 Google 索引,然后由于禁止抓取而无法轻松将其删除,这有点像先有鸡还是先有蛋的问题。

尊敬的 Sam:

非常感谢您分享关于此事的更多细节。一如既往,您在 Discourse 的每个细节中倾注的卓越水平令我惊叹。

我必须承认,我直到现在才知道这一点。所以,再次感谢!

image

太好了。谢谢。如果这现在已经成为一个被广泛接受的标准,那么一些免费的 robots.txt 验证器将来是否也有可能支持它?

您是否知道任何像 Google Search Console 的“检查网址”那样,除了读取 robots.txt 之外,今天就已经实现了相应额外标头检查的工具?这可能会帮助人们避免我们遇到的同样的困惑。

此致,
Andreas。