必须顶格置于内首个标签,否则浏览器前1024字节无法识别编码致中文乱码;不可省略,否则影响无障碍、seo及框架水合;语义标签如、有严格使用规则;脚本须用defer避免阻塞解析。

为什么 `` 必须紧贴 `` 开头
浏览器只扫描 `
` 前 1024 字节来确定编码,如果 `` 写在 `,且刷新也无法恢复。
-
<meta charset="UTF-8">必须是 `` 内第一个标签(顶格、无空行、无注释) - 别写成
utf8或UTF-8(大小写敏感:U/T/F 大写,8 小写) - 禁用已废弃的
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">,Chrome 120+ 会忽略
`html lang>` 不是可选项,而是运行前提
不写 lang 属性,屏幕阅读器会乱读、CSS 的 :lang(zh-CN) 选择器失效、Google 搜索可能返回繁体结果——这不是“体验差”,而是功能级缺失。
- 必须写
,不能只写zh或留空lang="" - 服务端渲染(SSR)时,
lang值必须和服务端输出一致,否则 React/Vue hydration 会因 DOM 差异报错 - 嵌套英文内容用
<p lang="en">API response</p>覆盖,不用额外设xml:lang
语义标签不是“更美观”,而是机器可读的契约
<main></main> 只能出现一次,<article></article> 必须能独立分发,<section></section> 不能没标题——这些不是规范建议,而是浏览器、爬虫、辅助工具实际依赖的解析规则。
-
<main></main>必须包裹页面唯一核心内容,不可嵌套在<header></header>、<nav></nav>或<aside></aside>内 -
<article></article>适用于博客、新闻等可被 RSS 聚合或单独链接的内容;<section></section>是主题分组,必须配<h2></h2>–<h6></h6>,否则语义断裂 - 别用
<div class="header"> 替代 <code><header></header>:class 名对搜索引擎和屏幕阅读器完全不可见脚本位置错误比语法错误更难排查
把
` 里没加<script src="app.js"></script>放在 `defer,会导致 HTML 解析中断,连 `` 都没生成,用户看到白屏——但控制台无报错,开发者工具里也查不到明显异常。- 关键 JS(如首屏交互逻辑)统一用
<script defer src="main.js"></script>,放 `` 里也安全 - 统计类脚本可用
async,但不保证加载顺序,utils.js可能晚于app.js执行 - 内联脚本(如
<script>init();</script>)默认阻塞,务必加defer;若必须依赖 DOM,用DOMContentLoaded包裹,别信“放 `` 前就一定 OK”
` 的唯一性检查——它们不出错时不显眼,一出错就是白屏、乱码、SEO 归零,而且问题现象和根源之间隔着好几层抽象。 - 关键 JS(如首屏交互逻辑)统一用











