入口页的链接写成 /go/123 还是 https://example.com/go/123,是搭建蜘蛛池时经常被问到的问题。从搜索引擎的解析逻辑看,只要最终拼出来的绝对地址一致,两种写法没有本质区别;但实际运维中,相对路径出问题的概率明显更高,排查起来也更绕。下面把常见情况拆开说。
相对路径本身没问题,前提是基准地址正确
搜索引擎解析 HTML 时,会把相对路径和当前页面的最终 URL 拼在一起,得到要抓取的绝对地址。这里的“最终 URL”指的是经过所有跳转之后、真正返回 200 的那个地址,而不是你以为的入口地址。所以凡是会改变地址的行为——301/302 跳转、末尾斜杠规范化、大小写重写、多个域名指向同一套页面——都会连带改变相对链接的解析结果。
最容易踩坑的几种情况
- 入口页 302 跳到另一个域名:源码里写 /target/a,会被解析到跳转后的域名下,而不是入口页所在的域名。
- 模板里带了 base 标签:base href 一旦指向别处,整页所有相对链接都会跟着变,包括你没留意的那部分。
- 伪静态或重写规则不规范:/go/123 被改写成 /go/123/ 或附加参数,相对路径的拼接基准就变了。
- 同一套模板复用到不同层级目录:从 /a/ 和 /a/b/ 两个入口页输出同一段相对链接,解析出的绝对地址并不一样。
绝对路径在实际运维里的好处
写成完整的 https:// 开头地址,好处不是“更利于抓取”,而是省事:日志里的 URL 和页面源码里的 URL 能直接对上,不用反推当时的基准地址;模板复用到任何目录都不出错;跨站、跨子域的链接不会因为跳转变形。对于需要长期运行、经常调整链接结构的人来说,这种稳定性比少打几个字符更重要。
协议相对写法要谨慎
//example.com/a 这种写法会继承当前页面的协议。入口页是 http、目标站只支持 https,就可能多出一次跳转,而每一次跳转都是一个可能中断的环节。直接写完整协议头更省心。
结尾斜杠和参数也要统一
同一个目标站,有人写 /a,有人写 /a/,有人带跟踪参数,有人不带。这些在搜索引擎看来可能是不同地址,抓取结果会分散。入口页模板里最好统一一种形态,不要让不同批次的模板各写各的。
怎么验证解析结果对不对
- 用不执行 JS 的抓取工具或 curl 拉一遍入口页,看返回的 HTML 里链接长什么样。
- 把页面地址和源码里的链接一起做 URL 解析,确认拼出来的绝对地址就是你要的。
- 看服务器日志里实际被请求的地址与预期是否一致;如果大量出现 404 或全部落到首页,基本就是基准地址错了。
- 入口页存在跳转、CDN 改写、base 标签时,上述步骤要重复验证,不要只测一次就上线。
一条实用规则
如果入口页结构稳定、域名固定、没有跳转,用相对路径完全可以;只要涉及多域名、跳转、模板复用、CDN 改写中的任意一项,就统一写绝对路径。这不是为了讨好搜索引擎,而是让“你以为的链接”和“蜘蛛实际请求的链接”尽量保持一致。
链接写法不会决定页面能不能被收录,但它决定了出问题时你要花多少时间去定位。把变量减少到最少,通常比事后从日志里倒推更划算。