Skip to content

header、nav、main、footer:地標元素與網頁結構訊號

地標元素與網頁結構訊號:header、nav、main、footer

地標元素(Landmark)是一組用來標示 版面角色 的標籤。它們回答的是「哪一段是主要內容、哪一段是導覽、哪一段是附註」,這也是 語意化 HTML 最直接的價值。

五個地標元素

元素角色一頁幾個
<header>頁首或區塊的檔頭多個
<nav>主要的導覽連結區多個
<main>這一頁的主要內容只能一個
<aside>與主內容相關但可獨立的附註多個
<footer>頁尾或區塊的結尾多個

main 只能一個

這是硬性規定,不是建議

規格規定一頁只能有 一個可見的 <main>。理由很直接:它的意義就是「這一頁的主要內容在這裡」,有兩個就沒有意義了。

html
<!-- 錯誤:兩個 main -->
<main class="article">...</main>
<main class="sidebar">...</main>

<!-- 正確 -->
<main>...</main>
<aside>...</aside>

分頁式介面(Tab)常讓人想用多個 <main>。正確做法是把切換的區塊放在 同一個 <main> 裡:

html
<main>
  <div role="tabpanel" aria-labelledby="tab-1">第一個分頁的內容</div>
  <div role="tabpanel" aria-labelledby="tab-2" hidden>第二個分頁的內容</div>
</main>

main 是最值得優先做的一個

如果只加一個地標元素,就加 <main>。它直接回答了「哪一段是主要內容」,讓搜尋引擎不必靠文字量比例去猜。

這兩個是 相對於所在區塊 的,不是專屬於整頁:

html
<body>
  <header>
    <!-- 這是整頁的頁首 -->
    <img src="/logo.svg" alt="網站標誌">
  </header>

  <main>
    <article>
      <header>
        <!-- 這是這篇文章的檔頭 -->
        <h1>文章標題</h1>
        <p>發佈於 2026-09-07</p>
      </header>

      <p>內文……</p>

      <footer>
        <!-- 這是這篇文章的結尾資訊 -->
        <p>作者:Away</p>
      </footer>
    </article>
  </main>

  <footer>
    <!-- 這是整頁的頁尾 -->
    <p>Copyright © 2026</p>
  </footer>
</body>

放在 body 直屬層時才是「整頁的」

<header><footer> 只有直接放在 <body> 下(或者說不在 <article><section><aside><nav> 裡)時,才被視為整頁的頁首與頁尾地標。

不要把所有連結區都包起來

<nav> 是給 主要的導覽區塊 用的。全部包起來反而讓地標失去指向性,螢幕閱讀器的地標清單裡出現十個「導覽」,使用者根本不知道該進哪一個。

該包不該包
全站主選單內文中零散的連結
分類或側邊選單單一的「返回列表」連結
麵包屑社群分享按鈕
分頁導覽頁尾的版權連結
文章內的目錄「延伸閱讀」卡片區(除非它是主要導覽)

多組 nav 要取名

一頁有多組導覽時,用 aria-label 給每一組取名:

html
<nav aria-label="主要導覽">
  <ul>
    <li><a href="/">首頁</a></li>
    <li><a href="/products">商品</a></li>
  </ul>
</nav>

<nav aria-label="麵包屑">
  <ol>
    <li><a href="/">首頁</a></li>
    <li><a href="/products">商品</a></li>
    <li aria-current="page">無線滑鼠</li>
  </ol>
</nav>

<nav aria-label="分頁導覽">
  <a href="?page=2">2</a>
</nav>

名稱不要包含「導覽」二字

螢幕閱讀器會念成「主要導覽 導覽區塊」,重複了。寫 aria-label="主要"aria-label="麵包屑" 就好。

不過中文語境下寫「主要導覽」可讀性較好,兩種寫法都可接受,重點是 每一組的名稱不同

article 還是 section

這是最容易猶豫的一組。判斷標準只有一句話:

這段內容單獨拿出來,還有沒有意義?

內容用哪個為什麼
一篇部落格文章<article>單獨看得懂
一則使用者留言<article>單獨看得懂
一張商品卡片<article>單獨看得懂
文章裡的「常見問題」章節<section>需要上下文
首頁的「最新消息」區塊<section>需要上下文

