How to Add Captions to Video on WordPress, Joomla and Any Website — No Upload Required
If you run a website and host video on it, adding captions isn't optional anymore. It's an accessibility requirement under WCAG 2.1, it affects how search engines index your video content, and users have come to expect it. The technical side isn't hard — WordPress, Joomla, Webflow and most platforms support caption files natively. The bottleneck is usually the same thing: where do you actually get the caption file?
Most captioning tools require you to upload your video to their servers. That works, but it means sharing your content with a third-party service, often waiting in a queue, and sometimes paying for the privilege. This guide covers how captioning works on each major CMS, and how to generate the SRT or VTT file locally — without your video leaving your computer.
SRT vs. VTT: a quick note before we start
SRT (SubRip) is the format you'll see most in video editors and on YouTube. VTT (WebVTT) is the web standard, used by HTML5 video players including WordPress's built-in player. The two formats look almost identical and converting between them takes about two seconds with any online converter. Most websites want VTT; most captioning tools output SRT. That translation step is trivial.
Platform by platform
WordPress
The WordPress Video block (available in the block editor since WordPress 5.0) supports caption tracks out of the box. You upload your video file, then find the "Text Tracks" section in the block settings panel on the right. Upload a VTT file there and the video player adds a CC button automatically.
One important caveat: this works for self-hosted video only — videos you upload directly to WordPress's media library. If you're embedding a YouTube or Vimeo video using an embed block, the caption track needs to be added on YouTube or Vimeo, not in WordPress.
For the VTT file itself, take your SRT from Free Auto Captions AI and run it through a free SRT-to-VTT converter. The format difference is minor — mostly just the header line.
Joomla
Joomla doesn't have a dedicated video component in its core, so caption support depends on how you're embedding video. The cleanest approach is HTML5 video with a track element, written directly into an article or a Custom HTML module:
<source src="/media/your-video.mp4" type="video/mp4">
<track kind="subtitles" src="/media/captions.vtt" srclang="en" label="English">
</video>
Upload both the video file and the VTT caption file to Joomla's media manager, then reference them in your article with the code above. Joomla's default text editor may strip HTML tags — use the "Source" view or switch to a code-friendly editor if needed.
If you're using a video plugin like AllVideos (which has a free tier), check its documentation for caption track support — most plugin-based players handle it the same way as native HTML5 via a track parameter.
Webflow
Webflow's native Video element doesn't expose a caption track field in the designer. To add captions, you'll need to use a Custom Code embed with a raw HTML5 video tag. Same approach as Joomla — a video element with a track child. Upload your VTT file to Webflow's asset manager and reference the asset URL in the track src attribute.
Alternatively, host your video on Vimeo and embed it in Webflow. Vimeo supports caption file uploads on all plans including the free tier.
Wix
Wix Video (the native video player in Wix) supports VTT subtitle files. In the Wix editor, select your video element, go to Settings, and look for the Subtitles section. Upload a VTT file there. It's one of the more straightforward implementations among the major website builders.
Squarespace
Squarespace has limited native support for video caption files. The Video block embeds YouTube or Vimeo by default — if you use either of those, add captions in YouTube Studio or Vimeo's subtitle upload feature. For self-hosted video on Squarespace, you'd need to use a Code Block with raw HTML5 video markup, similar to the Joomla approach above.
Ghost
Ghost supports HTML cards in its editor, where you can write raw HTML. Use the same HTML5 video + track element pattern. Ghost doesn't have a media manager for video files, so you'll need to self-host or use a CDN for the video file itself. The VTT file can be hosted anywhere with a public URL.
Caption support by platform at a glance
| Platform | Native caption UI | File format | Embed workaround |
|---|---|---|---|
| WordPress | ✓ Video block + Text Tracks | VTT (SRT also accepted) | Not needed |
| Joomla | ⚬ Via HTML5 video tag | VTT | HTML5 + track element |
| Webflow | ✗ Not in native Video block | VTT | Custom Code embed or Vimeo |
| Wix | ✓ Wix Video subtitle field | VTT | Not needed |
| Squarespace | ✗ Limited native support | VTT | Code Block or YouTube/Vimeo |
| Ghost | ⚬ Via HTML card | VTT | HTML5 + track element |
How to get your SRT file without uploading your video
Most third-party caption generators require you to upload the full video file to their servers. That's fine for public content, less ideal if you're captioning anything internal, confidential, or not yet published. Free Auto Captions AI runs OpenAI Whisper directly in your browser — your video file never leaves your computer.
Open Free Auto Captions AI and go to Auto Captions
On first load the Whisper model downloads to your browser (~75 MB). After that it's cached. Everything from this point runs locally on your device.
Drop in your video or audio file
MP4, MOV, MKV, MP3, WAV and other common formats all work. If you have a large video and only need the audio transcribed, an MP3 export is faster to process.
Review the transcript and fix any errors
Whisper handles clean audio well. Check proper nouns, technical terms, and anything said quickly. The inline editor lets you fix lines without downloading and re-importing.
Download the SRT file
If your platform needs VTT, convert the SRT with any free SRT-to-VTT tool (the conversion is instant — it's mostly just a format header change). Then upload the VTT to your WordPress block, Joomla article, or wherever your video lives.
Why this matters for SEO: search engines index the text content of VTT and SRT caption files attached to video. Adding accurate captions to your self-hosted video gives search crawlers a readable transcript, which improves how the video is understood and indexed — particularly for long-form content where spoken keywords would otherwise be invisible to search.
The accessibility case
Beyond SEO, captioned video is a legal accessibility requirement in many jurisdictions. WCAG 2.1 Success Criterion 1.2.2 requires captions for all prerecorded audio in synchronized media — which includes virtually any video with a speaking presenter. WCAG 2.1 AA compliance is a legal standard in the EU under the European Accessibility Act (effective 2025) and for many categories of US websites under the ADA.
If you're running a business website, a course platform, or any site serving the public, captioned video isn't really optional. The good news is the technical implementation on all the platforms above is straightforward once you have the caption file.
Generate your caption file without uploading anything
OpenAI Whisper in your browser. Get the SRT, drop it into WordPress, Joomla, or Wix. Done.
🎬 Generate captions free