现场是这样的。运维图省事把 IndexNow 写成了浏览器可访问的 GET 链接,点开返回 405,脚本里也用 GET 调用,日志里一条成功记录都没有。

原因不止一个,得分开看。接口只接受 POST 和 JSON 请求体;GET 请求被 CDN 的规则改写成了静态资源请求;脚本没有检查返回码,失败了也当日志正常。

动手时先用 GET 复现返回码

curl -s -o /dev/null -w '%{http_code}\n' 'https://api.indexnow.org/indexnow?url=https://www.example.com/p/1'

再往下改成 POST 加 JSON 体

curl -s -X POST https://api.indexnow.org/indexnow -H 'Content-Type: application/json' -d @payload.json

脚本里校验返回码

curl -s -o /dev/null -w '%{http_code}\n' -X POST https://api.indexnow.org/indexnow -d @payload.json

末了确认提交后的处理状态

curl -s https://www.bing.com/webmasters/api/site/inspect 2>/dev/null | head -3

手上没有现成的复现脚本,就照着线上请求手工拼了一个。

报错是间歇性的,我蹲守了半小时才抓到一次完整现场。

白天有业务在跑,能验证的部分都压到了晚上做。

当时还开着另一个排查窗口,两边日志对照着看才定位到。

别只看报错消失,验证要多做一步。改成 POST 后接口返回 202,第二天必应日志里出现对提交 URL 的抓取。

IndexNow 只认 POST,把提交地址做成可点击链接看着方便,实际一次都不会成功。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189