Subtitle guide Workflow guides

Why Chrome captions are not showing


TL;DR — Diagnose captions that fail in Chrome by checking WebVTT files, delivery headers, cross-origin access, and HTML5 track markup.

Related tool

WebVTT Validator Online

Open VTT validator

Chrome caption problems are usually easier to debug than Safari issues because DevTools shows failed track requests clearly. The hard part is knowing whether the browser rejected the caption file, never loaded it, or loaded it but did not enable the track.

Quick answer

Start with the WebVTT Validator. Chrome’s HTML5 <track> element expects a real WebVTT file with a WEBVTT header, dot-based timestamps, and valid cue order.

Then open the deployed .vtt URL directly in Chrome. If the URL returns HTML, a 404 page, a login page, or a file served with the wrong headers, the video player will not show captions reliably.

If your source file is SRT, convert it with the SRT to VTT Converter before attaching it to a browser video player.

Check the VTT file first

Chrome does not read SRT syntax from an HTML5 track. A valid VTT file starts like this:

WEBVTT

00:00:01.000 --> 00:00:03.500
First caption line.

00:00:04.000 --> 00:00:06.200
Second caption line.

Check for:

  • WEBVTT on the first line
  • timestamps with dots, not SRT commas
  • blank lines between cues
  • cue start times before cue end times
  • readable UTF-8 text

If the file was exported as SRT, do not rename it to .vtt. Convert it. For the full workflow, see how to convert SRT to VTT for HTML5 video.

Check the track request in DevTools

Open Chrome DevTools, reload the page, and look at the Network tab for the .vtt request.

The track URL should return:

HTTP/2 200
Content-Type: text/vtt

Common failures include:

  • 404 because the src path is wrong
  • 403 because the caption URL needs authentication
  • text/html because the server returned an error page
  • text/plain or application/octet-stream because the host does not know the VTT MIME type
  • CORS errors when captions are served from another domain

For delivery fixes, use how to fix VTT MIME type for HTML5 video and how to fix CORS errors for VTT subtitles.

Check the HTML track markup

Use explicit track metadata:

<video controls crossorigin="anonymous">
  <source src="/videos/demo.mp4" type="video/mp4" />
  <track
    kind="captions"
    src="/captions/demo.en.vtt"
    srclang="en"
    label="English"
    default
  />
</video>

The default attribute makes Chrome enable that track automatically. Without it, viewers may need to turn captions on from the player menu.

If the VTT file is cross-origin, keep crossorigin="anonymous" on the video element and send the matching CORS header from the caption host.

Check Chrome caption settings

If the VTT file loads and the track is enabled but captions are still invisible, check browser-level caption styling.

In Chrome, open:

chrome://settings/accessibility

Then review live caption and caption style settings. This is less common than a broken VTT file or blocked track URL, but it can make captions look hidden or unreadable during testing.

Common Chrome caption mistakes

Using SRT in a track element

Chrome does not support SRT directly in native HTML5 text tracks.

Fix: Convert SRT to WebVTT with the SRT to VTT Converter.

Serving captions from a private URL

The page may load for you while the caption file returns a login page, signed URL error, or 403 response.

Fix: Open the VTT URL in a private browser window and confirm it returns caption text.

Forgetting CORS for CDN captions

If the video page and caption file are on different origins, Chrome needs permission to read the VTT file.

Fix: Add Access-Control-Allow-Origin on the caption response and crossorigin="anonymous" on the video element.

Track exists but is not enabled

The file can be valid and loaded, but no track is selected.

Fix: Add default for the primary caption track or test by manually enabling captions from the player controls.

Troubleshooting checklist

  1. Validate the file with the WebVTT Validator.
  2. Convert SRT or ASS captions to WebVTT if needed.
  3. Open the .vtt URL directly in Chrome.
  4. Confirm the request returns 200 and Content-Type: text/vtt.
  5. Check the DevTools console for CORS or MIME warnings.
  6. Use explicit kind, src, srclang, label, and default attributes.
  7. Add CORS headers if the caption file is cross-origin.
  8. Check Chrome accessibility caption settings if the track loads but text is invisible.

Use the WebVTT Validator Online

Validate WebVTT captions online and check missing WEBVTT headers, timestamp syntax, cue order, and HTML5 caption issues. No signup, no upload, and everything runs locally in the browser.

Open VTT validator