页面如何被发现并重新抓取
这里有三个独立的问题,而它们有三种不同的答案:爬虫如何找到页面,爬虫多快能获知页面发生了更改,以及你能看到有关结果的哪些信息。本页面将通过实际计时器回答这三个问题。
爬虫究竟如何找到页面?#
两种基于拉取的路径,均为自动执行:
- 站点地图。 每位所有者都会获得一个
sitemap.xml,其中列出每个已 索引仓库中的每个页面,并为每个真正翻译的区域设置添加一个条目。它由网站自己的主机提供服务, 并且最多每小时重建一次。 robots.txt会对其进行命名。 每个由 Docsbook 托管的主机都会提供一个robots.txt, 其中包含一行Sitemap:,指向属于该主机的站点地图。顶级域名会携带多个站点地图:自身的一个、 每个产品文档网站各一个,以及每个启用了 SEO 的公共展示网站各一个——因为这些网站只能从顶级域名访问, 否则不会有其他内容指引爬虫找到它们。
除此之外,侧边栏在每个页面上都会渲染为真正的 HTML 链接,因此对任意页面的每次 抓取也都是对内容地图的一次抓取。
更改需要多快才能到达搜索引擎?#
推送。 当更改通过 Docsbook发布时——无论是编辑器、代理、MCP 工具,还是工作区设置更改——Docsbook 都会立即使该站点自身的缓存失效;对于托管在 docsbook.io 顶级域名下的站点,它还会发送一条 IndexNow 通知,其中包含站点根地址和站点地图。该调用是即发即忘的:它会标记两个 URL,而不是已更改的页面(此时只知道“该站点发生了更改”,站点地图则让参与的搜索引擎自行确定具体内容);它不会阻塞发布或导致发布失败,IndexNow 服务中断也只会被记录,而不会显示给用户。
拉取。 其他所有情况都要等待爬虫再次返回并重新读取站点地图。
坦率地说: Docsbook 没有 GitHub webhook。 直接推送到代码仓库、绕过 Docsbook 的提交不会触发缓存失效,也不会触发 IndexNow 推送。它会由以下定时器获取:
| 定时器 | 时间窗口 | 刷新内容 |
|---|---|---|
| 代码仓库文件树 | 30 分钟 | 哪些页面存在 |
| 默认分支和提交日期 | 1 小时 | lastmod、dateModified |
| 缓存的匿名页面 HTML | 24 小时 | 向爬虫提供的内容 |
sitemap.xml 和 robots.txt |
1 小时 | 可抓取的索引 |
| 语义索引扫描 | 每小时,分批进行 | 站内搜索和 AI 搜索,不包括 Google |
因此,在 Docsbook 中编辑的页面会在几秒钟内对下一次爬虫抓取保持最新;而直接推送到 GitHub 的页面可能会从缓存中提供长达 24 小时。24 小时的时间窗口是有意为之的权衡:机器人每小时重新渲染每个页面的抓取任务,是托管账单中金额最大的一项,而文档页面被阅读的频率远高于其被写入的频率。
页面重命名后会发生什么?#
通过 Docsbook进行的移动,会将旧页面路径 → 新页面路径写入与移动操作处于同一提交中的
.docsbook/redirects.json 文件,随后旧 URL 会对新 URL
返回308 永久重定向。之所以是永久重定向而不是临时重定向,
是因为临时重定向会告诉搜索引擎保留失效 URL 作为
规范 URL——这恰恰会损失此重定向旨在保留的排名。映射最多包含 500 个条目,
最旧的条目会优先删除,并且它只会针对原本就将返回 404 的请求进行查询。
在 git 中自行移动文件所做的重命名不会获得重定向:因为没有任何内容写入 该映射。你可以手动添加条目——它是仓库中的普通文件, 两侧都是页面路径,也就是 URL 中显示的内容。
Search Console 集成究竟做什么?#
它只读取数据。数据通过只读的 Search Analytics 权限范围单向流动,即 Google → Docsbook。Docsbook 不会提交 URL、请求编入索引,也不会向你的
Search Console 账户写入任何内容,你也无需进行任何连接:Docsbook 会读取
docsbook.io 上的 Search Console 网域资源,根据 Google 的定义,该资源
“汇总所有子域名、协议和子路径的数据”,并将结果筛选为属于你网站的 URL。
管理面板中会显示:平均排名、展示次数、点击次数、你的页面获得排名的查询词、 每日趋势,以及一组“值得改进”的查询词——这些查询词的排名处于第 5–20 位, 已经获得展示,但尚未取得优势。时间窗口包括 7 天、28 天和 30 天;默认使用 7 天, 因为系统只保留 30 天的历史记录,因此只有 7 天窗口后面有相同长度的时期可供比较。
系统会展示而不是隐藏三项限制。Google 的数据大约会延迟两天,因此屏幕上始终会显示“数据截至”日期。每 24 小时只能刷新一次,因为 Google 本身每天刷新一次数据,第二次提取只会消耗配额,却返回完全相同的数字。此外,汇总总数按页面粒度统计,而不是将查询词行相加:出于隐私考虑,Google 不会提供低流量查询词,因此查询词明细只覆盖实际流量的一部分。我们在 Docsbook 自己的文档资源上进行的测量显示:按查询词汇总为 91 次展示,而按页面汇总为 413 次。这是某个网站在某一天的数据,引用它是为了说明差距的方向,而不是说明你的网站会有同样大小的差距。
为什么是这些机制(证据)#
| 机制 | 来源的实际表述 | 来源 |
|---|---|---|
| 站点地图用于声明,而非保证 | “提交站点地图只是一种提示:它并不能保证 Google 会下载该站点地图,或使用该站点地图抓取网址” | 构建站点地图 |
Sitemap: 位于 robots.txt 中是一条真实的发现路径 |
“Google、Bing 及其他主要搜索引擎支持 robots.txt 中的 sitemap 字段”,且“可包含的站点地图数量没有限制” |
robots.txt 规范 |
| IndexNow 是重新抓取提示,而不是索引 | “提交网址并不能保证立即建立索引”;搜索引擎仍会“根据其抓取配额、调度逻辑和质量信号,评估是否应抓取该网址” | IndexNow 常见问题 |
| 一次 IndexNow 调用对应一个主机 | 提交正文包含单个 host 字段,而违反这一要求时,文档列出的错误为“422 — 无法处理的实体 — 网址不属于该主机”;每次发布最多可提交 10,000 个网址 |
IndexNow 文档 |
| 域名属性涵盖每个子域名 | “域名属性会汇总该属性下所有子域名、协议和子路径的数据” | Search Console 属性 |
| Search Console API 可以只读方式授权 | webmasters.readonly 是该方法列出的两个作用域之一,也是 Docsbook 请求的作用域。它分组使用的维度——查询、页面、国家/地区、设备、日期——都是 dimensions[] 的有效值(date 是通过该方法“以及 ‘date’ 和 ‘hour’”这一条款支持的,而不是可筛选的维度) |
搜索分析:查询 |
| 查询行会有意少于实际数量 | “为保护用户隐私,效果报告不会显示所有数据……对于出现次数非常少的某些查询,我们可能不会进行跟踪” | 关于 Search Console 数据 |
noindex 要求页面保持可抓取状态 |
“要使 noindex 规则生效,页面或资源不得被 robots.txt 文件阻止,并且必须以其他方式可供抓取工具访问”——因此,noindex 页面会保留在站点地图中,并继续被允许抓取 |
阻止建立索引 |
限制与未决问题#
- 目前不会为客户站点发送 IndexNow。 该协议要求提交中的每个 URL
共享同一主机,并要求在该主机的根目录中放置密钥文件。
Docsbook 仅在
docsbook.io主域名上托管该密钥,因此推送会发送到 Docsbook 自己的文档以及主域名上的展示站点——不会发送到<owner>.docsbook.io站点,也不会发送到自定义域名。按租户托管密钥是另一项工作,目前尚未构建。 - 尚待确认:IndexNow 的实际速度有多快。 Docsbook 的代码注释写道: “几分钟内,而不是等待下一次计划抓取”。IndexNow 自己的 FAQ 只会说它“提高重要变更被更快发现和抓取的可能性”, 并没有给出时间范围。请将几分钟视为一种期望,而不是测量结果——我们尚未发布任何数据。
- Google 并未参与 IndexNow。 indexnow.org 列出的支持方包括“Microsoft Bing、Naver、Seznam.cz、Yandex、Yep”—— 五个搜索引擎,而 Google 不在其中,无论是在该页面还是协议 文档中都没有出现。Google 的发现仍依赖站点地图和常规抓取。
- 尚待确认:IndexNow 密钥究竟有多秘密。 Docsbook 将该密钥视为 公开标识符——它以明文硬编码,密钥文件也会在主域名根目录未经身份验证地提供, 这正是 FAQ 所要求的(“无需登录”,因此搜索引擎可以“确认域名所有权”)。与 “它不是秘密”这一理解相矛盾的是 IndexNow 自己的协议页面,其中写道 “只有你和搜索引擎应该知道该密钥以及你的文件密钥位置”。 对于任何客户端都可以获取的文件来说,这两种说法不可能完全同时成立。密钥被复制后 能够做的事情是有限的——它只表示“此主机发生了变更”,仅此而已——但请将 “从设计上就是公开的”视为我们对该协议的解读,而不是协议明文表达的内容。
- Search Console 的覆盖范围止于 Docsbook 托管的主机。 域名资源
覆盖
docsbook.io及其子域名。位于你自己的自定义域名上的站点不属于 该资源,因此不会读取其排名。要提供这些数据,需要为每位客户提供 Google 授权流程,而目前尚不存在——在此期间,对于自定义域名请使用你自己的 Search Console 帐户。 - 这里的 Search Console 历史记录为 30 天。 Google 保留的数据多得多; Docsbook 为每个站点存储 30 天的滚动窗口,因此 30 天视图没有 对比期间。
- 这里没有任何内容能让页面获得排名。 发现和重新抓取是 Docsbook 可以自动完成的部分。被抓取的页面是否排名由 Google 根据你的内容决定, 本页面上的任何计时器都不会改变这一点。