大部分站点都有站内搜索框。对访客来说它是便利功能,对抓取来说却常常是一个被忽略的出口:搜索会按关键词生成几乎无限的地址,这些页面内容重复、状态各异,还能顺着链接被一层层抓下去。等你注意到时,抓取预算已经被搜索结果页消耗掉一大块。这篇内容整理一份站内搜索的自查思路,帮你把这个入口管起来。
站内搜索结果页为什么容易出问题
- 地址空间接近无限:每个关键词、每种排序方式都能生成一个独立地址,蜘蛛只要在框里试几个词,就能顺着结果页上的链接继续扩散。
- 内容重复度高:同一批文章会在不同关键词下反复出现,页面主体只有几个词的差别,对访客价值有限,对抓取却是实打实的开销。
- 空结果页数量大:拼写错误、随机字符、过期词都会产生零结果页面,这类页面既没有内容,也没有明确的状态提示。
- 结果页再挂内链:搜索结果里通常带着大量指向详情页的链接,等于给蜘蛛开了一条绕开栏目结构的捷径。
自查清单
- 站内搜索用的地址是什么形式?是 /search?q= 这类动态参数,还是伪装成静态路径?先确认它的地址规律。
- 搜索结果页当前返回什么状态码?空结果时是否仍然返回正常状态,还是正确地给出提示并保留 200?
- 结果页有没有设置 noindex?或者是否已经被 robots.txt 整体拦截?两者只能选一种,原因见下文。
- 搜索结果页的 title 与描述是否会随关键词变化?如果会,说明它更像一个可索引的内容页,需要重新考虑定位。
- 有没有分页或“加载更多”?分页地址是否又能被继续抓取?
- 搜索框是否出现在每个页面的头部,导致每个被抓页面都多出一条通往搜索的入口?
常见处理方式与取舍
方案一:用 robots.txt 整体拦截
在 robots.txt 中禁止抓取搜索路径,能最快止住扩散,适合搜索结果页量大、且确认不需要被索引的站点。代价是蜘蛛再也看不到这些页面上的任何指令,所以这个方案只能单独使用。
方案二:在页面层面做处理
允许抓取,但在搜索结果页输出 noindex,同时在页面上减少结果条目里的内链数量,或者把结果链接改为跳转形式。这样做的好处是蜘蛛仍能读到指令,判断更明确。
注意:robots.txt 禁止抓取与页面 noindex 不要同时使用。如果蜘蛛被规则挡在门外,它就看不到页面里的 noindex,页面依然可能因为其他站点的链接而被索引。
方案三:收敛入口
把搜索框从每个页面的公共模板里收回来,只在首页、栏目页和专门的搜索页出现;页面底部不主动输出“热门搜索”之类会批量生成地址的链接。入口少了,扩散速度自然会降下来。
日志里怎么确认效果
调整之后,去看一段时间的抓取日志:统计带搜索参数的地址占比,看它是否在下降,同时观察内容页的抓取次数有没有回升。如果搜索结果页的访问量仍然很高,说明还有别的入口在放行,比如站内推荐模块、历史提交的站点地图,或者外部链接直接指向了搜索地址。
站内搜索本身不是坏东西,问题在于它默认对所有人、所有爬虫开放。把它当成一个需要单独规划的功能模块,明确哪些地址允许被抓、哪些只给访客用,抓取预算才不会被这类页面悄悄吃掉。