How to Add Subtitles to a WordPress Video (VTT vs SRT)

Sep 22, 2026

Whether WordPress accepts your .srt file depends entirely on which upload path you use — and WordPress's own documentation gives four different answers. This guide walks through adding a caption track on both a self-hosted site and a WordPress.com site, and shows exactly where the two diverge.

You need: a published or uploadable video, a subtitle file, and edit access to the post. Everything below comes from WordPress's official block documentation, the WordPress.com help center, and the core source for wp_get_mime_types().

Before you start: which WordPress are you on?

This is not a formality. The two products have separate documentation sets and separate rules.

On WordPress.com, plan gates apply and they are stated differently on different pages. The Working with video page says: "The Video block uploads a video file and plays it in a standard player. The Video block is available on the Premium plan and above." The VideoPress page says: "This feature is available on sites with the WordPress.com Business and Commerce plans. For free sites and sites on the Personal and Premium plans, upgrade your plan to access this feature."

So the block you choose determines the plan you need — and, as you are about to see, the subtitle formats you can use.

The four official answers, side by side

Where you lookWhat it says about subtitle files
WordPress core, wp_get_mime_types()srt is mapped under text/plain, vtt has its own text/vtt, and dfxp maps to application/ttaf+xml
Self-hosted Video block docs"The tracks are formatted in WebVTT format (.vtt files or Web Video Text Tracks)."
WordPress.com accepted file types".vtt (text captions for video)" — the only subtitle entry in the whole video list
VideoPress subtitle manager"The most common subtitle file formats are .vtt and .srt, and these formats are also accepted: .sbv, .sub, .mpsub, .lrc, .smi, .sami, .rt, .ttml, and .dfxp."

Read that table twice. The same company documents an eleven-format subtitle uploader on one page and a WebVTT-only text track on another. Neither page is wrong — they describe different machinery. The core MIME map is a third thing again: it decides what the Media Library will accept as a file, which is not the same question as what a player will read as a track.

The practical rule: if you are attaching a text track to the Video block — self-hosted or WordPress.com — produce WebVTT. Only the VideoPress subtitle manager documents anything wider.

Step 1: Convert your subtitle file to WebVTT

If you already have a .vtt, skip ahead. If you have an .srt and you are heading for the Video block, convert it first. WordPress.com's own upload troubleshooting page gives exactly this instruction for unsupported formats: "If you have images and other files in unsupported formats that you want to use, then you should convert them to a valid file type before uploading. You can do this with editing software or a free online converter."

Try it right here

Runs in your browser. Your file is not uploaded anywhere.

Loading tool…

This runs inside your browser tab — the subtitle file is read and rewritten locally, which matters if the captions belong to a client video that is not public yet. The reverse direction lives at VTT to SRT, and SRT vs VTT explains why renaming the file extension is not a substitute for converting it.

Step 2: Open the Text tracks option on the Video block

Select the Video block, then find the text track controls. The official description: "The Text tracks option will allow you to display timed text tracks (such as subtitles or captions) when the media is playing."

Upload your .vtt here rather than dropping it loose into the Media Library — a file sitting in the library is not attached to anything.

Step 3: Set the source language

The docs are unusually strict on this one: "Source language. Language of the track text data. It must be a valid BCP 47 language tag. If the Kind attribute is set to Subtitles, then the Source language must be defined."

Two things follow. The tag has to be a real BCP 47 tag, and if your track is Subtitles, leaving the language empty is not an option.

Step 4: Choose the right Kind

"Kind. How the text track is meant to be used. If omitted, the default kind is Subtitles. If the attribute contains an invalid value, it will use Metadata."

