这类问题我又碰上了一次。装了前台搜索和无限加载之后,日志里 /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 接口是给脚本用的,一旦被前端当页面入口大量调用,抓取预算就会被无效响应吃掉。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189