站内搜索几乎是内容型站点的标配,用户输入关键词就能直达目标页面,体验确实好。但对搜索引擎蜘蛛来说,搜索页往往是全站数量最庞大、内容最单薄、地址最杂乱的一批页面。如果完全放任,蜘蛛很容易把抓取额度大把花在这些组合页上,真正需要被发现的文章反倒排到了队尾。
搜索页为什么会变成抓取陷阱
根本原因是这类页面的地址由参数驱动,而参数可以组合出近乎无限的变体。常见的情况包括:
- 关键词与关键词相互叠加,形成成千上万个结果页;
- 排序、筛选、每页条数等参数与分页参数同时出现在一个地址里;
- 空结果页仍然返回 200 状态码,蜘蛛会认为这是一个有效页面;
- 带时间条件的筛选会随时间不断生成新的地址;
这几种情况叠加之后,站点看起来像是在持续产出新页面,实际上产出的基本都是重复、低价值的聚合结果。
逐项核对的自查清单
- 搜索页是否设置了 noindex。如果希望页面能被用户访问、但不进索引,noindex 是最直接的做法,前提是页面本身不要被 robots.txt 屏蔽。
- robots.txt 是否屏蔽了搜索路径。屏蔽可以阻止抓取,但也意味着蜘蛛读不到页面里的 noindex 标记,两者不能同时生效,需要二选一。
- 站内链接是否把搜索页当导航入口。比如全站铺开的“热门搜索”“相关搜索”,会把大量参数地址暴露给蜘蛛,可以考虑改为纯前端跳转或加上 nofollow。
- 空结果页如何处理。没有匹配结果时,返回 404 或至少加 noindex,都比返回一个正常的空白列表页更好。
- 排序与视图参数是否统一。同一批内容的不同排序方式,通常没有必要各自留一个可索引地址。
- 分页参数是否被规范化。检查是否出现 page=1 与无参数版本并存、或者分页地址互相冲突的情况。
屏蔽还是 noindex:别同时用
这是实际操作中最容易出错的一点。robots.txt 屏蔽的作用是“不许抓取”,noindex 的作用是“可以抓取但不要索引”。如果某条路径被 robots.txt 屏蔽,蜘蛛根本看不到页面里的 noindex,于是页面可能因为外部链接等原因依然停留在索引里,形成“明明屏蔽了却还在”的尴尬局面。稳妥的做法是:需要保留页面给用户看,就用 noindex 并允许抓取;如果这类地址完全不需要被抓取,再考虑用 robots.txt 屏蔽。
判断标准很简单:你希望这个地址出现在结果里吗?不希望被索引,就用 noindex;不希望被访问,才用 robots.txt。
别只盯着搜索框
产生参数地址的地方远不止搜索功能,以下来源同样值得检查:
- 投放或分享链接带上的跟踪参数,例如 utm 系列;
- 会话 ID、来源标记等由程序自动追加的参数;
- 筛选与排序组合出的地址;
- 打印版、纯文本版等备用视图;
- 地区或语言切换参数。
这些地址通常内容相同,只是入口不同。处理思路是一致的:要么在服务端做规范化,要么用 canonical 指向主地址,要么直接阻止抓取。
如何验证处理效果
改动之后不要只看感觉,建议从三个地方回看数据:抓取日志里搜索页与参数地址的占比是否下降;索引状态报告里这类地址的数量是否逐步收敛;站内链接中是否还有指向参数地址的入口。可以每隔一段时间抽样几条地址,手动打开确认返回的状态码和标记是否符合预期。
站内搜索本身不是问题,问题是把它当成内容页来对待。把它当成工具页来看待,限制它的可抓取范围,蜘蛛的访问额度才能更多流向真正需要被发现的内容。