<video> elements must have captions
A <video> with audio has no captions track, so deaf and hard-of-hearing users miss dialogue and meaningful sound.
What you see
<video> elements must have captions (video-caption) Fix any of the following: Element has no captions track <video src="/demo.mp4" controls></video>
What’s actually happening
axe flags a <video> that has no <track kind="captions">. Anyone who can't hear the audio — deaf or hard-of-hearing users, or someone watching with sound off in an open office — gets the picture and none of the words. For a product demo or testimonial where the whole point is what's being said, that's the entire message gone. This fails WCAG 1.2.2 Captions (Prerecorded), Level A. Note the distinction: captions cover dialogue plus meaningful non-speech sound (a doorbell, laughter), which is different from a transcript or from audio description of visuals.
Common causes
- A self-hosted <video> shipped with no caption track and nobody produced one
- A caption file was created but never wired up with <track kind="captions">
- kind="subtitles" used where captions were needed — subtitles assume you can hear and only translate dialogue, so they don't satisfy 1.2.2
- A muted background/hero video that actually carries spoken content (which means it does need captions)
- An embedded player (YouTube/Vimeo) where auto-captions were never reviewed, so the "captions" are unusable gibberish
How to fix it
- Write a WebVTT caption fileCreate a .vtt file with timestamped cues covering the speech and the sounds that matter ([applause], [phone rings]). Auto-transcription gets you a rough draft fast, but it mangles names, punctuation, and homophones — read it against the audio and fix every cue before shipping. Bad captions fail real users even when the file technically exists.
- Attach the track to the videoAdd <track kind="captions" src="/demo.vtt" srclang="en" label="English"> inside the <video>. kind="captions" is what this rule checks for; kind="subtitles" will not clear it. The label is what shows in the player's caption menu.
- Turn on captions in the hosted playerFor YouTube or Vimeo embeds, upload a corrected caption file in the platform's caption tool rather than trusting auto-captions. The CC button only helps if the text behind it is accurate.
- Decide whether the video needs sound at allA silent ambient loop with no spoken content can be marked decorative and is exempt. But the moment it carries words or meaningful audio, captions are required — don't mute a talking video and call the problem solved.
- Watch it with the sound offAfter wiring the track, re-run axe to clear the violation, then play the video muted and read along. If you can follow the content from captions alone, they work; if a key line is missing or mistimed, fix the cue. The tool only checks that a track exists, not that it's any good.
Stop it recurring
Make a reviewed caption track part of the publish checklist for every video with audio, the same way alt text is required for images.