这类问题我又碰上了一次。WordPress 5.6 之后默认暴露 /wp-json/oembed/1.0/embed 代理,蜘蛛顺着页面里的链接一路抓。日志里这个路径一天四千条,全部 404,正文抓取被挤掉一截。

第一反应是「主题在 head 里输出了 oembed discovery 链接」,验证下来不成立。

排查方向其实有限,先把可能性排一排。oembed 代理对不存在的文章返回 404,链接却仍输出在页面里;REST 接口不限匿名访问,蜘蛛可以无限组合参数;robots 没有挡 /wp-json/ 下的代理路径。

上来先确认这个路径的请求量

awk '{print $7}' access.log | grep -c 'oembed'

移除 discovery 链接输出

remove_action('wp_head', 'wp_oembed_add_discovery_links');

随后在 robots 里挡掉代理路径

Disallow: /wp-json/oembed/

剩下的就是确认正文抓取占比回升

awk '{print $7}' access.log | grep -c '^/article/'

排查用的命令都是临时敲的,没有写成脚本,事后才整理。

改完先别撤,确认这几项。oembed 请求量降到每天几十条,404 同步减少,正文页抓取量回升一成。

框架默认接口经常成为抓取黑洞,发布后看一眼日志里排前十的路径,比凭感觉猜更有效。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189