现场是这样的。用脚本批量提交了 3000 条 URL,接口每次都回 200,Bing Webmaster 后台的已提交数也涨了,可服务器日志里连续五天没有一条 Bingbot 记录,收录数一条没动。
排查方向其实有限,先把可能性排一排。提交的 host 与站点证书域名不一致,请求被当成跨域提交丢弃;key 文件放在需要登录才能访问的目录,校验没通过;URL 列表里带大写路径和查询参数,与实际地址不匹配。
先确认 key 文件能匿名访问且内容正确
curl -s https://www.example.com/8f3a2c9d1e.txt
再往下重新提交时带 keyLocation 明确位置
curl -X POST https://api.indexnow.org/indexnow -H 'Content-Type: application/json' -d '{"host":"www.example.com","key":"8f3a2c9d1e","keyLocation":"https://www.example.com/8f3a2c9d1e.txt","urlList":["https://www.example.com/post/1"]}'
末了核对提交列表里的 URL 是否与线上一致
curl -s https://www.example.com/sitemap.xml | grep -o '<loc>[^<]*' | head
那几天正好在做别的变更,先把时间线对齐才敢动手。
排查用的命令都是临时敲的,没有写成脚本,事后才整理。
恢复的判定其实很直接。修正 host 与 keyLocation 后第二天日志出现 Bingbot,三天内提交的 3000 条里有 800 多条被抓取。
engine 只校验 host 和 key,不校验你是否真的改了内容,返回 200 只能说明请求收下了。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
