必须位于内且唯一;写错位置、重复或为空会导致标签页异常、SEO失效及无障碍访问中断,应始终用document.title修改而非操作DOM。

必须写在 里,且只能有一个;写错位置、重复或为空,会导致浏览器标签页显示异常、SEO 失效、无障碍访问中断。
title 标签必须放在 中,不能在 里
HTML 规范强制要求 是 的直接子元素。写在 里时,浏览器会尝试“修复”——把它挪进 ,但这个行为不可控:旧版 Safari 或某些 WebView 可能静默丢弃,或导致 DOM 构建延迟。常见错误包括:
- 模板引擎(如 Jinja、EJS)拼接
时漏掉闭合,导致实际落在内 - 复制粘贴代码时带入隐藏 BOM 或注释,干扰解析器判断结构层级
- 用 JS 动态插入:
document.body.appendChild(document.createElement('title'))—— 这种写法无效,且可能被忽略
动态修改 title 请用 document.title,别碰 DOM
所有现代浏览器(含微信内置浏览器)都支持直接读写 document.title。这是唯一可靠方式。以下操作均不生效:
-
document.querySelector('title').textContent = '新标题'—— 不触发标题栏更新 -
document.querySelector('title').innerHTML = '新标题'—— 同样无效 -
document.title = ''或只含空格 —— 标签页会退回到显示文件名(如index.html),SEO 和分享卡片也失效
注意兼容性:IE6–8 对含中文的 document.title 赋值失败,需确保页面 声明存在且位置正确。
Vite / Vue / React 项目中容易被覆盖的 title 配置点
构建工具常默认注入 ,你写的可能只是“源码幻觉”。关键检查点:
- Vite:若用了
@vitejs/plugin-html或vite-plugin-html,中的title来自插件配置,不是 index.html 源码 - Vue CLI / Vite:.env 文件里的
VITE_APP_TITLE可能被 HTML 插件读取并替换,此时 index.html 里的文字只是占位符 - React + react-helmet-async:
会接管渲染,public/index.html 中的xxx 仅作 fallback - SPA 路由切换时:必须手动在路由守卫(如 Vue Router
beforeEach)或组件watch中调用document.title,否则始终显示初始值
最常被忽略的是构建产物和运行时的实际 title 来源不一致——打开浏览器开发者工具的 Elements 面板,看最终渲染出的 内容,再反推它从哪来。空标题、截断、乱码、滞后更新,八成卡在这一步。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











