爬虫限流的处理

我有一个关于爬虫限流是如何实现的一般性问题。

根据 https://support.google.com/webmasters/answer/48620?hl=en,推荐的 HTTP 状态码是 429(请求过多)或 503(站点不可用)。

但通过阅读源代码,看起来限流是通过抛出错误来实现的:discourse/lib/rate_limiter.rb at 85fddf58bc1e751d0ac5b8192a630c59a34aed7d · discourse/discourse · GitHub

我的 Ruby on Rails 时代早已过去,但我假设这会引发一个通用的 505?

Google 爬虫不太理解 discourse 的限流,在 Google Search Console 中,我可以看到在实施限流后,我们的索引量(因此也包括展示量)急剧下降,但这并非由于限流,而是由于 5xx 服务器错误。

我理解在某些情况下可能需要限流实例,如果它们导致过多的流量,但我期望 discourse 会报告 HTTP 429,而不是向爬虫提供 505 内部错误。

我认为您要找的是

这是用于该错误的“全局”控制器救援,它设置了状态码。

谢谢!这让人放心,但并不能完全解释为什么 Google Search Console 会报告与实施限流同时发生的 5xx 错误。

它甚至报告说它无法获取 discourse sitemap.xml。

特别是限制 sitemap.xml 似乎有问题。

我假设那就是造成覆盖范围空白的原因。我相信 Google 会将 429 误报为 5xx。