SereneReader Bot

我们的抓取器做什么、如何标识自身,以及如何将其拒之门外。

SereneReader 是什么

SereneReader 是一款 Feed 阅读器。当有人订阅您的 RSS 或 Atom Feed 时,我们的服务器会代其抓取内容,并向其展示新文章。

为显示预览图,我们还会对每篇文章页面抓取一次,读取其 og:image 标签,并抓取您网站的 favicon 用于侧边栏。

User-Agent

我们服务器的每次请求均以如下字符串标识自身:

SereneReader/1.0 (+https://serenereader.com/bot)

我们抓取的内容

  • 用户已订阅的 Feed 地址。
  • 每篇文章页面仅抓取一次,最多读取 1 MB 的 HTML 以查找 og:image 标签。
  • 您网站的 favicon。

我们从不爬取整个网站,从不跟随文章页面中的链接,也不抓取任何无人订阅的内容。

抓取频率

订阅源按计划定时刷新。若您的服务器返回 ETag 或 Last-Modified 响应头,下次刷新时将携带 If-None-MatchIf-Modified-Since,内容未变则仅返回 304,无需传输正文。

每篇文章页面仅抓取一次,用于生成预览图。若页面无法访问,我们会停止重试:404 等永久性错误将记录 30 天;超时或服务器错误等临时性问题最多退避重试三次,之后至少搁置一小时。

收到 429 或 503 时,我们会主动降频。对于订阅源,我们会以递增的退避策略推迟下次刷新;若为 429,则至少遵循您的 Retry-After 值。对于文章页面,我们最多在接下来约十分钟内重试三次,之后至少等待一小时,或按您的 Retry-After 要求等待,最长不超过七天。

robots.txt

在抓取文章页面或网站图标之前,我们会读取您的 robots.txt,并遵循 User-agent: SereneReader 的 Disallow 规则和抓取延迟,若无匹配则回退至 * 组。

Feed 网址有所不同。抓取 Feed 是代表订阅它的读者进行的,因此我们采用与 Google Feedfetcher 相同的处理方式:* 分组的 Disallow 规则不适用于 Feed。若 User-agent: SereneReader 分组禁止了 Feed 路径,该规则仍会被遵守,crawl-delay 对 Feed 的约束与对其他内容完全一致。

若因服务器错误导致 robots.txt 无法访问,我们将视为允许抓取。订阅是读者的主动行为,不稳定的 robots 文件不应阻断他们的订阅源。

如何屏蔽我们

您可在服务器或防火墙层面屏蔽或限速上方的 User-Agent,也可在 robots.txt 中添加一个包含我们名称的组来拒绝访问。针对所有爬虫的规则不会阻止订阅源抓取,以下规则才有效:

User-agent: SereneReader
Disallow: /

屏蔽您的 Feed 地址会停止所有订阅者的刷新,而非仅针对某一位读者。

请求签名

请求使用 Web Bot Auth(HTTP 消息签名,RFC 9421)进行签名,您可以验证其确实来自我们。我们的公钥发布于:

https://serenereader.com/.well-known/http-message-signatures-directory

出站 IP 地址

定时订阅源刷新和预览图片获取来自以下固定地址。当有人首次添加订阅源时发起的一次性请求来自我们的网页服务器,不在此列表中,因此仅凭 IP 白名单将会拒绝该请求。

162.220.234.241
152.55.180.242
152.55.180.243

机器可读列表/bot/ips.json

联系我们

对我们的流量有疑问,或希望我们修复某些问题? 联系我们。