做入口页时,很多人关心链接放几条、放在什么位置,却很少在意链接写成相对路径还是绝对路径。这两种写法对浏览器来说差别不大,但对搜索蜘蛛解析目标 URL 会有实际影响。
相对路径是怎么被拼成完整 URL 的
搜索蜘蛛遇到 href="/a/b.html" 或 href="b.html" 这类相对路径,会拿当前页面的 URL 作为基准去拼接。拼接规则跟浏览器一致:以斜杠开头的从域名根开始,不以斜杠开头的从当前目录开始。
所以同一段链接代码,放在 https://www.example.com/list/index.html 和 https://www.example.com/list/sub/ 下,拼出来的结果可能完全不同。入口页如果存在多个路径层级,写成绝对路径能避免这类偏差。
几种容易拼错的情况
页面里有 base 标签
如果入口页头部写了 base 标签,那么所有相对链接都会以 base 里的地址为基准,而不是当前页面地址。蜘蛛和浏览器都会遵守这个规则。一旦 base 写错,或者复制模板时忘了改,整页链接可能全部指向错误的域名或目录。
结尾斜杠带来的目录判断
https://www.example.com/list 和 https://www.example.com/list/ 在解析相对链接时被当作不同层级。前者把 list 当成文件,相对链接从上一级目录开始拼;后者把 list 当成目录,相对链接从 list/ 下开始拼。入口页如果依赖相对路径,最好确认自己用的是哪一种形式。
协议相对 URL
href="//www.example.com/a.html" 这种省略协议的写法,会继承当前页面的协议。HTTP 和 HTTPS 混用或迁移期间,可能导致蜘蛛抓到的是另一个协议版本的 URL,最终被当成不同地址处理。
href 里的多余空格与换行
属性值中间混入空格、制表符或换行时,不同解析器处理方式不完全一致,轻则 URL 被截断,重则拼出一个不存在的路径。入口页如果由程序批量生成,建议在输出环节做一次去空格和转义检查。
绝对路径是不是一定更好
对于蜘蛛池入口页这类需要精确控制目标 URL 的场景,直接用完整绝对路径通常更稳妥。它不受 base、目录层级、结尾斜杠影响,链接指向哪里一目了然,排查日志时也更省事。
相对路径并非不能用。站内导航、同目录资源用相对路径反而方便维护,换域名时也不用逐条修改。关键在于入口页输出的链接是否可预期、是否和实际目标一致。
相对路径的问题往往不是抓不到,而是抓到了你没想到的那个 URL。
实操检查清单
- 入口页模板里是否残留了不该出现的 base 标签
- 目标链接是否混用了相对路径和绝对路径,导致解析基准不一致
- 页面 URL 结尾有没有斜杠,是否和相对链接的写法匹配
- 是否出现 // 开头的协议相对链接,协议版本是否统一
- 链接中的大小写、多余参数是否和实际目标一致
- 程序生成的 href 是否包含空格、换行等异常字符
怎么快速验证
可以先在浏览器里查看页面源码,把相对链接按规则手动拼一遍,再和服务器日志里蜘蛛实际请求的 URL 对照。两边一致说明写法没问题;出现偏差时,优先把入口页的目标链接改成绝对路径,问题通常会明显收敛。
如果入口页数量较多,不建议一次全改。先挑几个路径层级不同的页面做样本,确认解析结果稳定后,再按模板统一调整,这样也方便对比改动前后的抓取记录。