站内搜索页和筛选页,通常是站点里数量最多、增长最快的一类 URL。用户点几下就能生成一个新地址,爬虫顺着内链也很容易一路抓下去。要不要让搜索引擎收录这些页面,很多站点并没有明确结论,结果往往是索引里堆了大量低价值地址,真正希望被看到的页面反而被稀释。
先分清两类自动生成的页面
一类是站内搜索结果页,地址里带查询参数,比如 /search?q=关键词。另一类是列表筛选页,比如在商品或文章列表上叠加颜色、价格、排序、分页等条件后产生的 ?color=red&size=m&sort=new。前者内容随查询词变化,后者随参数组合变化,两者共同点是:URL 由程序批量产生,页面之间的差异可能非常小。
放开收录的主要代价
- 组合爆炸。几个筛选条件相乘,就能产生成百上千个地址。收录如果放开,索引规模会快速膨胀,而大部分组合并没有真实的搜索需求。
- 重复内容。同一批结果用不同排序、不同参数展示,正文高度相似。搜索引擎需要在多个近似页面中做取舍,收敛过程会消耗额外时间。
- 抓取消耗。爬虫把时间花在这些页面上,留给其他新内容或更新内容的抓取次数就会变少,收录速度可能因此变慢。
判断该留还是该收,看三点
- 是否有独立搜索需求。像“某城市某品类”这类筛选结果,如果用户确实会直接搜索,保留一个稳定的落地页是有意义的;纯排序、纯分页参数通常没有这个价值。
- 内容是否稳定。参数生成的结果如果长期不变、有固定标题和摘要,可以视作正常页面;如果只是临时查询结果,页面内容随用户输入而变,就不适合进入索引。
- 是否可被穷举。能被穷举的组合数量可控,可以挑出少数有代表性的页面;组合数量不可控时,优先收口。
收口的几种做法
常见手段有三种,但适用场景不同。用 noindex 时,页面仍需要能被爬虫抓取,否则标签看不到,收口不会生效。用 robots.txt 屏蔽时,URL 不再被抓取,但已经收录的页面不会因为屏蔽而立刻消失,反而可能因为看不到 noindex 而长期留在索引里。用 canonical 时,是把参数页指向对应的主页面,属于“合并信号”而不是“拒绝收录”。
如果页面已经被收录,想让它退出索引,通常先放开抓取、加上 noindex,等确认不再出现后再考虑用 robots.txt 减少抓取压力,顺序反了容易卡住。
除此之外,还可以从链接侧减少入口:筛选控件尽量用表单或按钮触发,不要生成大量可被跟随的静态链接;站内搜索入口加在显眼位置即可,不必把每个查询结果都做成可抓取的链接。
调整之后怎么观察
改动不会立刻反映在索引里。可以分几步看:先确认参数页是否仍被抓取,再观察索引覆盖中相关 URL 的数量变化,同时留意站内有效页面的抓取次数是否回升。观察周期通常以周为单位,期间不要频繁改动规则,以免判断失去参照。收录数量本身不是目标,让有内容、有需求的页面被稳定发现,才是这套取舍的意义。