现场是这样的。站内搜索加了拼音匹配,用户输 beijing 也能出结果,结果页 URL 直接把拼音拼进路径,三个月后索引里多出两万多条拼音地址。
中间走过弯路,把「站内搜索框的联想词生成了大量可点击链接」当成主因,改完现象没变。
排查方向其实有限,先把可能性排一排。搜索词被拼进 URL 路径,每个拼音组合都是一个新地址;结果页没有 noindex,模板还输出了搜索词做 title;搜索结果分页没有上限,拼音加页码组合成指数级地址。
先抽样看索引里的拼音地址
site:www.example.com/search/beijing
然后统计搜索页的抓取量
awk '{print $7}' access.log | grep -c '/search/'
结果页统一输出 noindex
add_filter('wp_robots', function($r){ if(is_search()){$r['noindex']=true;} return $r; });
robots 里收口搜索路径
Disallow: /search/
恢复的判定其实很直接。索引里的拼音地址在两周内清空,搜索页抓取量降到每天几十次,正文页的抓取占比回到八成以上。
站内搜索是给用户用的,一旦允许拼词生成 URL,地址数量就没有上限,必须从模板层封住。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
