base 标签必须置于 head 最前面且 href 须为绝对 url 或根相对路径,仅影响 html 静态属性(如 src、href),不影响 js 动态请求和 css @import,但影响 css url();target="_blank" 需配 rel="noopener";seo 相关 url 必须写绝对路径。

base 标签必须放在 最前面,否则相对 URL 解析会出错
浏览器解析 HTML 是从上到下进行的,<base> 的作用是为后续所有相对 URL 提供基准,所以它必须是 中最早出现的元数据类元素之一。如果它后面还有 <link href="style.css"> 或 <img src="logo.png">,而 <base> 却写在它们之后,这些资源仍会按原页面 URL 解析,导致 404。
常见错误写法:
<title>My Page</title><link rel="stylesheet" href="css/main.css"><base href="https://cdn.example.com/">
正确顺序:
<base href="https://cdn.example.com/"><title>My Page</title><link rel="stylesheet" href="css/main.css"> @@##@@
-
href值必须是绝对 URL(如https://cdn.example.com/)或根相对路径(如/assets/),不能是普通相对路径(如../static/) - 一个文档中只允许有一个
<base>,重复声明会被忽略(仅第一个生效) - 若同时指定
href和target,两者互不影响;但至少得有其一,否则该标签无效
base 不影响 JS 动态加载和 CSS @import,但会影响 url() 函数
<base> 只作用于 HTML 解析阶段的静态属性:比如 <a href></a>、<img src="logo.png">、<link href>、<script src></script> 等。它不会改变运行时 JS 的行为。
这意味着:
-
fetch('./api/data.json')仍以当前页面 URL 为基准,不是<base href>的值 -
import('./module.js')同样不受影响 - CSS 中的
@import 'theme.css';是 CSS 解析行为,也不走<base> - 但 CSS 里的
background: url('icon.svg');会被重写为url('https://cdn.example.com/icon.svg')—— 这是容易被忽略的关键点
使用 target="_blank" 时要配 rel="noopener",否则有安全风险
<base target="_blank"> 会让所有没显式写 target 的 <a></a> 都在新标签页打开,很方便。但如果不加 rel,新开页面可通过 window.opener 访问原始页面上下文,存在钓鱼或性能劫持风险。
正确写法是:
<base href="/app/" target="_blank" rel="noopener">
注意:rel="noopener" 必须和 target="_blank" 同时出现在 <base> 上才生效;单独写在某个 <a></a> 里只能保护那个链接。
- 不支持
rel="noreferrer"——<base>的rel属性只认noopener(部分浏览器也认opener,但无实际用途) -
rel对非<a></a>元素(如<form></form>)无效 - 如果页面里混用
target="_blank"和target="_self",<base>的target仅作为 fallback,不会覆盖已明确写的值
SEO 和 Open Graph 对 <base> 完全无视,外部服务只看原始 HTML
搜索引擎爬虫、社交平台分享预览(如微信、Facebook 的 Open Graph 抓取)、甚至某些 Lighthouse 检测项,都不会执行或尊重 <base>。它们直接读取 HTML 源码中的 href、src 值,而这些值仍是相对路径。
后果很实际:
- 你写了
<base href="https://cdn.example.com/">,但<link rel="canonical" href="/article/123">仍被当成相对于当前域名,不是 CDN 域名 -
<meta property="og:image" content="thumb.jpg">会被抓成https://yourdomain.com/thumb.jpg,而不是 CDN 地址 - 所以关键 SEO 相关的 URL(canonical、og:*、twitter:*)必须写绝对 URL,不能依赖
<base>
真正需要 <base> 的场景,其实是工程化部署时统一资源前缀,比如静态资源托管在 CDN、但 HTML 本身仍由主站下发——这时候它省的是开发时的手动拼接,不是运行时的逻辑控制。别把它当万能路由代理用。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











