AVADA · TS ELITE
Training nội bộ · Accessibility DFY

Accessibility DFY
Buổi 1: Sơ lược lỗi & flow

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.

ADA / EAA · WCAG AA 18 tiêu chí · 3 nhóm Điểm giả solvedBySea Flow CS → TS
Nhập môn · từ vựng bắt buộc

Ai kiện, chiếu theo chuẩn nào

Luật — cái làm khách mất tiền
  • ADA (Americans with Disabilities Act) — luật Mỹ. Không nêu tiêu chuẩn kỹ thuật nào cả; toà mượn WCAG làm thước đo. Đây là nguồn của gần hết vụ kiện store Shopify.
  • EAA (European Accessibility Act) — luật EU, hiệu lực 6/2025. Khác ADA ở chỗ cơ quan quản lý chủ động kiểm, không chờ ai kiện.
  • Demand letter — thư luật sư đòi tiền dàn xếp, thường tới trước khi có đơn kiện thật. Gặp là escalate BA/PM ngay, TS không trả lời pháp lý.
Chuẩn — cái để đo
  • WCAG (Web Content Accessibility Guidelines) — bộ tiêu chí kỹ thuật. Bản dùng thực tế: 2.1 và 2.2.
  • Mức A / AA / AAA — ba nấc chặt dần. Toà và app đều lấy AA làm mốc. AAA gần như không ai yêu cầu.
  • Mã tiêu chí dạng 1.4.3, 2.4.11 — số này xuất hiện trong report scan, tra ngược ra được đúng tiêu chí WCAG.
  • VPAT / ACR — bản tự khai mức độ tuân thủ. Khách hỏi "cấp cho tôi cái này" → không tự làm, chuyển BA/PM.
Nhập môn · từ vựng bắt buộc

Những chữ sẽ gặp lại suốt cả hai buổi

Người dùng & công cụ
  • Screen reader — phần mềm đọc trang thành tiếng (NVDA, JAWS, VoiceOver). Đây là "người dùng" mà phần lớn tiêu chí WCAG bảo vệ.
  • Keyboard navigation — dùng trang chỉ bằng bàn phím, không chuột. Test nhanh: bấm Tab liên tục.
  • Focus — ô viền quanh phần tử đang được chọn. Mất focus ring = người dùng bàn phím mù đường.
  • Tab order — thứ tự Tab đi qua. Sai thứ tự thì đọc xong nội dung mới tới menu.
Trong code
  • Alt text — chữ mô tả ảnh (alt=""). Ảnh trang trí thì để trống có chủ đích, không phải thiếu.
  • Semantic HTML — dùng đúng thẻ (button cho nút, h1..h6 cho tiêu đề). Sai thẻ là gốc của rất nhiều lỗi.
  • ARIA — thuộc tính bù nghĩa khi HTML không diễn tả nổi (aria-label, role). Lạm dụng còn tệ hơn không dùng.
  • Landmark / skip link — mốc điều hướng và link "bỏ qua menu" để screen reader nhảy thẳng vào nội dung.
  • Contrast ratio — tỉ lệ tương phản chữ/nền. Mốc AA: 4.5:1 chữ thường, 3:1 chữ lớn.
Trong nghề — dễ hiểu sai
  • Overlay widget — lớp phủ chỉnh cosmetic (cỡ chữ, tương phản). Không sửa DOM gốc, nên gỡ app là mất fix.
  • Remediation — sửa gốc trong theme/nội dung. Chỉ cái này tồn tại vĩnh viễn.
  • False positive — scanner báo lỗi nhưng thực tế không lỗi. Bắt khách fix cái này là mất uy tín.
  • Rule-set — bộ luật scanner tự viết. App dùng ~14 checker riêng, không phải axe-core hay Lighthouse, nên điểm không so được với công cụ khác.
  • Solved-by-SEA — app tự đánh dấu "đã xử lý" vài mã mà không sửa gì thật. Xem slide sau.
Checklist nền · thuộc lòng 30 giây

