大結構標籤(<nav><main><article>)大家都知道要用,但 HTML 還有一批語意標籤——不是最潮、不是最常見,但每次你用 <span><div> 代替它們,就是在讓爬蟲、螢幕閱讀器、以及三個月後的自己多猜一次。

這篇逐一說清楚什麼時候該用哪個,附上真實情境。


<time> — 讓機器讀得懂你的日期

你現在可能這樣寫:

<span class="date">2026 年 4 月 21 日</span>

爬蟲看到這串文字,不知道這是「日期」還是「地址的一部分」還是「標題」。

應該這樣寫:

<time datetime="2026-04-21">2026 年 4 月 21 日</time>

datetime 屬性是機器讀的(ISO 8601 格式),標籤內文是人看的。Google 用這個抓文章的發布時間;螢幕閱讀器用這個讓使用者聽到正確的日期語意。

常見用途:

<!-- 文章發布時間 -->
<time datetime="2026-04-21T09:00">今天早上九點</time>
 
<!-- 持續時間(P = Period,1H = 1 小時) -->
<time datetime="PT1H30M">一小時三十分鐘</time>
 
<!-- 年月(不指定日期) -->
<time datetime="2026-04">2026 年四月</time>

<abbr> — 縮寫第一次出現就解釋清楚

常見錯誤:全文都用縮寫,沒解釋過一次。

<!-- 讀者第一次看到不知道 API 代表什麼 -->
<p>我們透過 API 取得資料。</p>

加上 <abbr>

<p>我們透過 <abbr title="Application Programming Interface">API</abbr> 取得資料。</p>

滑鼠 hover 會顯示 tooltip,螢幕閱讀器會讀出全名。同一篇文章只需要在第一次出現時加,後面的縮寫不用每個都包。


<details> + <summary> — 不需要 JavaScript 的 accordion

你曾經為了做一個「點擊展開」的區塊寫了幾十行 JS + CSS 嗎?

<details>
  <summary>什麼是 CORS?</summary>
  <p>
    Cross-Origin Resource Sharing,跨來源資源共用。瀏覽器的安全機制,
    限制網頁腳本只能請求同來源的資源,除非伺服器明確允許。
  </p>
</details>

瀏覽器原生支援展開/收合,不需要 JS,不需要 ARIA,鍵盤可操作,螢幕閱讀器也能正確讀出狀態。

適合的場景:

  • FAQ 頁面
  • 說明文件裡的補充解釋
  • 設定面板的進階選項

不適合的場景:

  • 需要動畫過渡效果的 accordion(原生版沒有,要加需要 CSS + JS trick)
  • 多個項目互斥展開(需要自己加邏輯)

<address> — 聯絡資訊,不只是地址

<address> 常被誤解為「實體地址標籤」,但它的語意是文件或文章作者的聯絡資訊

<!-- 文章作者資訊(放在 <article> 裡) -->
<article>
  <h2>前端架構決策</h2>
  <address>
    作者:<a href="mailto:terry@example.com">Terry Yao</a>
  </address>
  <p>...</p>
</article>
 
<!-- 網站整體聯絡資訊(放在 <footer> 裡) -->
<footer>
  <address>
    <a href="mailto:hello@example.com">聯絡我們</a> ·
    台北市信義區某某路 100 號
  </address>
</footer>

注意<address> 裡面不要放跟聯絡資訊無關的內容,它不是通用的「資訊卡」容器。


<search> — 2023 年才正式標準化的 landmark

HTML 的 <search> 是 2023 年初才正式進 HTML 規範的新標籤,對應 ARIA 的 role="search"

<search>
  <form action="/search">
    <label for="q">搜尋</label>
    <input id="q" type="search" name="q">
    <button type="submit">送出</button>
  </form>
</search>

以前要讓螢幕閱讀器識別「這是搜尋區塊」,需要手動加 role="search"<div> 上。現在用 <search> 原生語意就夠。

瀏覽器支援度 2024 年底已經全線 Evergreen,可以用了。


<cite> — 引用的是作品名稱,不是人名

<cite> 用來標記創意作品的名稱(書名、電影名、歌名、文章標題、軟體名稱),不是用來標記引用者的名字。

<!-- 正確:引用作品名稱 -->
<p>
  我最近在重讀 <cite>Clean Code</cite>,覺得命名的那章值得反覆看。
</p>
 
<!-- 錯誤:用來標記人名 -->
<p>— <cite>Robert C. Martin</cite> 說</p>  <!-- ❌ 這是人名,不是作品 -->

<blockquote> 的引文來源用 <cite> 標記是標準做法:

<blockquote>
  <p>任何傻瓜都能寫出電腦能看懂的程式;好的程式設計師寫出人能看懂的程式。</p>
  <footer>— <cite>Martin Fowler</cite>, <cite>Refactoring</cite></footer>
</blockquote>

<small> — 法律文字、版權聲明、補充說明

<small> 的語意是「附屬細則」(fine print):版權聲明、法律免責聲明、條款說明。不是「我想要小一點的字」。

<footer>
  <small>© 2026 Terry Yao. 本站文章採 CC BY-NC 授權,轉載請附出處。</small>
</footer>
 
<!-- 商品價格旁的稅後說明 -->
<p>NT$1,200 <small>(含稅)</small></p>

想要視覺小字 → 用 CSS font-size <small> 是語意,不是樣式。


<figure> + <figcaption> — 不只是圖片

semantic.md 有帶過這組,但這裡補幾個常被忽略的用途:

<!-- 程式碼區塊加說明 -->
<figure>
  <pre><code>const add = (a, b) => a + b;</code></pre>
  <figcaption>圖 1:箭頭函式寫法</figcaption>
</figure>
 
<!-- 引言 -->
<figure>
  <blockquote>
    <p>Make it work, make it right, make it fast.</p>
  </blockquote>
  <figcaption>— Kent Beck</figcaption>
</figure>
 
<!-- 影片 -->
<figure>
  <video src="demo.mp4" controls></video>
  <figcaption>示範:拖曳排序的互動效果</figcaption>
</figure>

<figure> 的核心定義是「可以從文章主流程移走、但仍然有關聯的內容」——不限圖片,程式碼、圖表、引言、影片都適用。


快速選擇指南

情境標籤
日期 / 時間<time datetime="...">
縮寫第一次出現<abbr title="...">
點擊展開的內容<details> + <summary>
作者 / 聯絡資訊<address>
搜尋表單的外框<search>
作品名稱(書、電影、文章)<cite>
版權宣告 / 法律細則<small>
圖片 / 程式碼 / 引言 + 說明<figure> + <figcaption>

相關文章