蜘蛛池里的入口页往往一批就是几百上千个,URL 是这批页面里最容易埋雷的地方。它决定蜘蛛抓到链接时怎么入队、怎么判重,也决定后面看日志时你能不能分辨出问题。规则没定好,改一次就是全站跳转的代价。
URL 结构影响的不只是好看
搜索引擎的抓取队列以 URL 为单位。同一个内容如果存在多个地址,抓取量会被摊薄;层级过深、参数过多的地址,则可能在入队后长时间排不到。入口页本身内容价值有限,它的 URL 主要承担两件事:让蜘蛛顺利访问,以及让一个页面只对应一个地址。
目录层级:两层到三层比较稳
常见做法是根目录下放一层分类,再放一层列表,入口页落在第三层:
- 根目录直放:数量一多显得杂乱,也不方便按批次管理
- 一层目录:按批次或类型分组,例如 /a/、/set1/
- 两层目录:再加一层细分,例如 /a/2024/
- 三层以上:人和蜘蛛都要多点几次,建议只留给真正要归档的内容
层级深不一定抓不到,但同一批页面的处理速度通常不齐,浅层的往往先被访问。如果你希望某一批先被看到,就把它放浅一点。
参数:能变成路径就别留在问号后面
带参数的地址容易产生组合爆炸。如果来源参数不同就生成新地址,蜘蛛会当成新页面反复抓。
- 固定参数顺序,不要同一个页面出现两种排列
- 去掉与内容无关的追踪参数,或在服务器层统一跳转
- 参数确实需要时,用 canonical 指向不带参数的版本
- 分页尽量用路径形式,如 /list/2/,比 ?page=2 更容易被稳定识别
命名:短、唯一、有迹可循
命名不需要漂亮,但要满足唯一和可判断。纯随机串(如 x7f2kd9)可以唯一,但你在日志里很难一眼看出它属于哪一批;关键词堆砌(如 seo-seo-1)则容易被当成低质页面。
- 用有意义的短标识加自增编号,例如 /a/tech-001.html
- 统一小写,单词之间用连字符,不用下划线
- 是否带结尾斜杠、是否带 .html 后缀,全站保持一致
- 同一含义不要同时出现拼音和英文两套写法
大小写与结尾符号经常被忽略
服务器区分大小写时,/Page/1 与 /page/1 是两个不同地址,会各占一次抓取。建议在服务器层做强制跳转,把大小写和结尾斜杠规范化。
同一内容只留一个地址
入口页因为套用同一模板,很容易出现标题、摘要相近而地址不同的情况。这时先处理地址层面的重复:
- 确认哪个地址是主版本
- 其他地址用 301 指向主版本,而不是让它们同时返回正常状态
- 列表页、标签页如果只是聚合,考虑是否需要被单独抓取
改 URL 结构前先想清楚代价:老地址直接返回 404,之前的抓取记录基本清零;用 301 过渡能减少损失,但也不能保证恢复到原来的状态。
几个实际会踩的坑
- 入口页 URL 里带中文:技术上可行,但编码后不好读,日志排查麻烦
- 批量生成时编号跳号或重复,导致部分地址长期没人访问
- 测试环境留下的 /test/、/demo/ 被蜘蛛抓到,占用抓取量
- URL 里带会话 ID 或时间戳,每次访问都生成新地址
落地建议
批量生成之前先把规则写下来:层级上限几层、是否带后缀、参数怎么处理、编号从几开始。规则确定后不要频繁改动,后续新增批次沿用同一套结构。这样日志里的 URL 才有可比性,你也才能从抓取数据里看出哪批页面真的被处理了。