aria-label, aria-labelledby và aria-describedby nhìn giống nhau, nhưng vai trò của chúng khác nhau. Nếu phân biệt không rõ, bạn sẽ dễ tạo ra markup vừa dài, vừa sai nghĩa, vừa khó bảo trì.

A labeled button, a reference label and a longer description connected by arrows.
Khác nhau cơ bản
aria-label: đặt tên trực tiếp cho control khi trên DOM không có text phù hợp.aria-labelledby: lấy tên từ một hoặc nhiều phần tử khác trong DOM.aria-describedby: cung cấp mô tả dài hơn, thường là hint, note hoặc error.
MDN cũng nhấn mạnh rằng label nên ngắn gọn, còn description là phần giải thích thêm. Xem thêm: aria-describedby.
Khi nào dùng aria-label?
Dùng khi control không có text hữu ích, ví dụ nút icon, nút đóng modal, nút search chỉ có biểu tượng. Nếu control đã có text nhìn thấy rõ thì thường không cần.
<button aria-label="Đóng hộp thoại">
<svg aria-hidden="true">...</svg>
</button>
Khi nào dùng aria-labelledby?
Dùng khi bạn đã có một label visible trong DOM và muốn lấy nó làm accessible name. Đây là lựa chọn tốt cho heading, form group, hoặc card có tiêu đề rõ ràng.
<h2 id="settings-title">Cài đặt thông báo</h2>
<div role="region" aria-labelledby="settings-title">...</div>
Khi nào dùng aria-describedby?
Dùng cho hint text, ghi chú phụ hoặc lỗi validate. Nó không thay thế label; nó chỉ bổ sung thông tin.
<label for="email">Email</label>
<input id="email" type="email" aria-describedby="email-hint email-error">
<p id="email-hint">Dùng email công ty nếu có.</p>
<p id="email-error">Email chưa đúng định dạng.</p>
Sai lầm phổ biến
- Gắn
aria-labelvào phần tử đã có text rõ ràng, làm screen reader đọc dư. - Dùng
aria-labelledbytrỏ đến element không tồn tại hoặc bị trùng id. - Nhét cả đoạn văn dài vào
aria-labelthay vì dùng description thật. - Dùng ARIA để “sửa” semantic HTML thay vì dùng đúng element native.
Bài nên đọc tiếp
- aria-label là gì và sử dụng như thế nào?
- Sử dụng thuộc tính aria-label trong quy ước WCAG 2.0
- 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 chứa đủ 3 keyword chính: aria-label, aria-labelledby, aria-describedby.
- Ngay intro đã nói rõ khác biệt.
- Có code sample ngắn, dễ copy.
- Internal link đi tới bài A11y nền và bài ARIA hiện có.
- Không lạm dụng thuật ngữ nếu không giải thích kèm ví dụ.
Tham khảo thêm: MDN aria-describedby và MDN aria-labelledby.