入口页铺好之后,很多人只关心内容够不够、链接够不够,却忽略了 URL 本身也是蜘蛛读取的第一个信号。同一个页面,换一种 URL 写法,蜘蛛愿意爬的深度、判断重复的难度、以及抓取预算的消耗都会不一样。URL 结构不是审美问题,它更接近一张给爬虫看的路线图。
URL 结构到底影响了什么
对入口页来说,URL 主要承担三件事:告诉蜘蛛这条地址是不是新的、判断它和已有地址是不是同一个页面、以及估计这条地址背后还有多少可爬的内容。前两件决定抓取是否浪费,第三件决定蜘蛛愿不愿意顺着往下走。
如果同一份内容能用五条不同地址打开,蜘蛛看到的就是五个候选页面,而不是一个。它不会替你合并,只会按自己的规则挑一个,剩下的抓取次数基本等于白花。
层级深度:扁平不等于全铺在同一层
常见说法是“层级越浅越好”,这话只说对了一半。层级浅确实让蜘蛛少走几步,但如果所有入口页都堆在根目录下,同一层会出现成百上千条地址,列表页的链接密度过高,反而让单条地址获得的关注被稀释。
- 入口页建议控制在三到四层以内,超过四层后蜘蛛回访意愿通常明显下降。
- 层级不是越少越好,关键是每一层都要有清晰的分组逻辑,让蜘蛛能从列表页自然走到详情页。
- 目录名尽量用有含义的英文或拼音,避免 a1、tmp、page2 这类无信息量的命名。
参数:哪些能留,哪些必须清
带参数的 URL 并不天然有错,问题在于参数的组合数量。蜘蛛无法判断参数空间有没有边界,遇到看似无限的组合时,往往会选择少抓或者不抓。
建议保留的参数
- 分页参数,如 page、p,但要有明确上限,并且每页都有稳定内容。
- 分类或筛选参数,前提是筛选结果页数量有限且内容确实不同。
建议从源头去掉的参数
- 会话 ID、随机数、时间戳、点击来源埋点,这些会让同一条内容裂变出无数地址。
- 跟踪参数如 utm_source 之类,如果只用于站外投放,尽量不要让它们出现在站内链接里。
- 排序参数,如 sort=price、order=desc,除非排序结果本身有独立价值。
判断标准很简单:把参数去掉之后,页面内容是否发生变化。若不变,这个参数就不该出现在蜘蛛能看到的链接里。
静态化:结尾是 .html 还是不带后缀
“.html 结尾更利于收录”这种说法没有统一依据。伪静态和纯动态路径在抓取层面差别不大,真正有影响的是地址是否稳定、是否唯一。相比之下,发布后频繁改动路径才是更大的风险。
如果使用伪静态,注意服务器端要有对应的重写规则,并且保证带参数的原地址能 301 到静态地址,而不是两个地址都返回 200。
几个容易被忽略的一致性细节
- 大小写:多数服务器区分大小写,/Seo/ 和 /seo/ 会被当成两条地址,统一用小写最省事。
- 结尾斜杠:带斜杠与不带斜杠要二选一,另一版本 301 过去。
- 默认首页:/index.html 与根目录不要同时可访问,让其中一个跳转。
- 中文路径:建议统一用拼音或 ID,若必须用中文,全程保持同一种编码方式,不要手动混写。
- 域名版本:www 与非 www、http 与 https 只保留一个版本对外输出链接。
发布前的检查清单
- 这条地址在站内是否只出现一次,有没有其他路径指向同一内容。
- URL 里是否残留会话、埋点或排序参数。
- 层级是否超过四层,上一层是否有可被蜘蛛抓到的列表页。
- 大小写、尾斜杠、域名版本是否与站内其他链接一致。
- 地址发布后一段时间内是否保持不动。
URL 结构属于那种改起来麻烦、但一次做对就长期受益的基础工作。它不会让蜘蛛突然多抓几倍,但能减少无效抓取,把有限的预算留给真正想被发现的页面。做蜘蛛池的人通常不缺地址数量,缺的是让每一条地址都被准确识别的清晰度。