这类问题我又碰上了一次。装了前台搜索和无限加载之后,日志里 /wp-json/wp/v2/posts 的请求比正文页还多,一天的抓取量有七成落在接口上,文章收录停了三周。
第一反应是「每个页面都请求一次接口,抓取量随页面数线性放大」,验证下来不成立。
真正麻烦的地方在于,几个原因的现象几乎一样。前端列表直接调 REST 接口,蜘蛛把接口当成页面路径;接口没有 noindex 头,返回的 JSON 也能被索引;链接被写进 sitemap,接口地址变成正式入口。
上来先统计接口与正文的抓取占比
awk '{print $7}' access.log | grep -c '/wp-json/'
然后看接口返回是否带索引头
curl -sI https://www.example.com/wp-json/wp/v2/posts | grep -i x-robots
给 REST 输出补 noindex 头
add_filter('rest_post_dispatch', function($r){ $r->header('X-Robots-Tag','noindex'); return $r; });
剩下的就是把 sitemap 里的接口地址清掉
curl -s https://www.example.com/sitemap.xml | grep -c 'wp-json'
怎么算真的好了,看的是同一批现象。接口请求占比从七成降到一成,正文页抓取量翻倍,三周没动的收录数字重新开始增长。
这里还有个坑。REST 接口是给脚本用的,一旦被前端当页面入口大量调用,抓取预算就会被无效响应吃掉。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
