事情本身不复杂,线索都在日志里。站点每天发四十篇,后台接入了 Bing 的 URL 提交接口,配额一万条。日志里上午十点半就开始返回 429,新文要到第三天才被抓。查提交记录发现每次保存草稿都会触发一次提交,同一批地址一小时能重复十几遍。
第一反应是「提交队列没有去重,同一 URL 一天能被塞进去几十次」,验证下来不成立。
排查方向其实有限,先把可能性排一排。保存草稿和发布共用同一个钩子,草稿也在提交。另一种情况是定时任务每小时把最近三天的文章全量重提一次。
不容易想到的是,tag 页和分页地址也混在提交列表里,占了大半配额。
动手时先按状态码统计提交结果,确认配额是什么时候打满的
grep -c '429' submit.log; awk '{print $1}' submit.log | cut -c1-13 | uniq -c | sort -rn | head
然后在发布钩子里判断文章状态,只提交正式发布
add_action('publish_post', 'push_url', 10, 1);
队列按 URL 哈希去重,只保留最近一次提交时间
redis-cli SADD push:dedup https://www.example.com/p/1024
等前面都确认过,再配额紧张时改走 IndexNow,剩下的靠 sitemap 的 lastmod 兜底
curl -s https://www.example.com/sitemap.xml | grep -c '<loc>'
改完先别撤,确认这几项。提交次数从一天一万二降到八百,429 不再出现,新文当天就能在日志里看到 Bingbot。
提醒一点。配额是按天重置的,但频繁触发 429 会让接口对该来源降速,别把它当成可以随便试的按钮。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
