现场是这样的。运维图省事把 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,把提交地址做成可点击链接看着方便,实际一次都不会成功。这类问题最好一次改到位,反复小改反而容易把原因搅混。
