报错是这么冒出来的。发布脚本同时调用 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 侧不受影响继续保持当日抓取。

提醒一点。两个接口的配额和校验逻辑完全不同,顺序不是关键,配额分配和地址一致性才是。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189