常见问题

蜘蛛池入口页用了 base href 标签,搜索蜘蛛拼出的目标 URL 会跑偏吗

入口页的 head 里写了 base href,页面里的相对链接就会按 base 的地址拼接,而不是按当前页面地址。base 指向 CDN、域名写错或末尾斜杠丢了,蜘蛛请求的路径可能和你预期完全不同。本文讲清 base 的解析规则、常见跑偏场景和日志自查方法。

常见问题

蜘蛛池入口页用了 base href 标签,搜索蜘蛛拼出的目标 URL 会跑偏吗

把目标 URL 挂到入口页上,是蜘蛛池最基础的用法。不少站点模板会在 head 里顺手写上一行 base href,用来统一控制相对资源的基准地址。这个标签本身没有问题,但一旦它和入口页实际的链接写法对不上,搜索蜘蛛拼出来的目标 URL 就可能落到别的路径上去,日志里看到的抓取地址和你以为的完全不是一回事。

base href 到底改了什么

它只做一件事:给页面里的相对 URL 提供基准。绝对 URL 不受它影响。

  • 没有 base 时,相对链接按当前页面 URL 所在目录来拼接。
  • 有 base 时,相对链接按 base 的地址来拼接,base 末尾有没有斜杠会改变结果。
  • 以 http 或 https 开头的绝对地址不走这套规则,写什么就是什么。

换句话说,base 影响的是那些你写得比较省事的链接,比如只写路径、只写文件名、写上一级目录这类形式。

搜索蜘蛛会不会按 base 来解析

主流搜索引擎在解析 HTML 链接时,一般会遵循 HTML 规范,也就是会考虑页面里的 base。这意味着你写一个相对链接指向某个文件,配上 base 之后,最终组合出来的地址可能和你的预期不一致。

如果目标是让蜘蛛发现一个明确的目标 URL,最稳的做法是把它写成绝对地址,而不是依赖 base 加相对路径的组合去推。

常见的几种跑偏场景

  1. base 指向 CDN 或静态资源域名。相对链接会被拼到那个域名下面,蜘蛛请求到的其实是另一份内容,或者干脆是 404。
  2. base 末尾的斜杠丢了。带斜杠和不带斜杠解析出来的路径不同,前者会当成目录,后者会把最后一段当成文件名替换掉。
  3. 模板里的 base 是写死的历史域名。站点已经换过域名,但 base 一直没更新,链接就都指向旧地址。
  4. base 里带了参数或锚点,或者值写得比较特殊,解析行为更容易和预期不一致。
  5. 页面一部分链接是绝对地址,一部分是相对地址,出问题时只排查了一半。

怎么自查

  • 打开入口页源码,把 base 和每一类相对链接人工组合一遍,算出实际目标 URL,和你想投放的地址对照。
  • 对比服务器日志里蜘蛛实际请求的路径。这一步最直接,谁被请求了、请求的域名对不对,一眼能看出来。
  • 用浏览器的开发者工具查看链接的绝对地址,或者用抓取类工具跑一遍入口页,导出发现的 URL 列表。
  • 确认入口页有没有多套模板。同一个站点不同栏目用了不同模板时,base 的处理方式可能并不统一。

处理建议

入口页承担的是 URL 发现的职责,中间环节越少越可控。可以按下面的顺序处理:

  1. 入口页里的目标链接尽量写成完整的绝对 URL,天然不受 base 影响。
  2. 如果确实需要 base,确认它指向的域名和路径就是入口页真正部署的位置,并且末尾斜杠与目录结构一致。
  3. 改动之后观察一段时间的抓取日志,确认蜘蛛请求的地址和预期一致,再继续扩展入口页规模。

最后提醒一句:URL 被发现只是第一步,能不能被抓取、能不能进入索引,还取决于目标 URL 自身的状态码、内容情况、robots 设置和站点整体质量。入口页写得再规范,也不等于收录有保证。