把 IndexNow 的 key 文件放到项目 public 目录,本地能访问,线上一直 404。Bing 后台提示 key 验证失败,提交的 URL 全部待处理。试过重新上传和换文件名,状态没变。
一开始怀疑是「CDN 缓存了之前的 404,源站补文件后边缘仍是旧响应」,查了一圈,方向不对。
把日志和配置对完,能解释这个现象的基本就这几处。构建产物输出到 dist,public 下的文件没有同步到站点根目录。少数情况下是Nginx 的 location 规则把 .txt 之外的路径重写到前端路由。
不容易想到的是,文件名多了隐藏后缀,和提交的 key 不完全一致。
直接请求 key 文件
curl -sI https://www.example.com/8f3a2c1d.txt | head -3
再往下确认站点根目录里的真实文件
ls -l /var/www/html/8f3a2c1d.txt
然后让静态文件绕过前端路由
location ~* ^/[a-f0-9]{32}\.txt$ { try_files $uri =404; }
末了清掉 CDN 的 404 缓存
curl -X PURGE https://www.example.com/8f3a2c1d.txt
恢复的判定其实很直接。key 文件返回 200 且正文与后台填写的 key 完全一致,Bing 的验证状态在一天内变成已通过。
key 文件必须是纯文本且内容只有 key 本身,多一个换行都可能验证失败,上传后用 curl 原样比对。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
