现场是这样的。站内搜索从数据库 LIKE 换成 Elasticsearch,响应快了,但一周内索引量涨了 6 万条,全是 /search?q= 开头的地址,标题里带着用户输入的词。

原因不止一个,得分开看。新搜索路由没有沿用旧的 noindex 响应头;搜索结果页的 canonical 指向自身,蜘蛛当成独立页面;搜索词联想接口把热门词铺成了静态入口,被外链带进索引。

给搜索路由补 noindex 响应头

add_header X-Robots-Tag 'noindex' always;

再往下确认搜索结果不再输出自身 canonical

curl -s 'https://www.example.com/search?q=seo' | grep -i canonical

接着在 robots 里收口搜索路径

Disallow: /search

等前面都确认过,再用移除工具清理已经进索引的结果页

site:www.example.com/search

这类问题以前遇到过,但这次的触发条件和上次不一样。

别只看报错消失,验证要多做一步。十天后 site 查询里搜索页条目从 6 万降到 400 以内,索引总量回落到改版前的水平。

换搜索后端时最容易丢的是响应头和模板里的 noindex,功能测试不会覆盖这一层,上线前要单独核。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189