站内搜索本来是方便访客找内容的功能,但如果没做限制,它也可能变成蜘蛛的迷宫。访客搜一次就关掉,蜘蛛却会把每个搜索结果地址都当成一个独立页面,一路抓下去。
为什么站内搜索页容易被抓
大多数站内搜索结果是动态生成的,地址形如 /search?q=xxx。蜘蛛顺着页面上的搜索框、热门搜索词、搜索结果里的相关推荐,很容易拼出成千上万个组合。这些页面大多内容重复、价值低,却和正常内容抢抓取预算。
自查清单
- 搜索结果页是否可抓取:用不带登录态的浏览器打开 /search?q=测试,看返回状态码和页面内容。
- 结果为空时返回什么:如果搜不到内容仍返回 200 和一堆推荐,等于给蜘蛛发了一张空头门票。
- 是否有 robots.txt 规则:确认是否已屏蔽搜索路径,且没有误伤正常栏目。
- 搜索结果页是否带 canonical:检查它是否指向自己,而不是指向首页或某个栏目页。
- 站内搜索入口是否全站可见:页脚、侧栏的热门搜索词、搜索历史链接,都是蜘蛛的入口。
- 搜索结果是否进了 sitemap:站点地图里不该出现带查询参数的搜索地址。
别忽略搜索建议接口
输入框的自动补全接口往往返回 JSON 或跳转链接,如果它也接受 GET 请求并生成页面,同样会留下抓取痕迹。检查一下这个接口有没有暴露给未登录访客。
几种常见处理方式
- 用 robots.txt 屏蔽搜索路径,例如 Disallow: /search,这是最简单的一层。
- 搜索结果页加 noindex,避免已抓取的页面进入索引。
- 把空结果和无效关键词直接返回 404 或 410,而不是 200。
- 站内搜索改为 POST 提交或前端渲染,减少可被抓取的地址。
- 如果确实希望部分搜索结果可被索引,限制在少数固定入口,比如专题聚合页。
注意别屏蔽过头
屏蔽规则写得太宽,可能把 /search-engine-optimization 这类正常文章也一起挡掉。上线前用抓取工具或日志验证几条典型地址。
看日志确认效果
规则调整后,隔几天翻一下服务器日志,看搜索引擎蜘蛛还在不在访问 /search 路径,以及访问频率是否下降。如果量没变化,可能是缓存、CDN 或者旧链接还在引流。
站内搜索是给访客用的工具,不是给蜘蛛准备的目录。把它管好,抓取预算才能留给真正的内容页。
这件事不需要复杂改造,通常一次规则调整加一次日志复查就能收敛。关键是别让它一直躺在那里没人管。