报错是这么冒出来的。发布脚本同时调用 IndexNow 和百度普通收录接口,两边都返回成功,Bing 当天就抓了,百度三天没动静,怀疑是调用顺序的问题。
中间走过弯路,把「百度要求先验证站点归属,未验证的推送只记录不抓取」当成主因,改完现象没变。
原因不止一个,得分开看。百度接口有单日配额,批量调用时后面的请求被静默丢弃。另一种情况是两个接口共用一份队列,失败重试把顺序打乱。
还有一种情况,推送的 URL 带跟踪参数,与 sitemap 里的地址不一致。
第一件事是看两个接口的返回体差异
curl -s 'http://data.zz.baidu.com/urls?site=https://www.example.com&token=xxx' -H 'Content-Type: text/plain' -d 'https://www.example.com/post-1/'
接着统计当天配额消耗
grep -c 'success' baidu_push.log
然后把百度推送改成按配额分片
SELECT ID FROM wp_posts WHERE post_status='publish' ORDER BY post_date DESC LIMIT 10;
剩下的就是统一推送 canonical 地址
curl -s https://www.example.com/sitemap.xml | grep -c '?from='
怎么算真的好了,看的是同一批现象。百度后台显示当天推送全部成功,抓取记录在 24 小时内出现,IndexNow 侧不受影响继续保持当日抓取。
提醒一点。两个接口的配额和校验逻辑完全不同,顺序不是关键,配额分配和地址一致性才是。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
