title标签必须位于<head>内,浏览器仅识别第一个且忽略其他位置;动态修改须用document.title而非DOM操作;构建工具可能覆盖手写title;需注意字符长度、转义及SEO兼容性。
<head> 里,放错位置等于没写浏览器只认 <head> 区域内的第一个 <title> 标签,其他位置写的全无效。有人把 <title>首页</title> 塞进 <body>,结果标签页显示“无标题”或直接显示文件名——这不是兼容性问题,是 HTML 解析器根本没把它当标题处理。
常见错误场景包括:
<head> 被拆成多个片段,<title> 漏写或插到 <body> 开头<title> 到 <head>,虽然 DOM 看起来存在,但 SEO 和历史记录不可见<head>,直接从 <body> 开始,<title> 被忽略或静默修复(Chrome 可能“帮忙”挪进去,但爬虫不买账)document.title,别碰 DOM想在单页应用(SPA)里随路由切换更新标题?别写 document.querySelector('title').textContent = '新标题' —— 这行代码能改 DOM 节点,但浏览器标签页文字完全不变。唯一可靠方式就是直接赋值 document.title。
注意几个边界情况:
立即学习“前端免费学习笔记(深入)”;
document.title 设中文可能乱码,需确保页面声明 <meta charset="utf-8"> 且前后一致history.state,别指望靠它监听变化<title>,JS 后改的仅影响用户当前看到的标签页搜索引擎通常只展示前 50–60 个字符,移动端标签栏更窄,12 个汉字就可能被截断。更麻烦的是特殊字符:未转义的 & 会变成 &,否则可能被当成实体开头; 或 <code>> 不转义会破坏 HTML 结构,轻则标题显示异常,重则整个页面渲染失败。
安全写法要点:
& 必须写成 &, 写成 <code><,> 写成 >
<title>
Vite、Webpack 的 HTML 插件(如 html-webpack-plugin)常通过配置项注入 title,比如 title: '我的网站'。这时你手写的 <title>首页</title> 在源码里看着正常,实际构建产物中已被插件生成的内容覆盖——查源码没用,得看最终输出的 index.html 文件。
排查建议:
title 或 templateParameters 相关字段<%= htmlWebpackPlugin.options.title %>),而不是硬写死<title> 是语义化、带关键词的,JS 后续修改只是用户体验补救