How to fix: Videos missing captions
Fix videos missing captions by adding a <track kind="captions"> element that points to a WebVTT (.vtt) file, as required by WCAG 1.2.2 Captions (Prerecorded), so deaf and hard-of-hearing users receive the dialogue and meaningful sounds as synchronized text.
What it is
WCAG Success Criterion 1.2.2 Captions (Prerecorded) requires captions for all prerecorded audio content in synchronized media — in practice, any video with a soundtrack needs captions. For native HTML5 video, the mechanism is built in: a <track kind="captions"> child element pointing to a WebVTT file, a plain-text format of time-coded cues that browsers render over the video with a user-toggleable CC button.
Captions are not quite the same thing as subtitles. Captions are written for viewers who cannot hear the audio, so they include speaker identification and meaningful non-speech sound ("[door slams]", "[phone buzzing]") alongside dialogue. Subtitles assume the viewer can hear and typically translate or transcribe dialogue only. WCAG 1.2.2 asks for captions; a <track kind="subtitles"> that actually carries full caption content is common in practice, but kind="captions" states the intent correctly.
The exemption worth knowing: a video with no audio content has nothing to caption. Decorative background loops fall outside SC 1.2.2 — and marking them with the muted attribute both makes that explicit to tools and prevents them from ever playing sound. (Video-only content does still need a text or audio alternative under SC 1.2.1.)
Who it affects & why it matters
Deaf and hard-of-hearing users are the primary audience: without captions, a product demo, testimonial, or tutorial is simply inaccessible content. Roughly one in eight people has some degree of hearing loss, and for them captions are the difference between using your video and skipping your page.
Captions also serve a far wider group: people watching in sound-off environments (a large share of all social and mobile video plays muted), non-native speakers who follow written language more easily than spoken, viewers in noisy places, and anyone who wants to search or skim. Caption text is also crawlable, which means the spoken content of your video can finally count for search and AI engines.
Missing captions fail SC 1.2.2 at Level A, the minimum conformance tier, and WCAG 2.1 Level AA — the standard courts apply to ADA claims — includes it. Media accessibility has produced some of the most prominent accessibility lawsuits on record, including the National Association of the Deaf's cases against Netflix, Harvard, and MIT, all centered on uncaptioned video. A page's uncaptioned video is easy for an auditor to spot and hard to argue away.
The business case runs the same direction: captioned video watches better in feeds, retains muted viewers, reads for non-native speakers, and exposes its transcript to search engines. With accessibility suits rising and most targeting businesses under $25 million in revenue, captioning the handful of videos on a marketing site is one of the highest-visibility fixes per hour of effort available.
How to fix it
- Inventory every <video> on the site and note which ones carry audio (dialogue, narration, meaningful sound).
- Produce a caption file in WebVTT format for each: transcribe manually, or start from an auto-generated transcript and correct names, jargon, and punctuation by hand.
- Include speaker identification and meaningful non-speech sounds, not just dialogue — that's what makes captions rather than subtitles.
- Add the track element: <track kind="captions" src="file.vtt" srclang="en" label="English" default> inside the <video>.
- Mark genuinely silent background loops with the muted attribute so they're recognizably exempt, and for third-party embeds (YouTube, Vimeo) enable captions on the platform itself.
- Play the video with captions on to check sync and accuracy, then re-scan.
<video src="/product-demo.mp4" controls></video><video src="/product-demo.mp4" controls>
<track kind="captions" src="/product-demo.en.vtt"
srclang="en" label="English" default>
</video>How AccessKnight detects this
AccessKnight selects every native <video> element and flags those containing no <track kind="captions"> or <track kind="subtitles"> child. Videos carrying the muted attribute are skipped, since a silenced video presents no audio content to caption. The scan cannot see captions burned into the video frames (open captions) or captions supplied by a third-party player inside an iframe — those appear as findings to verify manually, and platform embeds are covered separately by the iframe-title rule.