常见问题

入口页链接写成相对路径,搜索蜘蛛解析出的 URL 会不会跑偏

相对路径本身不会被搜索蜘蛛拒绝,真正的问题在于解析基准。本文说明入口页用相对路径、base 标签、重定向后,蜘蛛解析出的目标 URL 会怎么变,并给出自查步骤和更稳妥的写法建议。

常见问题

入口页链接写成相对路径,搜索蜘蛛解析出的 URL 会不会跑偏

在蜘蛛池的入口页里,很多人图省事,把链接写成 /target/page.html 或者 target/page.html 这种相对路径。这种写法本身没有任何问题,搜索蜘蛛和浏览器用的是同一套解析规则,但前提是:解析用的“基准 URL”要和你想的一致。一旦入口页发生过重定向、被镜像过,或者页面里出现了 base 标签,相对路径解析出来的地址就可能和你要指向的目标 URL 差一截。

相对路径的基准到底是谁

相对路径的解析基准是文档自身的 URL,也就是浏览器地址栏最终停留的那个地址,而不是你当初提交给搜索引擎的原始地址。举个例子:你提交的入口页是 http://a.com/entry/,它 301 跳到 http://a.com/new/entry/,页面上写的是 ../target.html。蜘蛛实际会以 /new/entry/ 为基准,解析成 /new/target.html,而不是你预期的 /target.html。这种情况在蜘蛛池里很常见,因为入口页经常套了一层跳转或者 CDN 规则。

几种常见写法的解析结果

  • 以斜杠开头:/target/a.html,以域名根为基准,无论入口页在哪一层目录,结果都固定,最稳。
  • 不以斜杠开头:a.html,以当前目录为基准,即 …/entry/a.html。入口页目录一变,目标就变。
  • 用 ../ 回退:../target.html,回退一层。层数数错一层,地址就整体跑偏。
  • 协议相对://other.com/a.html,跟随当前页面的协议。现在多数抓取环境按 https 处理,但如果入口页还在 http 上,结果会有细微差别。
  • 只写查询串或锚点:?id=1、#top,会被解析成当前页面本身。这类“链接”不会带来新的 URL 发现。

base 标签会整体挪动基准

只要页面里出现 base href,页面上所有相对路径的基准就会从文档 URL 换成这个 href。对蜘蛛来说同样生效。有些模板为了兼容多域名,会在 head 里写一个固定的 base,结果入口页挂在别的域名下时,所有相对链接都被解析到 base 指定的域名上。排查这类问题时,先看 head 里有没有 base,比一行行改链接更快。

尾斜杠和目录判断容易被忽略

不带斜杠的路径,蜘蛛会当作文件处理,基准是它的上一级目录;带斜杠则当作目录,基准是它本身。入口页地址是 /entry 还是 /entry/,会让同一段相对路径解析出两个不同结果。蜘蛛池批量生成页面时,这两者经常混用,抓取日志里就会出现一堆 404。

自查相对路径有没有跑偏

  1. 用抓取工具或站长平台看一下入口页的最终 URL,确认重定向之后落到哪里。
  2. 用 curl -I 看 Location 头,把跳转链路一层层列出来。
  3. 把最终 URL 贴进浏览器,打开开发者工具看链接被解析成了什么地址,和日志里的抓取地址对比。
  4. 在服务器日志里筛选目标 URL 的访问记录,如果出现大量带多余目录层级的 404,基本就是基准错了。

更省事的写法建议

  • 入口页里的目标链接统一用完整绝对地址,带上 https 和域名,省掉解析环节。
  • 如果必须用相对路径,优先以斜杠开头写根路径,避免受目录层级影响。
  • 固定入口页地址形式,要么都带尾斜杠,要么都不带,不要混。
  • 不要在入口页里随意加 base 标签,除非确实需要。
相对路径不是“蜘蛛不认”,而是解析结果取决于页面的最终地址。入口页一旦有跳转,先把最终 URL 确认清楚,再看链接解析出来的地址对不对,比反复改链接写法有效。

总的来说,相对路径能用,但它把“入口页最终落在哪里”这个变量引入了 URL 解析。蜘蛛池的入口页数量大、跳转多,用绝对路径写目标链接,能减少一批说不清的抓取失败。至于目标 URL 能不能被收录,还取决于目标站本身的状态、内容质量和抓取配额,链接写对只是其中一步。