报错是这么冒出来的。站点把 key 文件放在 /seo/8f3a2c1d.txt,提交时 keyLocation 填成相对路径 /seo/8f3a2c1d.txt,接口一直返回 403。试过把 key 换成大写,仍然 403。
中间走过弯路,把「key 文件实际路径与 keyLocation 指向的路径不一致」当成主因,改完现象没变。
原因不止一个,得分开看。keyLocation 必须是完整的绝对 URL,相对路径不被接受。另一种情况是keyLocation 的域名必须与提交的 host 同源。
还有一种情况,key 内容带了空格或换行,校验时按严格匹配失败。
先确认文件可访问
curl -s https://www.example.com/seo/8f3a2c1d.txt
再往下用完整 URL 重新提交
curl -s -X POST https://api.indexnow.org/indexnow -H 'Content-Type: application/json' -d '{"host":"www.example.com","key":"8f3a2c1d","keyLocation":"https://www.example.com/seo/8f3a2c1d.txt","urlList":["https://www.example.com/post/1/"]}'
随后检查 key 文件字节内容
xxd /var/www/html/seo/8f3a2c1d.txt | tail -2
复核返回码
curl -s -o /dev/null -w "%{http_code}\n" -X POST https://api.indexnow.org/indexnow -H 'Content-Type: application/json' -d @payload.json
同样的操作我在测试机上先走了一遍,线上只做验证过的部分。
恢复的判定其实很直接。keyLocation 改成绝对地址后返回 200,Bing 后台显示 key 已验证,提交的页面在第二天被抓取。
keyLocation 是可选项,但一旦写了就必须是完整 URL,写相对路径等于给校验端一个无法解析的地址。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
