ข้ามไปยังเนื้อหา

Semantic Structure

คุณคงเคยใช้ <div> เพื่อจัดกลุ่มสิ่งต่าง ๆ — เป็น container ที่เป็นกลาง ไม่มีความหมายในตัวเอง HTML ยังมีชุดของ container ที่ มี ความหมายให้คุณด้วย container กลุ่มนี้เรียกว่า semantic element และจับคู่ได้แทบจะสมบูรณ์แบบกับ region ที่คุณกำหนดไว้อยู่แล้วในดีไซน์ Figma ของคุณ

“Semantic” แปลว่า “มีความหมาย” นั่นแหละ เมื่อคุณใช้ <header> แทน <div class="header"> ทั้ง browser screen reader และ search engine ต่างเข้าใจว่า region นั้น คืออะไร — ไม่ใช่แค่ว่าหน้าตาเป็นอย่างไร

HTML elementความหมายสิ่งที่เทียบเท่าใน Figma
<header>เนื้อหาเกริ่นนำของหน้าหรือ section — มักเป็นโลโก้ ชื่อเว็บไซต์ และ nav ด้านบนframe ระดับบนสุดที่มี branding
<nav>บล็อกของลิงก์ navigationframe ของ navigation component
<main>เนื้อหาหลักที่ไม่ซ้ำใครของหน้า (ใช้ครั้งเดียว)frame ของพื้นที่เนื้อหาหลัก
<section>กลุ่มเนื้อหาตามธีม โดยทั่วไปมี heading ของตัวเองframe ของ section บน canvas
<article>เนื้อหาชิ้นหนึ่งที่อ่านได้อย่างมีความหมายในตัวเอง — บล็อกโพสต์ การ์ด ข่าวการ์ดหรือ component ของโพสต์
<aside>เนื้อหาที่เกี่ยวข้องทางอ้อมกับเนื้อหาหลัก — sidebar หรือ calloutframe ของ sidebar
<footer>เนื้อหาปิดท้าย — ลิขสิทธิ์ ลิงก์รอง ข้อมูลติดต่อframe ด้านล่าง
  1. Screen reader ใช้ landmark เหล่านี้เพื่อให้ผู้ใช้กระโดดตรงไปยังเนื้อหา <main> ได้เลย โดยข้าม header และ nav ในทุกหน้า นั่นคือการปรับปรุง usability ครั้งใหญ่สำหรับผู้ใช้ที่ตาบอด
  2. Search engine เข้าใจว่าเนื้อหาใน <article> คือข้อความหลักของหน้า และให้น้ำหนักตามนั้น
  3. ทีมของคุณเอง สามารถอ่าน HTML แล้วเข้าใจ layout ของหน้าได้ในพริบตา โดยไม่ต้องไปถอดรหัสจากชื่อ class

ดูสิว่าแต่ละ region จับคู่กับ element ที่มีชื่อได้ชัดเจนแค่ไหน ลองเปลี่ยน <section> เป็น <div> ดู — หน้าเว็บจะดูเหมือนเดิมเป๊ะ แต่ความหมายหายไปแล้ว ความแตกต่างที่มองไม่เห็นนี่แหละคือหัวใจของ semantics

  • ใช้ <div> ทุกที่แทน <header>/<nav>/<main>/<footer>
  • ใส่ heading (h1-h6) ตาม “ขนาดตัวอักษรที่อยากได้” แทนตาม hierarchy จริงของเนื้อหา

Designer เห็น “ส่วนบน ส่วนกลาง ส่วนล่าง” แต่ developer เห็นว่า semantic tag ให้ screen reader และ SEO เข้าใจโครงสร้างเพจได้โดยไม่ต้องอ่าน CSS เลย

💡 ตัวอย่างจากของจริง

Medium ใช้ <article> และ <header> ที่ชัดเจน ทำให้ browser reader mode ดึงเนื้อหาบทความออกมาแสดงได้อัตโนมัติ

element ใดควรห่อเนื้อหาหลักที่ไม่ซ้ำใครของหน้าเว็บ?
ประโยชน์หลักของการใช้ <nav> แทน <div class="nav"> คืออะไร?
element ใดห่อบล็อกโพสต์หรือข่าวได้ดีที่สุด — เนื้อหาที่อ่านได้อย่างมีความหมายในตัวเอง?
หนึ่งหน้าควรมี <main> element กี่ตัว?