常见问题

入口页里的相对链接和 base 标签,会把搜索蜘蛛解析到哪个 URL

入口页写链接时,相对路径、协议相对链接和残留的 base 标签都会改变搜索蜘蛛实际解析出的地址。本文说明解析规则、常见偏差写法和用日志核对的方法,帮助你把抓取落到正确的目标 URL 上。

常见问题

入口页里的相对链接和 base 标签,会把搜索蜘蛛解析到哪个 URL

在蜘蛛池入口页里放目标 URL 时,多数人会直接复制完整地址。但入口页往往来自模板、程序动态生成,或者从别处搬运,链接写法并不统一。相对链接、协议相对链接、页面里残留的 base 标签,都可能让搜索蜘蛛解析出和预期不一样的 URL。这种情况不会报错,日志里也有抓取记录,只是抓到的地址不是你想要的那个。

相对链接按页面自身 URL 解析

搜索蜘蛛处理相对链接,依据的是当前入口页的完整 URL,而不是你心里的目录结构。常见的几种写法:

  • 以斜杠开头,如 /path/a.html,解析为当前域名根目录下的这个路径。
  • 不带斜杠,如 a/b.html,解析为入口页所在目录下的 a/b.html。
  • 带 .. 则向上退一级。
  • 以 // 开头是协议相对链接,会继承入口页的协议。

假设入口页地址是 https://entry.example.com/spider/page1/index.html,页面里写 a.html,最终会解析成 https://entry.example.com/spider/page1/a.html,而不是站点根目录下的 a.html。入口页自身层级越深,偏差越大。

base 标签会换掉解析基准

如果页面里出现 <base href='...'>,那么页面内所有相对链接都会以这个地址为基准解析。模板里遗留一个 base、CMS 自动输出指向首页的 base,都会让入口页里的相对目标 URL 全部落到 base 指定的目录下。排查时先在 HTML 源码里搜索 base 标签,不要只看页面显示效果。

其他容易出偏差的写法

  • href 值里混入换行、多余空格或实体编码,解析结果可能被截断。
  • 链接含中文、空格、括号却没有做 URL 编码,不同抓取程序处理方式不完全一致。
  • 写成 javascript: 或依赖 onclick 跳转,搜索蜘蛛通常不会执行脚本。
  • 链接里的大小写与真实路径不符。Linux 环境下路径区分大小写,结果就是 404。
  • 末尾斜杠有无不统一,同一个目标可能被解析成两个不同地址。

用日志核对落地地址

最直接的方法是对照服务器访问日志:找到入口页的抓取记录,再看同一时间窗口里搜索蜘蛛请求了哪些 URL。如果日志中的地址和你投放的目标 URL 不一致,就回到入口页 HTML 看链接的原始写法。

  1. 确认入口页最终返回的 URL,排除跳转带来的影响。
  2. 检查页面里是否存在 base 标签,以及它的具体值。
  3. 把入口页 HTML 抓下来,搜索目标 URL 的关键片段,确认链接实际写法。
  4. 用浏览器开发者工具查看链接被解析后的绝对地址,和日志交叉比对。
相对链接本身没有对错,问题往往出在入口页 URL 的层级和你写链接时的假设不一致。

维护上的几点做法

入口页数量少、手工维护时,直接使用完整绝对 URL 最省事。程序批量生成时,建议在输出前做一次链接规范化:统一协议、统一域名、统一末尾斜杠规则,并给入口页 URL 固定一个层级。不要在同一批入口页里混用相对和绝对写法,也不要保留来路不明的 base 标签。

如果发现搜索蜘蛛已经抓过错误地址,不必急着改 robots 或加 nofollow,先修链接本身。错误地址可能还会在日志里出现一段时间,属于正常现象。修好之后,用新一批入口页或修正后的链接重新观察抓取记录即可。