HTML 最佳实践

学完了 HTML 的所有知识点,这一篇总结最佳实践,帮你写出高质量、可维护、可访问的 HTML 代码。

1. 语义化为先

选择标签时问自己:“这个内容的含义是什么?“而不要想”我想要什么样的外观”。

html
<!-- ❌ 用 div 解决一切 -->
<div class="header">
  <div class="nav">...</div>
</div>
<div class="content">
  <div class="article">
    <div class="title">文章标题</div>
    <div class="body">...</div>
  </div>
</div>
<div class="footer">...</div>

<!-- ✅ 使用语义化标签 -->
<header>
  <nav>...</nav>
</header>
<main>
  <article>
    <h1>文章标题</h1>
    <p>...</p>
  </article>
</main>
<footer>...</footer>

2. 结构清晰

  • 页面有且仅有一个 <h1>
  • 标题层级不跳级(h1 → h2 → h3,不 h1 → h3)
  • <main> 每页只有一个
  • 表单控件始终配合 <label>

3. 可访问性

  • 所有 <img>alt 属性(装饰图用空 alt=""
  • 所有 <iframe>title
  • 使用 ARIA 属性增强复杂组件的可访问性
  • 确保键盘可导航(使用 tabindex 管理焦点顺序)
  • 颜色对比度符合 WCAG 标准(正文至少 4.5:1)
html
<!-- ✅ 好的可访问性 -->
<img src="chart.png" alt="2026 年 Q1 销售额柱状图,显示同比增长 15%">

<nav aria-label="主导航">
  <ul>
    <li><a href="/">首页</a></li>
    <li><a href="/about">关于</a></li>
  </ul>
</nav>

<div role="alert" aria-live="polite">
  表单提交成功!
</div>

4. 性能

  • CSS 放 <head>,JS 放 </body> 之前或使用 defer
  • <img> 设置 loading="lazy"(不需要立即可见的图片)
  • <iframe> 设置 loading="lazy"
  • 始终为 <img> 设置 width / height(防布局抖动)
  • 使用 <link rel="preload"> 预加载关键资源(字体、首屏大图)
  • 使用 <link rel="dns-prefetch"> 提前解析第三方域名的 DNS
html
<head>
  <link rel="stylesheet" href="styles.css">
  <link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin>
  <link rel="dns-prefetch" href="https://api.example.com">
</head>
<body>
  <img src="hero.webp" alt="主页大图" width="1200" height="600"
       loading="eager">
  <img src="article-1.jpg" alt="文章配图" width="800" height="450"
       loading="lazy">
  <script src="app.js" defer></script>
</body>

5. SEO

基础 SEO

  • 每个页面有唯一的 <title><meta name="description">
  • <h1><title> 内容相关
  • 使用 <meta name="robots"> 控制搜索引擎索引行为
  • 添加 <link rel="canonical"> 防止重复内容

社交分享

Open Graph 标签控制页面在社交媒体(微信、微博、Facebook 等)中的分享卡片:

html
<meta property="og:title" content="HTML 教程 – 从零开始学网页开发">
<meta property="og:description" content="最全面的 HTML 教程,从零开始系统学习。">
<meta property="og:image" content="https://coodocs.com/og-image.jpg">
<meta property="og:url" content="https://coodocs.com/html">
<meta property="og:type" content="website">

Twitter Card 类似,用于 Twitter 上的链接预览:

html
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="HTML 教程">
<meta name="twitter:description" content="最全面的 HTML 教程...">
<meta name="twitter:image" content="https://coodocs.com/twitter-card.jpg">

结构化数据(JSON-LD)

html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "HTML 教程",
  "description": "最全面的 HTML 教程...",
  "author": { "@type": "Organization", "name": "Coodocs" }
}
</script>

JSON-LD 以机器可读的格式描述页面内容,帮助搜索引擎生成丰富的搜索结果(如星级评分、面包屑)。

6. 代码规范

  • 标签和属性名使用小写
  • 属性值使用双引号
  • 保持一致的缩进(2 或 4 个空格)
  • 嵌套正确,标签闭合
  • 自闭合标签(如 <br>)不要在末尾加 /
  • 合理使用注释分隔大的区块
html
<!-- ✅ 好的编码风格 -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>页面标题</title>
</head>
<body>
  <!-- 导航区 -->
  <header>
    <nav>...</nav>
  </header>

  <!-- 主内容 -->
  <main>
    <h1>主标题</h1>
    <p>内容段落。</p>
  </main>

  <!-- 页脚 -->
  <footer>...</footer>
</body>
</html>

7. 常见错误

错误正解
嵌套标签交错后开的先关
块级元素放行内元素中行内只放行内
用表格做布局表格只放表格数据,布局用 CSS
<br> 当段落间距用<p> + CSS margin
忘写 alt 属性<img> 必须有 alt
id 重复使用id 必须页面内唯一
placeholder 代替 label两者都写
target="_blank" 不加 rel="noopener"安全风险,必须加

浏览器是宽容的——即使 HTML 写得不好,它也会尽量渲染出来。但劣质代码会在可访问性、SEO、维护成本、跨设备兼容性等方面付出隐形代价。养成好习惯,从一开始就写高质量的 HTML。

推荐的 HTML 工具

继续学习

完成 HTML 教程后,建议按以下顺序继续:

  1. CSS 教程 — 学习如何给 HTML 添加样式
  2. JavaScript 教程 — 学习如何让页面动起来
  3. 实践项目 — 用学到的知识做一个完整的网页

恭喜你完成了 HTML 教程的全部内容!你已经掌握了构建网页骨架的所有基础知识。