Kalan's Blog

Kalan 頭像照片,在淡水拍攝,淺藍背景

四零二曜日電子報上線啦!訂閱訂起來

Software Engineer / Taiwanese / Life in Fukuoka
This blog supports RSS feed (all content), you can click RSS icon or setup through third-party service. If there are special styles such as code syntax in the technical article, it is still recommended to browse to the original website for the best experience.

Current Theme light

我會把一些不成文的筆記或是最近的生活雜感放在短筆記,如果有興趣的話可以來看看唷!

Please notice that currenly most of posts are translated by AI automatically and might contain lots of confusion. I'll gradually translate the post ASAP

比語意化標籤更重要的事

前言

身為一位前端工程師,雖然我們不需要把全部的 HTML 標籤背得滾瓜爛熟,但是常見的 HTML 標籤與使用場景還是要有一定程度的了解,例如 <section><main><article>、h1~h6、<aside><footer><a><button> 等等,根據不同場景使用。

但是,使用語意化標籤的目的是什麼?我發現很多文章對於語意化標籤往往只停在表面,也就是討論某某標籤應該使用在哪裡,導致網頁上的標籤看似多彩繽紛,但使用者體驗卻沒有得到相對的提升。

我覺得這樣很容易讓前端開發者有錯誤的認知,認為沒有使用語意化標籤是一件十惡不赦的事情,甚至下意識地避免去用 <div> <span>,因此在這邊分享一些我的看法。

一些歷史因素

在早期的 HTML 中,有很多非語意標籤像是 <b><font><center> 等等,這些標籤不具有意義,只是單純用來修飾樣式。後來 CSS 出現後,樣式的處理就不需要用標籤來描述了。這應該是語意化標籤一詞最早出現的背景,HTML5 也已經刪除掉這些純裝飾用的標籤了。

語意化標籤的目的

對我來說,語意化標籤主要是為了達成這三個目的:

  • 無障礙設計(Accessibility),透過適當的 HTML 標籤讓閱讀器可以更好地讀出內容
  • 幫助搜尋引擎了解頁面結構,進而提高 SEO

因此,整篇文章也會圍繞在這兩個論點做論述。

HTML 標籤不夠用

在建構網頁時,有經驗的開發者會根據頁面的性質分為 main、nav、aside、footer 等等,畫分出頁面的主要架構;在製作表單的時候,有經驗的開發者也會加入 label、對應的 input 等,盡可能善用瀏覽器原生的功能。

這些區分當然沒有問題,只是這種表達方式往往忽略了最重要的一件事,網頁上的互動相當多元,有很多 UI 元件是單用現有的 HTML 標籤沒辦法輕易表達清楚的。

前端工程師可以按照上述的大原則來建構 layout,但如果 UI 元件並沒有涵蓋在 HTML 標籤當中,很容易就陷入要什麼標籤比較好的迷思。舉例來說像是 tooltip、carousel、notification bar、聊天室等 UI 元件,要用哪個標籤描述才好?

這是開發上常常遇到的問題,但很多文章並不會提到。

從 accessibility 的角度切入

語意化標籤並非目的,而是手段。對我來說,語意化最重要的目的是達到 accessibility。透過原生的 HTML 標籤,我們可以減少自行實作的麻煩與不一致性,以最小成本達到最好的效果。

從無障礙設計的角度來看,問題的解決方案就會變得很清楚。

如果無障礙功能有做好,整個網站都用 div 做也可以有很好的體驗(理論上可行,不過要考慮的東西跟眉角很多,基本上不會這麼做)

不去探討 accessibility,到處宣揚語意化標籤,我會覺得只是想要追求政治正確而已。

就以剛剛提到的 notification bar 來看好了,請問一下在這種狀況,我應該使用哪個 HTML 標籤呢?在語意化標籤就是常會出現這種曖昧的情況,或是根本沒有一個好的標籤來描述這個 UI。

但只要從 accessibility 的角度出發,你會發現整個問題圍繞在幾個重點上:

  • screen reader 能否得知 notification bar 的變化?
  • 使用者可否使用非滑鼠的操作關閉 notification bar?(或其他方式)

這些都是會影響使用者體驗的要素。

在這個情況當中,比起思考到底要用什麼標籤才好,專注在如何提供更好的使用者體驗才是更重要的事情。不會因為你用了一個看起來比較「高級」的 HTML 標籤就突然實作完成。

這並不是說 HTML 語意化標籤就不重要了,像是 main、section、article、header、footer 等等,對搜尋引擎辨識頁面結構有很大的幫助。

導入結構化資料(ld-json)

ld-json 是在網頁裡加入對應的 <script> 標籤,並在裡頭透過 JSON 定義網頁的結構,進而讓搜尋引擎更容易解析網頁內容的方式。

除了更容易解析網頁的內容之外,像是評分、新聞、FAQ 之類的頁面,可以讓 Google 或其他搜尋引擎直接生出一個特化過後的結果頁面,幫助使用者更容易找到所需要的資料。

語意化標籤與 SEO

爬蟲會去參考像是 h1h2h3 等等的結構,也會透過 main 之類的標籤來試圖解析內容。所以一定程度上開發者還是要去理解 HTML 標籤。

不過,如果使用 HTML 語意化標籤的重點是在 SEO 上的話,那麼身為前端工程師,你更應該關注其他對 SEO 更有影響的因素:

  • <head> 當中有沒有確實加入 title、description、sitemap 等幫助 SEO 的 meta
  • 有沒有加入對應的 open graph meta,例如給 Twitter 或 Facebook 看的預覽頁面
  • 有沒有實作 SSR
  • 頁面是否可套用 ld-json?

上述提到的是東西,它對 SEO 的影響是更顯著的。

HTML 標籤結構是最後完善 SEO 最後一塊拼圖。如果搜尋引擎很重視 h1 的話,那以後乾脆大家都全部用 h1 來做網站好了。

未來

我們可以想見,未來會有更多 HTML 標籤加入,瀏覽器能夠支援的原生 UI 也會越來越多。在這篇文章裡提到的 UI 元件如 tab、notification 等,未來可能都有對應的標籤可以使用。然而大原則是相同的,只要我們在開發時去思考使用者會如何和 UI 互動,瀏覽器可以做到哪些功能,使用正確的標籤就會是自然而然的結果,而非一昧的去追求語意化標籤。

結論

過度追求 HTML 語意化標籤是一件本末倒置的事。

語意化標籤是在開發者在考慮 SEO 與無障礙設計後自然而然得到的結果。如果從一開始就有把這些因素考慮進去,那麼開發者自然會去選擇適當的標籤,並且加入對應的無障礙設計。

參考

Prev

無線機械鍵盤調查

Next

興趣使然的研究之旅

If you found this article helpful, please consider buy me a drink ☕️ It'll make my ordinary day shine✨

Buy me a coffee