Semantic HTML là lớp nền của A11y. Nếu markup đã đúng vai trò, rất nhiều vấn đề accessibility sẽ tự biến mất: screen reader hiểu cấu trúc, keyboard user có điểm bấm đúng, công cụ tìm kiếm đọc nội dung rõ hơn.

A layered layout showing header, main, article, button and label blocks.
Vì sao semantic quan trọng?
Không phải mọi phần tử đều có tác dụng giống nhau. <button> có hành vi keyboard sẵn, <a> có ý nghĩa điều hướng, <label> gắn nhãn cho input, còn <main>, <nav>, <article> giúp chia vùng nội dung rõ hơn.
Nếu dùng <div> cho tất cả, bạn sẽ phải vá rất nhiều bằng JavaScript và ARIA. Đó là cách làm ngược.
Những thẻ nên ưu tiên
header,nav,main,footercho landmark.button,a,label,input,select,textareacho interaction.h1đếnh6cho cấu trúc tài liệu.section,article,asidecho vùng nội dung có ý nghĩa.figurevàfigcaptioncho ảnh/diagram có chú thích.
3 lỗi hay gặp
- Dùng
div role="button"thay vìbutton. - Nhảy heading từ H2 sang H4 chỉ để “đúng design”.
- Gắn ARIA vào một markup đã sai thay vì sửa semantic gốc.
Ví dụ rewrite ngắn
<!-- Sai -->
<div class="btn" onclick="submitForm()">Gửi form</div>
<!-- Đúng -->
<button type="submit" class="btn">Gửi form</button>
Chỉ một dòng thay đổi nhưng bạn đã lấy lại keyboard support, focus style, và native semantics.
Bài nên đọc tiếp
- Các thẻ tag HTML5 phổ biến nhất
- Những lỗi cơ bản khi sử dụng HTML5
- Web Accessibility là gì và tại sao lập trình viên cần quan tâm?
SEO checklist trước khi publish
- Title có từ khóa “Semantic HTML” và intent rõ.
- Intro đi thẳng vào vấn đề, không lan man.
- Heading chỉ dùng text thuần, không nhồi số thứ tự.
- Ít nhất 2 internal links tới bài nền tảng và bài liên quan.
- Media có mô tả thay vì chỉ là ảnh trang trí.
Tham khảo thêm: aria-labelledby – MDN