这个坑值得记一笔。站内搜索的排序里时间权重占 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。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
