Why iPhone subtitles are not showing
TL;DR — Diagnose subtitles that work on desktop but fail on iPhone or iPad by checking WebVTT files, mobile Safari controls, delivery headers, and HTML5 track setup.
Related tool
WebVTT Validator Online
iPhone subtitle failures are frustrating because the same video can work on desktop Safari or Chrome while showing no subtitles on the phone. In most cases, iOS is revealing a delivery or format problem: the file is not real WebVTT, the track URL is unreachable from the phone, the server sends the wrong headers, or the subtitle track is not selected in the native video controls.
Quick answer
Start with the WebVTT Validator. iPhone Safari expects a real WebVTT file with a WEBVTT header, dot-based timestamps, valid cue order, and blank lines between cues.
Then open the deployed .vtt URL directly on the iPhone. If the phone sees a 404 page, login page, HTML error, expired signed URL, or generic download instead of caption text, the native video player will not show subtitles reliably.
If your source subtitles are SRT, convert them with the SRT to VTT Converter before attaching them to an HTML5 video track.
Validate the WebVTT file
iPhone Safari does not read SRT syntax from a native HTML5 <track> element. A phone-ready VTT file should start like this:
WEBVTT
00:00:01.000 --> 00:00:03.500
First subtitle line.
00:00:04.000 --> 00:00:06.200
Second subtitle line.
Check for:
WEBVTTon the first line- dot-based timestamps instead of SRT commas
- blank lines between cues
- cue start times before cue end times
- UTF-8 text that renders correctly on iOS
If the file came from SRT, convert it instead of renaming it. For the full workflow, see how to convert SRT to VTT for HTML5 video.
Check the VTT URL on the iPhone
Open the .vtt URL directly in iPhone Safari, not only on your laptop. The response should show caption text and return:
HTTP/2 200
Content-Type: text/vtt
Common iPhone-only failures include:
- the VTT URL depends on desktop browser cookies
- a signed caption URL expires before playback starts
- the CDN redirects mobile requests to an HTML page
- the video page is HTTPS but the caption URL is HTTP
- the file is served as
text/plainorapplication/octet-stream - CORS blocks captions hosted on 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 setup
Use a normal HTML5 video track with explicit metadata:
<video controls crossorigin="anonymous" playsinline>
<source src="/videos/demo.mp4" type="video/mp4" />
<track
kind="subtitles"
src="/captions/demo.en.vtt"
srclang="en"
label="English"
default
/>
</video>
The default attribute helps iOS select the expected track when the video loads. Without it, the viewer may need to enable subtitles from the native video controls.
If subtitles are cross-origin, keep crossorigin="anonymous" on the video element and send a matching Access-Control-Allow-Origin header from the caption host.
Check iOS video controls
iPhone playback may use native controls, especially in fullscreen. Test on the real device and check:
- whether the subtitles menu appears in the player controls
- whether the expected language label is visible
- whether captions appear after manually selecting the track
- whether fullscreen changes the available subtitle controls
- whether custom player CSS is hiding or recoloring cue text
If the VTT file loads and the track appears in the menu, the issue is usually track selection, label metadata, or styling rather than file delivery.
Common iPhone subtitle mistakes
Renaming SRT to VTT
iPhone Safari expects WebVTT structure, not just a .vtt extension.
Fix: Convert with the SRT to VTT Converter and validate the output.
Testing only on desktop Safari
Desktop Safari can hide mobile-only problems with cookies, signed URLs, redirects, or fullscreen controls.
Fix: Open the production page and the direct VTT URL on an iPhone before shipping.
Serving captions over HTTP
If the video page is HTTPS and the caption file is HTTP, iOS may block the track.
Fix: Serve the video page, video file, and VTT file over HTTPS.
Track loads but subtitles are off
The file can load correctly while no subtitle track is selected.
Fix: Add default for the primary track or manually enable subtitles from the iOS video controls.
Troubleshooting checklist
- Validate the VTT file with the WebVTT Validator.
- Convert SRT or ASS subtitles to WebVTT if needed.
- Open the
.vttURL directly on the iPhone. - Confirm the request returns
200andContent-Type: text/vtt. - Use HTTPS for the page, video file, and caption file.
- Add CORS headers if subtitles are cross-origin.
- Use explicit
kind,src,srclang,label, anddefaultattributes. - Test inline playback and fullscreen playback on the real iPhone.
Related guides
- Why Safari captions are not showing
- Why Android captions are not showing
- Why subtitles do not show in HTML5 video
- Why VTT captions are not loading
Related tools
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