这个坑值得记一笔。站内搜索的排序里时间权重占 0.4,同一个关键词每隔一小时刷新,前十条的顺序都会变。蜘蛛一周对同一个搜索地址抓了五次,索引里的摘要跟着换了五版,用户搜同样的词也找不到上次那条。

刚开始盯着「列表没有稳定的次级排序键 时间相同的记录顺序随机」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。排序里混了随机扰动 每次查询的打分不完全一致;结果页只缓存 60 秒 抓取时间不同就拿到不同列表;搜索页没有 noindex 每次变化都被当成内容更新。

连续请求两次比对结果

curl -s 'https://www.example.com/?s=nginx' | md5sum

去掉排序里的随机因子并补次级排序

$sort = ['_score' => 'desc', 'post_id' => 'desc'];

给结果页加十分钟缓存

add_header Cache-Control 'public, max-age=600';

给搜索页补 noindex 标签

<meta name="robots" content="noindex,follow">

怎么算真的好了,看的是同一批现象。两次请求返回的 HTML 完全一致,日志里同一搜索地址的抓取频率回到每天一次。

这里还有个坑。搜索页本身不该进索引,排序稳定只是减少蜘蛛空跑,真正的解法还是 noindex。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189