5 điều phải nhớ trước khi vào chi tiết

  • 1Điểm scan cao ≠ an toàn pháp lý. App chấm theo rule-set tự viết (~14 checker), KHÔNG phải axe-core/Lighthouse/WAVE. Không bao giờ hứa "100% WCAG AA".
  • 2Khách bị kiện theo ADA (US) / EAA (EU); chuẩn kỹ thuật = WCAG 2.x AA. Tiền thật + rủi ro kiện, không phải "làm đẹp UI".
  • 3App có 4 thứ: Scanner (18 tiêu chí/35 lỗi con) · Widget (cosmetic, không rewrite DOM) · AI alt-text (điều kiện riêng) · Solved-by-SEA (auto-credit vài mã).
  • 4Gỡ app → fix do widget cung cấp biến mất. Chỉ fix thẳng theme/content mới tồn tại vĩnh viễn ⇒ luôn fix gốc song song.
  • 5Legal document (demand letter / đòi chứng nhận) → escalate BA/PM ngay, không tự trả lời pháp lý; mọi phản hồi về điểm phải kèm disclaimer.
Checklist bức tranh 18 tiêu chí

Chia 3 nhóm owner: A / B / E

NhómAi loBản chấtTiê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
Cạm bẫy "điểm trên giấy": nhóm A auto-credit 4 mã vô điều kiện, kể cả widget chưa cài. Nhóm B credit khi bật AI alt-text. Chi tiết cảnh báo "điểm giả" ở slide kế tiếp.
⚠️ Cảnh giác Checklist mã app TỰ mark "solved"

Badge xanh KHÔNG chứng minh trang đã sạch lỗi

① solvedBySea — credit vô điều kiện

App KHÔNG fix gì, widget không đụng tới:

  • 1.4.11 Non-text contrast — mark solved, không fix thật
  • 2.4.11 Focus not obscured (critical) — mark solved, không fix thật
  • 2.5.8 Target size — mark solved, không fix thật
  • 3.3.2 Labels/instructions — mark solved, không fix thật

② solvedThisIssue — chỉ khi bật AI alt-text

  • 1.1.1 Missing/empty alt — fix THẬT một phần (inject alt client-side, ephemeral, không ghi product data)
  • 4.1.2 Name/role/value — mark solved nhưng KHÔNG fix (code chỉ sinh alt)
  • 4.1.3 Status messages — mark solved nhưng KHÔNG fix
Quy tắc: 7 mã trên = "0 điểm phải lo" CHỈ khi khách cần con điểm SEA. Khách lo pháp lý thật / audit ngoài / đang bị kiện → 6 mã (trừ 1.1.1) VẪN phải fix gốc trong theme dù badge xanh. Đừng để điểm xanh ru ngủ.
Mức độ nghiêm trọng & cách chấm

Critical trừ nặng nhất

CRITICAL

−10 điểm

Ưu tiên nhận diện

Buổi này tập trung vào 6 lỗi critical (mục kế tiếp).

MODERATE / MINOR

−5 / −1 điểm

Điểm sàn 20

Trừ nhẹ hơn nhưng vẫn tính vào score chung.

lawsuitRisk

Ngưỡng ~90

Rủi ro kiện

Chỉ số riêng, ước lượng rủi ro pháp lý theo issue tồn đọng.

6 lỗi CRITICAL (−10 điểm/lỗi) — giới thiệu

Cách check chi tiết để buổi 2

