在蜘蛛池里,入口页的 URL 往往是最先被蜘蛛读到的信息之一。链接文本和锚文本可以被修饰,但 URL 的结构相对稳定,蜘蛛会用它判断页面之间的层级关系、是否为重复内容,以及值不值得继续跟进。很多“蜘蛛来过却不抓”的情况,问题就出在 URL 这一层。
一、目录层级:扁平一些更省事
同样的内容放在 /a/b/c/d/page.html 和 /page-1234.html,蜘蛛的处理成本并不相同。层级越深,蜘蛛从入口爬到目标页要经过的跳转越多,中途断掉或者不再跟进的可能也越大。
对入口页来说,比较务实的做法是控制在两到三层,同一批入口页尽量保持相近的深度。
- 尽量让入口页从少数几个上级页面就能到达,而不是层层嵌套;
- 不要把入口页放在只有分页链接才能抵达的位置;
- 目录名用简短、可读的词,避免用日期加随机串堆出四五层。
二、查询参数:URL 数量暴涨的主要来源
参数本身不是问题,问题是参数组合。一个带 ?id= 的页面通常没问题,但当页面同时接收排序、分页、筛选、来源追踪等参数时,同样的内容会派生出一大批不同地址,抓取机会被摊薄,去重压力也随之上升。
常见的几类需要留意:
- 追踪参数:utm_source 之类,对内容没有影响,应统一处理;
- 会话或用户标识:一旦进入 URL,等于给每个访客生成一个新地址;
- 排序与筛选参数:内容只是顺序不同,容易被当成多份页面;
- 空参数与默认值:?page=1 和不带参数往往指向同一内容。
处理方式无非几种:能用静态路径的改用静态路径;必须保留参数的,用 canonical 指明代表页;对确实无意义的参数,在服务器层拒绝,而不是放任蜘蛛自己判断。
三、命名习惯:可读、稳定、别乱改
入口页批量生成时最容易出现纯随机字符串,例如 /x7f3a9b2.html。这类 URL 能被抓取,但从蜘蛛角度看没有任何语义线索,也不利于人工排查。相对好一些的做法是用短词加编号,例如 /topic-0128.html,既保留可读性,又便于批量管理。
URL 里的关键词对排序的作用有限,但对可读性和排查效率有实际帮助,不必为了堆词把地址拉得很长。
四、一致性:大小写、结尾斜杠与协议
下面这些差异,在服务器看来可能是同一个文件,在蜘蛛看来却可能是两个地址:
- 大小写:/Page.html 与 /page.html;
- 结尾斜杠:/entry 与 /entry/;
- 协议与主机名:http 与 https、带 www 与不带 www;
- 带默认索引文件:/index.html 与 /。
建议在服务器层做统一跳转,只保留一个版本,其余全部 301 过去。跳转规则一旦确定就不要再反复调整,避免已经积累的链接全部失效。
五、一份可执行的整理清单
- 统计现有入口页 URL 的层级分布,找出深度明显偏高的部分;
- 导出一段时间的访问日志,按 URL 去掉参数后聚合,看有多少地址指向同一内容;
- 对重复地址确定一个代表 URL,其余用 301 或 canonical 收敛;
- 检查是否存在会话、追踪参数进入链接的情况,从生成逻辑上切断;
- 确认大小写、斜杠、协议三处的一致性,并写进模板规范;
- 后续新增入口页时,按同一套命名和层级规则生成,不再临时起意。
常见误区
有人把 URL 结构当成可以事后随便补的东西,先把页面铺出去,再想整理。实际上 URL 一旦被抓取并进入索引,再改动就要承担跳转和重新发现的成本。与其事后收拾,不如在生成入口页的模板里就把规则定下来。
另外,也不要指望靠 URL 命名本身去“催”蜘蛛。它只是让页面更容易被理解、被去重、被稳定引用,真正的抓取情况仍取决于站点整体状态、内容更新与链接结构等多方面因素。