doctype声明必须为且位于首行,否则触发怪异模式;lang属性需按iana标准精确设置;meta标签顺序影响编码、响应式和seo;语义化标签是可访问性与seo的硬性要求。

DOCTYPE 声明不是可选的,它直接决定浏览器用哪种模式解析 HTML
不写 ,或者写错(比如漏空格、大小写混用、多加斜杠),浏览器大概率会退回到怪异模式(Quirks Mode)。这时候盒模型、<code>height 计算、inline 元素垂直对齐行为全都不一样——CSS 调了半天发现“怎么在 IE 里正常,Chrome 里塌了”,八成是这个惹的祸。
现代标准只认 这一种写法。不要写 <code>,也不要简写成 <code>(虽然多数浏览器宽容,但规范要求大写 <code>DOCTYPE 后紧跟空格)。
必须是文档第一行,前面不能有任何字符(包括 BOM、空格、注释)- 它不区分大小写,但推荐全大写 + 空格 +
html小写,这是 W3C 推荐形式 - 一旦触发怪异模式,
document.compatMode返回"BackCompat",标准模式才是"CSS1Compat"
lang 属性不是装饰,它影响屏幕阅读器、字体回退和搜索引擎分词
中的 lang 不只是告诉浏览器“这是中文”,它实际参与渲染链路:浏览器据此选择默认中文字体(比如 macOS 用 PingFang,Windows 用微软雅黑),语音合成引擎据此切换发音规则,Google 搜索也会按语言维度索引页面内容。
常见错误是写成 lang="zh" 或 lang="cn"。前者太宽泛(没区分简繁体),后者根本不是合法语言子标签。正确写法必须遵循 IANA 语言子标签注册表,例如:
- 简体中文:
zh-CN - 繁体中文(台湾):
zh-TW - 英文(美国):
en-US - 英文(英国):
en-GB
如果页面含多语言段落,应在对应元素上单独设 lang,比如 <p lang="ja">こんにちは</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill8272" title="anything-to-html"><img
src="https://img.php.cn/upload/skill/000/000/081/179195588450431.jpg" alt="anything-to-html" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill8272" title="anything-to-html" class="overflowclass">anything-to-html</a>
<p class="overflowclass">将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。</p>
</div>
<a rel="nofollow" href="/xiazai/skill8272" title="anything-to-html" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>。
head 里的 meta 标签顺序影响首屏加载和 SEO 权重
<meta charset="UTF-8"> 必须放在 最前面(紧随 <title></title> 之后也勉强可接受,但越早越好)。晚于它出现的任何文本(包括 <title></title> 内容)都可能被错误解码,导致乱码或 DOM 解析中断。
另外三个关键 meta 的位置也有讲究:
-
<meta name="viewport" content="width=device-width, initial-scale=1">应在<meta charset>之后、CSS<link>之前,否则移动端可能先以桌面宽度渲染再缩放,造成 FOUC -
<meta name="description" content="...">对 SEO 有效,但必须出现在<title></title>之后、其他<meta>之前,搜索引擎更倾向抓取靠前的描述 -
<meta http-equiv="X-UA-Compatible" content="IE=edge">已过时,仅需兼容 IE11 以下才保留;现代项目可直接删掉
body 内语义化标签不是“锦上添花”,而是可访问性和 SEO 的硬性依赖
用一堆 <div class="header"> 替代 <code><header></header>,表面看样式一样,实则切断了辅助技术的导航路径。屏幕阅读器用户无法通过快捷键跳转到页眉,也无法识别主内容区(<main></main>)或侧边栏(<aside></aside>)。
搜索引擎同样依赖语义结构判断内容权重。例如 <h1></h1> 到 <h6></h6> 的层级必须严格嵌套,跳级(如 <h2></h2> 后直接 <h4></h4>)会被 Google 视为结构混乱,影响内容可信度评分。
-
<main></main>页面只能有一个,且不能嵌套在<article></article>、<aside></aside>、<nav></nav>、<footer></footer>内 -
<section></section>必须有标题(<h1>–<h6></h6> </h1>),否则语义失效,等同于<div> <li> <code><article></article>表示独立可分发的内容单元(如博客正文、新闻稿),不是所有“区块”都该用它
真正难的不是记住这些标签名,而是判断内容逻辑关系——把“视觉分区”和“语义分区”分开思考,是写好 HTML 结构最常被忽略的一环。










