先把当时的情况摆出来。安全加固时把 /wp-admin/ 整段拉黑,前台的无刷新加载走 admin-ajax.php,蜘蛛抓列表页时拿到的全是 403 空壳。
真正麻烦的地方在于,几个原因的现象几乎一样。规则按路径前缀匹配,admin-ajax.php 被一起命中。另一种情况是放行名单只加了 Googlebot 的 UA,Bingbot 仍被挡。
不容易想到的是,WAF 在 CDN 层生效,源站日志里看不到这些 403。还有一种情况,AJAX 接口没有做蜘蛛降级,无 JS 时页面就是空的。
直接请求接口看返回码
curl -s -o /dev/null -w '%{http_code}' https://www.example.com/wp-admin/admin-ajax.php
再往下用蜘蛛 UA 复现
curl -s -A 'Mozilla/5.0 (compatible; Bingbot/2.0)' https://www.example.com/wp-admin/admin-ajax.php -o /dev/null -w '%{http_code}'
只封 admin 目录不封 ajax 文件
location ^~ /wp-admin/ { deny all; }
给列表页加服务端渲染兜底
add_action('wp_ajax_nopriv_load_more', 'load_more_posts');
当时还开着另一个排查窗口,两边日志对照着看才定位到。
恢复的判定其实很直接。蜘蛛 UA 请求 admin-ajax 返回 200,列表页源码里能看到文章标题,抓取量恢复到此前的水平。
按目录整段拉黑最容易误伤接口文件,规则要精确到路径,别用前缀一刀切。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
