先看现象。发布脚本每天调普通收录接口推 200 条新文,跑了半年都是 success,上周开始全部变成「error 401 token is not valid」。token 是当初手写进配置文件的,站点密码没改,也没人动过站长平台。日志里 401 从凌晨那条开始,之后每一条都一样。
这类报错背后常见的原因有几处,逐个排除就行。改过账号密码或解绑过站点,平台侧的 token 会立即失效。还有一种是请求地址里的 site 参数写成带 www 的域名,与登记的裸域不匹配。
另外,脚本取的是 OAuth 的 access_token,没有用普通收录的 token 字段。
少数情况下是配置文件被别的部署脚本覆盖,token 变回了上一版的旧值。
手工发一条最短请求看返回体到底写了什么
curl -s -H 'Content-Type: text/plain' --data-binary 'https://www.example.com/p/1' 'http://data.zz.baidu.com/urls?site=https://www.example.com&token=xxx'
到站长平台接口调用页重新复制 token 比对前后几位
https://ziyuan.baidu.com/linksubmit/index
接着把 token 挪到环境变量,避免被部署脚本覆盖
export BAIDU_TOKEN=$(cat /etc/seo/baidu.token)
末了换新 token 后先小批量验证再放开
python push.py --limit 5 --dry-run
恢复的判定其实很直接。返回体里 success 计数为 5,not_same_site 和 not_valid 都是 0,第二天收录报表能看到这批地址。
token 失效不会提前通知,脚本里判断返回码,连续两次 401 就告警,别等收录掉下来才发现。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