WCAGTênXử lýNghĩa 1 câu
1.3.1Heading structure / thiếu H1TS fix themeTrang không có H1 hoặc nhảy cấp heading (H2→H4)
3.3.4Thiếu bước confirm (legal/financial)TS fix themeForm dữ liệu quan trọng không có bước review/confirm
3.3.8Auth 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.1Missing/empty altAI-credit / adminẢnh không có mô tả — credit nếu bật AI alt-text, else fix tay
4.1.2Thiếu accessible nameAI-credit / TS themeNút icon (giỏ hàng, search) không có tên cho screen reader
2.4.11Focus bị che (overlay)AUTO solvedBySeaCritical nhưng app tự credit → không tốn công fix cho điểm
Ưu tiên fix theo thứ tự trên: 1.3.1 / 3.3.4 / 3.3.8 là 3 lỗi critical luôn phải fix thật (không auto-credit, không AI-credit) — mỗi lỗi fix xong = +10 điểm. 2.4.11 bỏ qua (auto). Severity lấy từ source (wcagSeverity.js), app-guide gọi 3.3.2 là critical là SAI (code = minor).
False-positive / nhiễu

Đừng bắt khách fix vô ích

WCAGVì 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.11Chỉ 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.1Script có cả "focus" và "redirect/submit" là nghi, dù không liên quan
3.3.4Heuristic keyword + đếm field; mark Done nếu không có form dữ liệu quan trọng
4.1.3Match class status/alert/toast mà không kiểm tra element có động thật không
1.4.11Không đo tỉ lệ tương phản thật, chỉ xem inline style border/outline
Scanner dùng heuristic (match class-name, keyword) nên hay báo nhầm — luôn lọc trước khi khuyên khách fix.
Flow DFY mới: CS → TS

CS triage checklist → TS fix thật

  • 1Khách gửi URL storefront (+ password nếu có gate)
  • 2Scan: panel Tools → ♿ Accessibility — DFY Scan (store tự điền) → score, lawsuitRisk, issues[]. Tối đa 10 trang/lần
  • 3Triage: xếp mỗi issue vào nhóm A / B / E
  • 4Lọc false-positive (slide trước) — chạy manual test nếu nghi
  • 5Nhóm A/B (app-side) → verify widget ON / bật AI alt-text
  • 6Nhóm E (theme) → TS FIX THẬT trong theme, có guardrail ★
  • 7Phase 4 verify: embed ON? re-scan? điểm khớp? kiểm tra storefront thật?
  • 8Báo khách: cái nào đã fix, cái nào false-positive (giải thích rõ vì sao)
★ Đổi mới quan trọng (Ray chốt): với nhóm E, TS chủ động vào store/theme khách sửa thật, KHÔNG đẩy khách "tự apply snippet". Guardrail bắt buộc: collaborator đúng scope (Themes), duplicate theme trước khi sửa, verify Phase 4, nhắc khách revoke access. Escalate dev chỉ khi app bug thật.
CS check nhanh DOM/Network · không cần là TS

F12 trước khi assign TS

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;

Tab Elements

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).

Tab Network

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".

Ranh giới của CS

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.

Case kiện thật · 6/2026

Mediriser & Big Joe / ComfortResearch

Mediriser

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.

Big Joe / ComfortResearch

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).

Nguyên tắc vàng: điểm ≠ chứng nhận. Luôn kèm disclaimer (điểm không phải cam kết pháp lý). Legal document → escalate, không tự trả lời.
Recap buổi 1

7 điểm cần nhớ
trước khi qua buổi 2

  • 1Accessibility = rủi ro kiện thật; điểm SEA ≠ compliant pháp lý.
  • 2App: scanner + widget (cosmetic, không rewrite DOM) + AI alt + solved-by-sea.
  • 318 tiêu chí → 3 nhóm A / B / E; critical trừ −10.
  • 4Cẩn thận "điểm trên giấy" (A/B cộng kể cả widget tắt) + false-positive (2.2.6 tệ nhất).
  • 5Flow CS triage → TS fix thật trong theme (guardrail) → Phase 4 verify.
  • 6CS check nhanh được ngay trong DevTools (Console 3 snippet H1/alt/name + Network xem embed có chạy) trước khi assign TS.
  • 7Case kiện: disclaimer + escalate legal, không ký chứng nhận.

→ Buổi 2: đi sâu cách CHECK từng lỗi critical (inspect H1, inspect alt...) + cách FIX + verify.

1 / 11
Accessibility Training · Buổi 1 · 2026
← → chuyển slide · F fullscreen