为什么站内搜索和筛选会产出海量 URL
站内搜索、筛选、排序、分页这几种功能,本质上都是“在同一批数据上做不同切片”。每个切片对应一个可访问的 URL,参数一旦组合起来,数量会迅速超出预期。
常见的参数形态包括:搜索词(?q=)、筛选属性(?color=&size=)、价格区间、排序方式(?sort=price_asc)、分页(?page=),以及筛选与排序叠加的复合参数。爬虫在页面上发现这些链接后,会顺着组合继续往下爬,很快就能生成成千上万个 URL。
这些 URL 里,真正有价值的通常是少数——比如某个稳定搜索量较大的属性组合;大量的空结果页、单结果页、只改变排序的页面,价值很低。
先分类,再决定拦不拦
治理之前先分三类,处理方式完全不同:
- 有稳定需求的组合:例如“红色连衣裙”“500 元以下耳机”这类确实存在搜索行为的属性组合,可以保留在索引里,甚至单独优化标题与内容。
- 用户自定义组合:任意关键词、任意参数叠加产生的结果,通常没有稳定需求,不值得长期占用索引。
- 空结果与无意义参数:搜索无结果页、只改变排序方式的页面,基本没有收录价值。
分类依据不是“技术上好不好处理”,而是“这个 URL 对应的页面,有没有人会真的去找,找到了有没有用”。
抓取和收录要分开处理
这是最容易被忽略的一点:robots.txt 只是拦抓取,不是删索引。搜索引擎被拦住之后,读不到页面上的 noindex,已经进入索引的 URL 可能长时间留在那里,只显示一句“因 robots.txt 无法提供描述”。
所以顺序通常是:
- 如果目标是不收录,先允许抓取,用 noindex 让搜索引擎读到并移除。
- 确认页面从索引消失后,再考虑是否用 robots.txt 拦截抓取,节省抓取预算。
- 如果这个 URL 从一开始就没被收录、也不希望被抓,直接 robots.txt 拦截即可。
顺序反了,容易出现“拦了大半年,索引里还挂着”的情况,而且这时你没法用 noindex 解决,因为页面根本读不到。
筛选页还可以用 canonical 收敛
如果筛选结果页和主分类页内容高度相似(比如只是把同一批商品换了顺序),可以用 canonical 指向主版本,让权重集中过去。但如果筛选页有独立内容、有搜索量,canonical 指向主分类页反而浪费机会,要按页面实际情况判断。
另外要注意,Google 的 URL 参数工具早已下线,现在没有“一键忽略某类参数”的设置,主要靠链接控制、robots、noindex 和 canonical 组合使用。
从源头减少 URL 的产生
- 站点搜索页:默认加 noindex,并且不要让搜索结果页出现在 sitemap 和内链里。
- 筛选维度:只开放少数几个有搜索量的维度,其余维度可以改为前端筛选(不改变 URL)或表单提交。
- 排序参数:排序不产生新内容,可以统一 canonical 到默认排序,或干脆不输出可抓取链接。
- 分页:只保留前几页的可抓取链接,更深的页码通过“加载更多”或直接不输出链接。
- sitemap:只放你希望被收录的 URL,不要把全站参数组合塞进去。
推进时的几个提醒
- 先看数据再动手:搜索控制台的抓取统计和“网页”报告能告诉你哪些参数 URL 真的被抓了、被收录了。
- 别一次全堵:有流量的参数页先保留,只处理明显无价值的组合。
- 收敛是渐进的:改完之后抓取频次和索引状态都需要时间变化,通常要观察几周。
- 没有“一定收录”或“一定移除”的保证:以上操作只是减少无价值 URL 的抓取与收录机会,最终由搜索引擎判断。