That fallback is worth noting: an invalid Kind does not throw an error, it silently becomes Metadata — and Metadata tracks are never shown. The five documented values:

  • Subtitles — "Translations of the dialogue in the video for when audio is available but not understood. Subtitles are shown over the video."
  • Captions — "Transcription of the dialogue, sound effects, musical cues, and other audio information for when the viewer is deaf/hard of hearing or the video is muted."
  • Descriptions — "Text descriptions of what's happening in the video for when the video portion isn't available because the viewer is using assistive technology."
  • Chapters — "Chapter titles that are used to create navigation within the video."
  • Metadata — "Tracks with data meant for javascript to parse and do something with. These aren't shown to the user."

If your file is a transcript of everything audible, including sound effects, the documented choice is Captions, not Subtitles.

Step 5 (VideoPress only): check whether a track already exists

Before you add anything to a VideoPress video, look at what is already attached: "VideoPress generates a subtitle track automatically for each video you upload, so a video may already carry a track before you add one of your own."

Timing matters. "Subtitles are not ready as soon as the video finishes uploading. If the track opens with a single empty subtitle instead of the transcript, transcription is still running, so check again later."

And if you edit that track, you end up with two: "VideoPress publishes your edits as a separate track and leaves the auto-generated track in place." To stop this for future uploads, the documented step is to turn off "Automatically generate subtitles for new videos" — with the caveat that "Turning the setting off does not affect subtitles on videos you already uploaded."

What a valid WebVTT file looks like

The Video block documentation ships this example:

WEBVTT

NOTE State of the Word is the annual keynote
address celebrating the progress of the open
source WordPress project and offering a glimpse
into its future.

0:02:14.000 --> 0:02:15.000
Konbanwa

0:02:16.000 --> 0:02:17.000
And howdy.

0:02:18.000 --> 0:02:20.000
And thanks for being here, everyone.

Common mistakes

  1. Assuming "WordPress supports SRT" is a yes/no question. It is a per-path question. The VideoPress subtitle manager lists .srt; the Video block documentation names only WebVTT.
  2. Expecting the text to be burned into the picture. WordPress's documentation describes subtitles exclusively as separate text tracks — there is no documented burn-in feature. If you need text permanently baked into the frames, do it before upload with burn subtitles to video.
  3. Leaving Kind on an invalid value. It falls back to Metadata, which is not displayed to viewers.
  4. Fighting a Multisite upload rule. On a Multisite network there is a separate Upload file types field, and the official note warns that adding extensions there "will NOT work unless you've added them using the upload_mimes filter" — with the rejection message "Sorry, this file type is not permitted for security reasons".
  5. Picking the block before checking the plan. On WordPress.com the Video block and VideoPress sit on different plan tiers, per the two quotes above.

FAQ

Can I upload an SRT file to WordPress? It depends on the path. WordPress core's default MIME map includes srt under text/plain, and the VideoPress subtitle manager explicitly accepts .srt. The Video block's text track documentation names only WebVTT, and WordPress.com's accepted file types page lists .vtt as its only subtitle entry.

Why do my captions not appear even though I uploaded the file? Check the Kind value first — the documentation says an invalid value falls back to Metadata, and Metadata tracks are not shown to users. Also confirm the track is attached through the block's Text tracks option rather than just sitting in the Media Library.

Does WordPress generate subtitles automatically? VideoPress does: it "generates a subtitle track automatically for each video you upload." The transcript is not ready the moment upload finishes, and the setting can be turned off for future uploads. Nothing equivalent is documented for the self-hosted Video block.

What is the difference between Subtitles and Captions here? WordPress defines Subtitles as translations of dialogue for viewers who can hear but do not understand, and Captions as a transcription that also covers sound effects and musical cues for deaf or hard-of-hearing viewers, or muted playback.

Can I add chapters the same way? Chapters are one of the five documented Kind values for a text track. VideoPress also has a separate chapters editor with its own requirements — check the official documentation for those before building the file.


Quotes from the WordPress Video block documentation, the WordPress.com help center, and WordPress core's wp_get_mime_types(), checked 16 September 2026. More walkthroughs in the how-to hub, and the full converter list is at all Clapr tools.

Clapr team

Clapr team

How to Add Subtitles to a WordPress Video (VTT vs SRT) | Clapr Blog