HTML ngữ nghĩa là gì
HTML ngữ nghĩa là chọn mỗi thẻ theo đúng bản chất của nội dung: điều hướng nằm trong <nav>, nội dung chính trong <main>, một bài blog trong <article>. Các thẻ này trông như những khối bình thường, nhưng chúng cho trình duyệt, trình đọc màn hình và công cụ tìm kiếm biết mỗi phần của trang làm gì. Đây là một trang hoàn chỉnh dựng từ các thẻ bố cục ngữ nghĩa, mỗi thẻ được viền và gắn nhãn:
Xóa phần tử <style> thì trang trông như chữ thường, nhưng cấu trúc vẫn còn đó cho bất kỳ ai đọc code, và cho phần mềm đọc trang mà không nhìn vào điểm ảnh.
Các thẻ bố cục ngữ nghĩa
| Thẻ | Dùng cho | Landmark của trình đọc màn hình |
|---|---|---|
<header> | Phần mở đầu của trang hoặc của một bài viết: logo, tiêu đề, tên tác giả | banner (chỉ khi không nằm trong article, aside, main, nav hoặc section) |
<nav> | Một khối liên kết điều hướng chính | navigation |
<main> | Nội dung riêng của trang này, một lần mỗi trang | main |
<article> | Một nội dung độc lập, tự có nghĩa: bài viết, bình luận, thẻ sản phẩm | không có theo mặc định |
<section> | Một nhóm nội dung theo chủ đề, có tiêu đề riêng | region, chỉ khi có tên truy cập |
<aside> | Nội dung liên quan nằm bên cạnh mạch chính: thanh bên, ghi chú | complementary |
<footer> | Thông tin kết thúc của trang hoặc bài viết: bản quyền, tác giả, liên kết | contentinfo (chỉ ở cấp trang) |
Mỗi thẻ có trang riêng với nhiều chi tiết hơn: header, nav, section và footer. Trang này nói về cách chúng ghép lại với nhau.
Sao không dùng luôn div
Một trang chỉ dựng từ các phần tử <div> có thể trông y hệt một trang ngữ nghĩa. Khác biệt nằm ở những gì mã HTML nói lên. Nhấn các nút để viền các phần tử mang ý nghĩa trong mỗi phiên bản:
Phiên bản div tìm được 0, phiên bản ngữ nghĩa tìm được 4. Đó là thứ mà công nghệ hỗ trợ nhìn thấy: người dùng trình đọc màn hình có thể nhảy thẳng tới phần điều hướng hoặc nội dung chính trên trang ngữ nghĩa, còn trên trang div thì phải đọc qua mọi thứ. Tên class như class="nav" chẳng có ý nghĩa gì với trình duyệt.
<div> vẫn là lựa chọn đúng cho những khối chỉ dùng để định dạng hoặc dàn bố cục, như lớp bọc flex .cols trong ví dụ đầu tiên.
main, article và aside
<main> bọc phần riêng của trang này và chỉ xuất hiện một lần. Bên trong nó, <article> đánh dấu nội dung vẫn có nghĩa khi được sao chép riêng sang trang web khác, còn <aside> đánh dấu nội dung có liên quan nhưng có thể bỏ đi mà không làm hỏng bài viết:
Bài viết có <header> và <footer> riêng. Hai thẻ này không chỉ dùng ở cấp trang: mỗi thẻ mở đầu hoặc kết thúc article hay section gần nhất chứa nó. Phần tử <time datetime> cho ngày tháng ở dạng máy đọc được, trong khi vẫn hiển thị ở dạng con người đọc được.
Kiểm tra dàn ý tiêu đề
Tiêu đề là nửa còn lại của cấu trúc. Người dùng trình đọc màn hình thường di chuyển trong trang theo từng tiêu đề, nên các cấp tiêu đề phải đọc như một mục lục và không bỏ cấp nào. Script này in ra dàn ý của trang mà nó chạy trong đó:
h4 dưới "Brewing" bỏ qua một cấp. Đổi nó thành h3 và dàn ý sẽ đọc trơn tru. Hãy chọn cấp tiêu đề theo cấu trúc, và đổi cỡ chữ bằng CSS nếu bạn muốn chúng to hơn hay nhỏ hơn.
Các thẻ ngữ nghĩa khác
Ngữ nghĩa không chỉ là chuyện bố cục. Các thẻ cấp văn bản này cũng mang ý nghĩa:
| Thẻ | Ý nghĩa |
|---|---|
<strong> | Chữ quan trọng (in đậm theo mặc định) |
<em> | Nhấn mạnh (in nghiêng theo mặc định) |
<figure> và <figcaption> | Một hình ảnh, biểu đồ hoặc đoạn code mẫu cùng chú thích |
<time datetime="..."> | Ngày hoặc giờ ở dạng máy đọc được |
<address> | Thông tin liên hệ của tác giả trang hoặc bài viết |
<mark> | Chữ được tô sáng, như một kết quả tìm kiếm khớp |
<abbr title="..."> | Chữ viết tắt kèm dạng đầy đủ |
<button> | Thứ thực hiện một hành động |
Rê chuột lên chữ viết tắt "W3C" để thấy dạng đầy đủ trong tooltip.
Lỗi thường gặp
- Dùng một thẻ vì vẻ ngoài của nó.
<blockquote>dành cho trích dẫn, không phải để thụt lề;<h3>là một cấp tiêu đề, không phải chữ đậm cỡ vừa. Hãy định dạng bằng CSS. - Bọc mọi thứ trong
<section>. Section nên có tiêu đề và chủ đề. Nếu bạn cần một khối để định dạng, hãy dùng<div>. - Nhiều hơn một
<main>hiển thị. Giữ một main mỗi trang, và đừng bao giờ lồng nó trong<article>,<aside>,<header>,<nav>hay<footer>. - Đặt mọi danh sách liên kết vào
<nav>. Chỉ dùng cho các khối điều hướng chính, như menu của trang web hoặc mục lục. Vài liên kết ở chân trang không cần nav. - Phần tử
<div>bấm được. Một<div onclick>không thể tới được bằng bàn phím. Dùng<button>cho hành động và<a href>cho điều hướng.
Câu hỏi thường gặp
HTML ngữ nghĩa là gì?
HTML ngữ nghĩa là cách viết mã trong đó mỗi thẻ mô tả ý nghĩa của nội dung bên trong: <nav> cho điều hướng, <article> cho một nội dung độc lập, <button> cho một nút bấm. Nhờ vậy trình duyệt, trình đọc màn hình và công cụ tìm kiếm hiểu được trang mà không phải đoán từ tên class hay kiểu định dạng.
Các thẻ ngữ nghĩa trong HTML gồm những thẻ nào?
Các thẻ bố cục là <header>, <nav>, <main>, <article>, <section>, <aside> và <footer>. Những thẻ ngữ nghĩa phổ biến khác gồm <figure>, <figcaption>, <time>, <address>, <strong>, <em> và các thẻ tiêu đề từ <h1> đến <h6>.
div có phải là phần tử ngữ nghĩa không?
Không. <div> không có ý nghĩa riêng; nó là một khối chung để định dạng và dàn bố cục. Dùng div khi không có thẻ ngữ nghĩa nào phù hợp, và dùng <header>, <main>, <nav> cùng các thẻ khác khi có thẻ phù hợp.
Thẻ aside dùng để làm gì?
<aside> chứa nội dung liên quan đến nội dung chính nhưng không nằm trong mạch chính của nó: thanh bên, một hộp liên kết liên quan, một ghi chú thuật ngữ hoặc một trích dẫn nổi bật. Ở cấp trang, trình đọc màn hình liệt kê nó là landmark complementary.
Một trang có thể có bao nhiêu phần tử main?
Mỗi trang có một <main> hiển thị. Nó bọc nội dung riêng của trang đó, và không nên nằm bên trong <header>, <nav>, <article>, <aside> hay <footer>.
HTML ngữ nghĩa có giúp SEO không?
Có, nó giúp công cụ tìm kiếm hiểu phần nào là nội dung chính, phần nào là điều hướng và các tiêu đề liên hệ với nhau ra sao. Bản thân nó không phải là lối tắt để lên hạng, nhưng nó loại bỏ việc phải đoán và cải thiện khả năng tiếp cận, điều vốn đáng làm.