报错是这么冒出来的。侧栏热门文章按浏览量自动生成,其中三篇是付费墙预览页,插件给它们加了 noindex。全站每篇文章都链过去,蜘蛛每天反复抓这几条无效地址。Search Console 里它们一直是已排除。

中间走过弯路,把「noindex 写在插件里,主题侧栏拿不到这个状态」当成主因,改完现象没变。

原因不止一个,得分开看。内链模块只按浏览量排序,没有过滤 noindex 状态。少数情况下是预览页返回 200 且正文可读,蜘蛛会持续重抓。

还有一种情况,热门榜更新频繁,同一批 URL 反复出现在新页面里。

动手时先导出被 noindex 的文章列表

wp post list --post__in=$(wp db query "SELECT ID FROM wp_postmeta WHERE meta_key='_yoast_wpseo_meta-robots-noindex' AND meta_value='1';" --skip-column-names | paste -sd,) --field=ID

再往下在侧栏查询里排除这些 ID

add_filter('widget_posts_args', function($a){ $a['post__not_in'] = array(101,102,103); return $a; });

接着确认预览页仍不可索引

curl -s https://www.example.com/preview/101/ | grep -i 'noindex'

末了观察这些地址的抓取频次

grep -c '/preview/' /var/log/nginx/access.log

怎么算真的好了,看的是同一批现象。侧栏不再输出预览页后,这三条地址的日抓取从三百次降到个位数,其余热门文章的抓取量没有变化。

补一句。内链是投票,投给一个明确不参与索引的页面没有任何收益,模块上线前先按索引状态过滤一遍。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189