兩者都需要自己的標題

<section><article> 沒有標題時,它們對大綱就沒有貢獻,那和用 <div> 沒有差別。

html
<!-- 沒有標題,等於白包一層 -->
<section>
  <p>一些內容</p>
</section>

<!-- 有標題,對大綱有貢獻 -->
<section>
  <h2>常見問題</h2>
  <p>一些內容</p>
</section>

純粹為了排版與樣式而包的容器,用 <div> 才對。

aside 的判斷

<aside> 是「與主內容相關,但抽走也不影響主內容完整性」的部分:

適合不適合
側邊欄的推薦文章文章的主要內容
補充說明的方框只是視覺上在旁邊的裝飾
廣告區塊主要的導覽選單(用 <nav>
名詞解釋頁尾資訊(用 <footer>

一份完整的骨架

html
<body>
  <header>
    <a href="/"><img src="/logo.svg" alt="網站標誌"></a>
    <nav aria-label="主要導覽">
      <ul>
        <li><a href="/products">商品</a></li>
        <li><a href="/about">關於</a></li>
      </ul>
    </nav>
  </header>

  <nav aria-label="麵包屑">
    <ol>
      <li><a href="/">首頁</a></li>
      <li aria-current="page">文章標題</li>
    </ol>
  </nav>

  <main>
    <article>
      <header>
        <h1>文章標題</h1>
      </header>

      <p>導言……</p>

      <section>
        <h2>第一節</h2>
        <p>內容……</p>
      </section>

      <section>
        <h2>常見問題</h2>
      </section>
    </article>
  </main>

  <aside>
    <h2>熱門文章</h2>
    <ul>
      <li><a href="/a">文章 A</a></li>
    </ul>
  </aside>

  <footer>
    <p>Copyright © 2026</p>
  </footer>
</body>

對無障礙的作用

地標元素同時是螢幕閱讀器的 跳段導航 依據。使用者可以直接跳到「主要內容」而不必聽完整個導覽選單。

這是和 SEO 高度重疊的部分

搜尋引擎需要知道「哪一段是主內容」,螢幕閱讀器使用者也需要。做好一邊通常另一邊跟著改善,細節見 無障礙與 SEO 的交集

檢查清單

項目標準
主要內容包在 <main>建議
一頁只有一個 <main>必備
主選單包在 <nav>建議
多組 <nav> 各有 aria-label建議
沒有把零散連結都包成 <nav>建議
<section><article> 都有標題建議
純排版用的容器是 <div>建議

常見問題

地標元素對排名有直接幫助嗎?

沒有直接的加分,但它讓搜尋引擎不必猜哪一段是主要內容。猜錯的後果很具體:側邊欄的推薦文章被當成主內容,摘要就抓錯段落;頁尾的版權宣告被當成內文,頁面主題就模糊掉。

main 一頁真的只能有一個嗎?

規格規定一頁只能有一個可見的主內容元素。這是硬性限制而不是建議,因為它的意義就是「這一頁的主要內容在這裡」,有兩個就沒有意義了。多個分頁式介面應該把切換的區塊放在同一個主內容元素裡。

article 和 section 該怎麼選?

判斷標準是這段內容單獨拿出來還有沒有意義。一篇文章、一則留言、一張商品卡片單獨看得懂,用 <article> ;文章裡的某一章節必須放在上下文中才有意義,用 <section> 。兩者都需要自己的標題。

一頁可以有幾個 nav?

可以有多個,例如:主導覽、麵包屑、頁尾導覽。這時要用 aria-label 給每一組取名,否則螢幕閱讀器的地標清單裡會出現好幾個都叫導覽的項目,使用者無法分辨。

所有連結區都要包在 nav 裡嗎?

不用。導覽元素是給主要的導覽區塊用的,例如:全站選單、分類選單、麵包屑。內文中零散的連結、單一的返回連結、社群分享按鈕都不必包,全部包起來反而讓地標失去指向性。

延伸閱讀

參考資料:MDN:aria 地標角色