做电商或者内容量较大的站点时,筛选、排序、翻页几乎都是标配。点一下“价格从低到高”,URL后面就多一个参数;再勾两个颜色、一个尺寸,链接就变成一长串。用户用着方便,但对搜索蜘蛛来说,这些链接意味着理论上无穷无尽的URL。抓取配额是有限的,蜘蛛把时间花在这类组合页上,真正希望被收录的栏目页和详情页反而排不上队。
先算一笔账:组合是怎么膨胀的
假设一个类目下有 6 种颜色、5 个尺寸、4 个价格区间、3 种排序方式,再加上分页。理论上可组合出的URL数量是这些维度相乘,再乘上分页数,轻松到几千甚至上万。而其中真正有人搜索、有人看的,可能不到几十个。多出来的那部分,基本就是纯消耗抓取资源的组合页。
把URL分成三类来对待
- 值得收录的:有明确搜索需求、内容相对稳定的筛选组合,比如某个商品词与某个属性词的固定搭配。
- 可以不收录但允许抓取的:纯排序、纯视图切换、临时筛选组合。这类页面让用户能用,但不必进索引。
- 没必要让蜘蛛进来的:会话ID、追踪参数、按点击生成的排序、站内搜索结果页等。
几种常见做法与各自的边界
- 排序参数不生成独立URL。排序用前端交互或表单提交完成,地址栏不变化,链接也就不会扩散。代价是分享链接时排序状态会丢,多数站点可以接受。
- 筛选组合不主动给链接。筛选结果页可以被访问,但不必在每个列表页里都输出成百上千个筛选链接。改为折叠、按需加载,或者只输出该维度下最有价值的几个入口。
- canonical 指向基础类目页。对排序、视图切换、不重要的筛选组合,可以让它们 canonical 到无参数的类目主URL。注意是“指向别人”,不要错误地自引用,也不要让两个页面互相指。
- robots.txt 只用来挡,别和 noindex 叠加。如果某类URL被 robots.txt 屏蔽,蜘蛛抓不到页面内容,也就读不到页面里的 noindex。想不进索引就用 noindex,想省抓取就屏蔽,二选一即可。
- 分页给明确的上一页、下一页链接。早期搜索引擎支持的 rel next/prev 已不再作为收录信号,做成普通的可点链接更稳,同时避免“最后一页”直接跳进无限滚动。
- 观察日志再决定。服务器日志里蜘蛛抓的是哪些参数组合、频率多高,比凭空猜测可靠。发现大量带同一参数的抓取,就针对那个参数处理。
入口设计比事后清理更重要
很多站点的问题不在筛选功能本身,而在于把筛选链接铺在了蜘蛛最容易爬到的地方:首页、类目头部、页脚。这些位置的链接被发现概率高,一旦铺开,等于主动邀请蜘蛛去爬组合页。把重要筛选入口放在类目页中部,用更少、更精准的维度,通常更省事。
一个简单的判断标准:如果这个URL既没有自然搜索需求,也没有外部链接指向它,那它多半不该出现在导航和批量内链里。
上线前可以过一遍的检查
- 类目页默认状态是否只有一个规范URL,没有多余参数;
- 排序、视图切换是否产生了可被独立索引的URL;
- 筛选链接是否被批量输出到全站公共区域;
- canonical 是否指向了正确目标,且不存在互相指向;
- 被 robots.txt 屏蔽的参数是否同时又写了 noindex;
- 日志中是否存在同一参数的反复抓取。
分面导航不是要一刀切掉,而是把有限的可抓取URL留给真正有价值的那部分。收敛数量、明确入口、按日志调整,通常比反复提交站点地图更实在。改动之后给搜索引擎一段时间观察,效果以实际抓取和收录数据为准。