把目标 URL 挂到入口页上,是蜘蛛池最基础的用法。不少站点模板会在 head 里顺手写上一行 base href,用来统一控制相对资源的基准地址。这个标签本身没有问题,但一旦它和入口页实际的链接写法对不上,搜索蜘蛛拼出来的目标 URL 就可能落到别的路径上去,日志里看到的抓取地址和你以为的完全不是一回事。
base href 到底改了什么
它只做一件事:给页面里的相对 URL 提供基准。绝对 URL 不受它影响。
- 没有 base 时,相对链接按当前页面 URL 所在目录来拼接。
- 有 base 时,相对链接按 base 的地址来拼接,base 末尾有没有斜杠会改变结果。
- 以 http 或 https 开头的绝对地址不走这套规则,写什么就是什么。
换句话说,base 影响的是那些你写得比较省事的链接,比如只写路径、只写文件名、写上一级目录这类形式。
搜索蜘蛛会不会按 base 来解析
主流搜索引擎在解析 HTML 链接时,一般会遵循 HTML 规范,也就是会考虑页面里的 base。这意味着你写一个相对链接指向某个文件,配上 base 之后,最终组合出来的地址可能和你的预期不一致。
如果目标是让蜘蛛发现一个明确的目标 URL,最稳的做法是把它写成绝对地址,而不是依赖 base 加相对路径的组合去推。
常见的几种跑偏场景
- base 指向 CDN 或静态资源域名。相对链接会被拼到那个域名下面,蜘蛛请求到的其实是另一份内容,或者干脆是 404。
- base 末尾的斜杠丢了。带斜杠和不带斜杠解析出来的路径不同,前者会当成目录,后者会把最后一段当成文件名替换掉。
- 模板里的 base 是写死的历史域名。站点已经换过域名,但 base 一直没更新,链接就都指向旧地址。
- base 里带了参数或锚点,或者值写得比较特殊,解析行为更容易和预期不一致。
- 页面一部分链接是绝对地址,一部分是相对地址,出问题时只排查了一半。
怎么自查
- 打开入口页源码,把 base 和每一类相对链接人工组合一遍,算出实际目标 URL,和你想投放的地址对照。
- 对比服务器日志里蜘蛛实际请求的路径。这一步最直接,谁被请求了、请求的域名对不对,一眼能看出来。
- 用浏览器的开发者工具查看链接的绝对地址,或者用抓取类工具跑一遍入口页,导出发现的 URL 列表。
- 确认入口页有没有多套模板。同一个站点不同栏目用了不同模板时,base 的处理方式可能并不统一。
处理建议
入口页承担的是 URL 发现的职责,中间环节越少越可控。可以按下面的顺序处理:
- 入口页里的目标链接尽量写成完整的绝对 URL,天然不受 base 影响。
- 如果确实需要 base,确认它指向的域名和路径就是入口页真正部署的位置,并且末尾斜杠与目录结构一致。
- 改动之后观察一段时间的抓取日志,确认蜘蛛请求的地址和预期一致,再继续扩展入口页规模。
最后提醒一句:URL 被发现只是第一步,能不能被抓取、能不能进入索引,还取决于目标 URL 自身的状态码、内容情况、robots 设置和站点整体质量。入口页写得再规范,也不等于收录有保证。