先说结论
只要链接最终能被解析成一个完整、可访问的地址,相对路径和绝对路径对搜索蜘蛛的发现没有本质区别。蜘蛛抓到一个页面后,会把页面里的链接按当前页面的地址拼接成绝对 URL,再进入抓取队列。真正影响发现的不是写法本身,而是拼接结果对不对。
所以问题应该换成:你写的链接,蜘蛛解析出来的地址,和你想要的地址是同一个吗?
两种写法在解析上的差别
- 绝对路径:直接写全 https://example.com/a/b.html。解析不依赖入口页自身的地址,入口页被镜像、被放到别的域名、通过代理访问,链接指向都不会变。
- 相对路径:解析依赖入口页的最终地址,也就是重定向之后的地址,不是最初请求的地址。入口页如果本身是 301/302 跳转过去的,相对链接会按跳转后的地址来拼,很容易指偏。
容易拼错地址的几种典型情况
- 入口页地址不以斜杠结尾。像 /spider/page1 这种看起来像文件的路径,相对链接 a.html 会被解析成 /spider/a.html,而不是 /spider/page1/a.html。
- 模板里带了 base 标签。只要页面里有 base href,所有相对路径都按它来拼,而很多站长并不知道自己用的模板里带了这一行。
- 路径大小写。服务器为 Linux 环境时 /A.html 和 /a.html 是两个不同地址,写错一个就是 404。
- 路径里带中文、空格或未编码的特殊字符。相对路径拼接之后更容易变成非法 URL,蜘蛛可能直接跳过。
- 协议相对路径。//example.com/a 在 https 页面解析为 https,在 http 页面解析为 http。入口页如果 http 和 https 都能访问,同一目标会以两个地址出现,白白分散抓取配额。
哪些场景建议直接用绝对路径
- 入口页会通过多个域名、多个 IP 或不同 CDN 节点被访问,写法不统一时容易解析出多个版本的目标地址。
- 入口页会被别站引用或采集,解析环境不完全可控。
- 目标站自身做了强制 https 或 www 跳转。这时直接写跳转后的最终地址,可以少一次中间跳转,路径更短。
路径写法不会让蜘蛛「多抓」,它只决定蜘蛛拿到的地址对不对。地址错了,后面所有关于抓取和收录的工作都是白跑。
入口页链接写法自查清单
- 随手挑几个入口页,把里面的相对链接手动拼一遍,看拼出来的地址是不是你打算让它抓的那个地址。
- 确认页面里有没有 base 标签,有的话检查 href 的值是否符合预期。
- 看服务器日志或抓取诊断工具里,蜘蛛请求的目标地址是不是你提交的那些,还是出现了一批看起来像路径拼错的 404。
- 同一目标链接在入口页里尽量只用一种写法,不要相对、绝对、协议相对混用。
- 目标链接尽量直接指向最终地址,少用中间跳转,跳转链越长,中间任何一环出问题都会断掉。
最后提醒一句:链接被蜘蛛发现,只是走到了第一步。发现不等于抓取,抓取也不等于收录,路径写法解决的是第一步的准确性问题,别把它当成其他环节的替代方案。