常见问题

蜘蛛池入口页的目标链接写成相对路径,搜索蜘蛛解析出来的 URL 会对吗

入口页里的目标链接常常直接复制地址栏,但写成相对路径时,蜘蛛需要用当前页面地址去拼接。基础拼接规则是公开的,结果却取决于入口页部署在哪个域名、哪层目录、有没有 base 标签。本文拆解三种常见写法的解析差异,并给出一份可以逐条执行的自查清单。

常见问题

蜘蛛池入口页的目标链接写成相对路径,搜索蜘蛛解析出来的 URL 会对吗

相对路径和绝对路径,差的不只是写法

对搜索蜘蛛来说,页面里出现的链接文本只是一个线索。它要先把这个线索拼成一个完整的 URL,才能进入后续的抓取队列。相对路径本身不含域名,蜘蛛必须用当前页面的地址作为基准去拼接。拼接规则是公开标准,并不神秘,但入口页的部署方式一旦有变化,拼出来的结果就可能和你预期的完全不是同一个地址。

需要先说明一点:链接能不能被正确解析,只影响“目标 URL 是否被发现”。被发现不等于被收录,这一点在后面的排查里要始终分开看。

三种常见写法,解析结果各不相同

  • 根相对路径,例如以斜杠开头的 /a/123.html。它会拼到当前页面的域名后面,不管入口页在第几层目录,结果都是同一个地址。
  • 文档相对路径,例如 article/123.html 或 ../a/123.html。它会基于当前页面的目录位置来拼。入口页的地址一旦从 /pool/index.html 变成 /pool/list/index.html,同一段链接拼出来的地址就变了。
  • 协议相对写法,例如以双斜杠开头的 //example.com/a/123.html。它会沿用当前页面的协议。如果入口页同时能被 http 和 https 访问,蜘蛛在不同协议下抓到的目标地址可能被当成两个不同的 URL。

base 标签会直接改写拼接基准

如果入口页的 head 里写了 base 标签,页面上所有相对路径都不再以当前 URL 为基准,而是以 base 指定的地址为基准。这在模板复用的入口页里很常见:模板本来是按主站写的,base 指向主站域名,结果蜘蛛在入口页上拼出来的目标链接全指向了主站或者一个不存在的路径。排查时先看这一行,往往比逐条检查链接更快。

几种容易忽略的连带问题

  • 末尾斜杠。结尾有没有斜杠,在很多服务器上会被当成两个不同的地址,可能触发一次多余的跳转。
  • 大小写。路径是否区分大小写取决于服务器配置,入口页和目标站配置不一致时,拼出来的地址可能直接 404。
  • 参数与锚点。带查询参数的相对路径在拼接时容易被截断或重复,拼好后最好单独访问验证一次。

什么情况下建议直接用绝对路径

如果入口页会被多个域名、多个协议访问,或者可能被搬到不同层级的目录下,直接用带协议和域名的完整地址最省心。它的代价只是页面体积略大一点,对抓取本身几乎没有实质影响。反过来说,只有当入口页的部署位置长期固定、不会再动时,用相对路径才比较稳妥。

自查清单

  1. 把入口页的 HTML 抓下来,以页面自身的原始地址为基准,逐条拼接链接,看结果是否等于你想推的目标地址。
  2. 检查 head 里有没有 base 标签,确认它的值是不是你想要的基准。
  3. 用同一入口页的 http 和 https 两个版本各抓一次,比对拼出来的链接是否一致。
  4. 确认入口页自身返回的地址是否稳定,有没有跳转导致目录层级发生变化。
  5. 把拼好的 URL 单独访问一次,确认返回正常且内容确实是你想推的那一页。
相对路径本身不是问题,问题是它的解析结果取决于运行环境。蜘蛛池入口页通常会被多处复用、反复搬迁,环境一变解析结果就变,这也是它比普通站点更容易踩坑的原因。发现地址不对时,先改写法,再谈抓取和收录。