<title>必须位于<head>内且唯一;写错位置、重复或为空会导致标签页异常、SEO失效及无障碍访问中断,应始终用document.title修改而非操作DOM。
<title> 必须写在 <head> 里,且只能有一个;写错位置、重复或为空,会导致浏览器标签页显示异常、SEO 失效、无障碍访问中断。
HTML 规范强制要求 <title> 是 <head> 的直接子元素。写在 <body> 里时,浏览器会尝试“修复”——把它挪进 <head>,但这个行为不可控:旧版 Safari 或某些 WebView 可能静默丢弃,或导致 DOM 构建延迟。常见错误包括:
<head> 时漏掉闭合,导致 <title> 实际落在 <body> 内document.body.appendChild(document.createElement('title')) —— 这种写法无效,且可能被忽略所有现代浏览器(含微信内置浏览器)都支持直接读写 document.title。这是唯一可靠方式。以下操作均不生效:
document.querySelector('title').textContent = '新标题' —— 不触发标题栏更新document.querySelector('title').innerHTML = '新标题' —— 同样无效document.title = '' 或只含空格 —— 标签页会退回到显示文件名(如 index.html),SEO 和分享卡片也失效注意兼容性:IE6–8 对含中文的 document.title 赋值失败,需确保页面 <meta charset="UTF-8"> 声明存在且位置正确。
立即学习“前端免费学习笔记(深入)”;
构建工具常默认注入 <title>,你写的可能只是“源码幻觉”。关键检查点:
@vitejs/plugin-html 或 vite-plugin-html,<title><%- title %></title> 中的 title 来自插件配置,不是 index.html 源码VITE_APP_TITLE 可能被 HTML 插件读取并替换,此时 index.html 里的文字只是占位符<Helmet><title>xxx</title></Helmet> 会接管渲染,public/index.html 中的 <title> 仅作 fallbackbeforeEach)或组件 watch 中调用 document.title,否则始终显示初始值最常被忽略的是构建产物和运行时的实际 title 来源不一致——打开浏览器开发者工具的 Elements 面板,看最终渲染出的 <title> 内容,再反推它从哪来。空标题、截断、乱码、滞后更新,八成卡在这一步。