Checklist-first: phân biệt "điểm SEA đẹp" vs "compliant pháp lý thật", 18 tiêu chí chia mấy nhóm, đâu là điểm giả app tự mark solved, đâu là nhiễu, và flow DFY CS triage → TS fix thật đi như thế nào.
| Nhóm | Ai lo | Bản chất | Tiêu chí |
|---|---|---|---|
| A · Widget-cover | App tự / verify | Widget bật là được cộng điểm (kể cả chưa fix gốc) | 1.4.11, 2.4.11, 2.5.8, 3.3.2 |
| B · AI alt-text | App (có điều kiện) | Bật feature là cộng điểm; alt sinh runtime | 1.1.1, 4.1.2, 4.1.3 |
| E · Theme/content fix | TS (fix thật) / merchant | Phải sửa trong theme hoặc admin content | 1.3.1, 1.4.13, 2.2.6, 2.4.2, 3.1.1, 3.2.1, 3.2.2, 3.3.3, 3.3.4, 3.3.8, 4.1.1 |
App KHÔNG fix gì, widget không đụng tới:
Buổi này tập trung vào 6 lỗi critical (mục kế tiếp).
Trừ nhẹ hơn nhưng vẫn tính vào score chung.
Chỉ số riêng, ước lượng rủi ro pháp lý theo issue tồn đọng.
| WCAG | Tên | Xử lý | Nghĩa 1 câu |
|---|---|---|---|
| 1.3.1 | Heading structure / thiếu H1 | TS fix theme | Trang không có H1 hoặc nhảy cấp heading (H2→H4) |
| 3.3.4 | Thiếu bước confirm (legal/financial) | TS fix theme | Form dữ liệu quan trọng không có bước review/confirm |
| 3.3.8 | Auth khó (cognitive) | TS fix theme | Ô mật khẩu yêu cầu phức tạp mà không có cơ chế hỗ trợ |
| 1.1.1 | Missing/empty alt | AI-credit / admin | Ảnh không có mô tả — credit nếu bật AI alt-text, else fix tay |
| 4.1.2 | Thiếu accessible name | AI-credit / TS theme | Nút icon (giỏ hàng, search) không có tên cho screen reader |
| 2.4.11 | Focus bị che (overlay) | AUTO solvedBySea | Critical nhưng app tự credit → không tốn công fix cho điểm |
wcagSeverity.js), app-guide gọi 3.3.2 là
critical là SAI (code = minor).
| WCAG | Vì sao nhiễu |
|---|---|
| 2.2.6 (tệ nhất) | Báo bất kỳ script có setTimeout/session/timeout/expire — theme thường có 15-30 script như vậy |
| 2.4.11 | Chỉ match class .modal/.popup/.overlay/.drawer, không kiểm tra che thật |
| 2.5.8 | Đoán theo class sm/small/btn-sm — không đo pixel thật |
| 3.2.1 | Script có cả "focus" và "redirect/submit" là nghi, dù không liên quan |
| 3.3.4 | Heuristic keyword + đếm field; mark Done nếu không có form dữ liệu quan trọng |
| 4.1.3 | Match class status/alert/toast mà không kiểm tra element có động thật không |
| 1.4.11 | Không đo tỉ lệ tương phản thật, chỉ xem inline style border/outline |
CS không fix theme, nhưng check sơ được ngay trong DevTools để (a) xác nhận issue có thật, (b) lọc bớt false-positive, (c) biết widget/scan có chạy không. Mở: F12.
Tab Console — 3 snippet paste-ready:
// H1 (1.3.1) — phải = 1
document.querySelectorAll('h1').length;
// Alt (1.1.1) — số ảnh thiếu alt, 0 = ổn
[...document.querySelectorAll('img')]
.filter(i=>!i.alt||!i.alt.trim()).length;
// Accessible name (4.1.2)
[...document.querySelectorAll('a,button,[role="button"]')]
.filter(el=>!el.getAttribute('aria-label')&&!el.textContent.trim()
&&!el.title&&el.offsetParent!==null).length;
Chuột phải phần tử nghi ngờ → Inspect → xem có alt/aria-label không (đối chiếu locations trong issue của scan).
Reload → filter avada hoặc accessibility. Thấy request = widget/embed đang chạy. Không thấy gì = embed OFF → cờ đỏ, đừng báo khách "đã fix".
Chỉ check + báo, KHÔNG sửa theme. Lỗi thật → assign TS. Console/Elements sạch mà scan vẫn báo → nghi false-positive, ghi chú cho TS lọc.
Khách đang bị kiện ADA, đòi "chứng nhận 100% WCAG 2.2 AA". → Ta chỉ đưa technical review statement (phạm vi scan), KHÔNG ký chứng nhận pháp lý. Re-scan sau mỗi fix.
Nhận demand letter tiền tố tụng. → Escalate BA/PM ngay, audit chủ động, phân biệt lỗi in-scope (CS/TS) vs out-of-scope (app 3rd-party như review, Globo).
→ Buổi 2: đi sâu cách CHECK từng lỗi critical (inspect H1, inspect alt...) + cách FIX + verify.