结论先说:相对路径和绝对路径,搜索蜘蛛都能处理。真正决定抓取结果的,是浏览器和蜘蛛把这段路径解析成哪个绝对 URL,以及这个 URL 是否唯一、稳定、可访问。
两种写法的实际差别
蜘蛛拿到一段 HTML 后,会以当前页面的 URL 为基准,把 href 解析成完整地址,再去请求。相对路径只是写法更短,解析环节多了一步,本身不会因此降低被发现和抓取的概率。
- 绝对路径:基准固定,歧义最少,但站点迁移或换域名时容易漏改。
- 相对路径:迁移省事,却容易因为目录层级、base 标签、尾斜杠差异,解析出与预期不同的地址。
- 协议相对(//example.com/a):解析结果依赖当前页面的协议,站点同时提供 http 与 https 时,容易出现两个版本。
常见出问题的写法
1. 页面里有 base 标签,但和实际结构不一致
base 会改变所有相对链接的解析基准。入口页若套用模板,模板里带了一个指向别处的 base,正文里的相对链接就会全部指向错误目录,蜘蛛顺着抓到的往往是 404 或者不相干的页面。
2. ../ 的层级数错了
入口页通常由脚本批量生成,模板里写死 ../ 或 ../../。一旦入口页分布在不同深度的目录下,同一段模板就会把部分链接解析到上一层无关目录。日志上看起来蜘蛛来过,但抓到的都不是目标 URL。
3. 大小写与尾斜杠不一致
/List/ 和 /list/、/a 和 /a/ 在很多服务器上属于不同地址。同一目标 URL 在入口页里出现多种写法,会让蜘蛛把它当成多个候选地址,抓取机会被分散,也不利于后续判断哪一个是规范地址。
4. 路径里有空格或中文没有编码
href 里直接写空格或中文,不同解析器补全方式可能不完全一致,容易出现解析失败或指向错误地址。这类链接建议直接写成已编码的地址。
排查顺序
- 在入口页查看源码,取出一条目标链接,确认源码里到底写的是什么。
- 用浏览器控制台或在线工具,按当前页面 URL 把它解析成绝对地址。
- 把解析结果与实际能访问的地址逐字对比,重点看目录、大小写、尾斜杠、参数。
- 拿这个绝对地址去抓取日志里找,看蜘蛛是否请求过、返回了什么状态码。
- 如果日志里完全没有,回到入口页确认链接是否真的在 HTML 里,而不是脚本渲染后才出现。
更稳妥的做法
- 入口页指向目标 URL 的关键链接,优先写绝对地址,减少解析环节和歧义。
- 批量生成模板时,把域名和基础路径抽成变量,避免 ../ 写死。
- 全站统一尾斜杠规则,并在入口页保持一致。
- 不要为了省事依赖 base 标签,它的影响范围比想象中大。
- 改版或迁移后,抽几条入口页链接重新解析一遍,作为常规检查项。
相对路径本身不是问题,路径解析结果不一致才是问题。判断标准很简单:你希望蜘蛛抓的那个绝对地址,能不能在日志里稳定出现。