先把当时的情况摆出来。相关文章模块用了 ORDER BY RAND(),每次请求推六篇不同的文章,蜘蛛一周来三次,抓到的是十八篇互不相同的链接,正文页一条稳定内链都没有。
把日志和配置对完,能解释这个现象的基本就这几处。随机排序让页面每次输出不同链接,内链结构不稳定。另一种情况是随机查询还带走了数据库性能,页面 TTFB 波动明显。
不容易想到的是,推荐池按标签随机,弱相关文章被推到正文下方。还有一种情况,模块没有缓存,蜘蛛连续抓同一页拿到三种结果。
连续请求两次比对链接差异
for i in 1 2; do curl -s https://www.example.com/post-1/ | grep -o '/archives/[0-9]*' | head -3; done
定位随机排序的查询
grep -rn 'ORDER BY RAND' wp-content/themes/
接着改成按相关度取固定六篇并缓存
SELECT ID FROM wp_posts WHERE post_status='publish' ORDER BY comment_count DESC LIMIT 6;
给模块加 6 小时对象缓存
wp cache flush
怎么算真的好了,看的是同一批现象。同一篇文章两次抓取拿到的推荐链接完全一致,正文页的稳定内链从零变成六条,抓取深度指标开始下降。
这里还有个坑。推荐位是内链结构的一部分,随机化只适合用户侧个性化,服务端输出必须稳定可复现。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
