IndexNow 部署发现

当前实现与已确认缺口

公开站点已经提供 robots.txt、生成的 sitemap.xml,以及 IndexNow 密钥文件 7c5062acbc32b8a88d2e6b627d65cbfa.txt。本次变更之前,没有部署流程向 IndexNow 端点提交更新网址,因此参与的搜索引擎只能被动发现变更。

目标

每次向站点仓库成功提交发布内容后,将生成 sitemap 中的全部 canonical URL 通知给参与的搜索引擎。

边界

协议选择

工作流在站点仓库发布 action 成功后使用 IndexNow 批量端点。Python 标准库模块读取 _publish/sitemap.xml,提取属于 openprogram.io 的唯一 HTTPS URL,并生成协议规定的 JSON 请求。请求包含主机、公开密钥、密钥位置及 URL 列表。超过 10,000 个网址时拆分为多个请求,符合协议的单请求限制。

信任边界与数据流

  1. 受信任的文档构建器生成 _publish/sitemap.xml.
  2. 载荷构建器仅读取严格匹配 sitemap 0.9 的 loc 元素,只接受主机精确为 openprogram.io 的 HTTPS URL;空输入和其他主机输入在网络提交前失败。
  3. 工作流将验证后的请求批次写入 runner 临时目录。
  4. 标准库 HTTP 客户端将每批发送至 https://api.indexnow.org/indexnow,设置有限超时和重试次数。失败批次会被记录,但不跳过后续批次;全部批次尝试完毕后步骤才报告失败。

备选方案

机制覆盖范围选择
被动 sitemap 发现所有支持 sitemap 的爬虫保留;它不会在部署变化时主动通知爬虫。
IndexNow 批量提交参与的搜索引擎每次成功发布后采用。
Google Search ConsoleGoogle保留为单独验证的服务;不增加部署凭据。

失败处理

提交步骤使用有限 HTTP 超时和 continue-on-error。无效 sitemap URL、载荷构建错误和端点失败会使通知步骤失败,但不影响已完成的站点仓库发布。IndexNow 所有权由公开密钥文件证明,无需仓库 secret。

兼容性与排除范围

验证

实现证据

已审查的实现提交 f458791e8c245e642b563a5ffc9074c9758683ab 增加标准库载荷构建器、批量提交、部署钩子及八个聚焦回归用例。独立规格与质量审查在各自记录的修复后均达到 PASS。命令及最终门禁结果记录在 任务台账.