Every YouTube embed we ship turns captions on in the player. Long-form and podcast episodes are why. Use the privacy-enhanced host, keep related videos on-channel, and add cc_load_policy=1 plus a language. If YouTube has no caption track, do not invent one. Player captions are for the viewer. They are not the transcript you quote from.
The one string
After a visitor clicks play:
https://www.youtube-nocookie.com/embed/VIDEO_ID?autoplay=1&rel=0&cc_load_policy=1&cc_lang_pref=en
On the poster, in schema, or anywhere you must not autoplay:
https://www.youtube-nocookie.com/embed/VIDEO_ID?rel=0&cc_load_policy=1&cc_lang_pref=en
That is the whole rule. WordPress oEmbed, Gutenberg, Elementor, ChatGPT Sites, and a hand-written iframe all use the same query string. A mu-plugin can add the two caption parameters to existing embeds so nobody has to re-save a hundred posts.
Why this is standing
Home-service interviews and podcasts run long. The article is the hub; the player is how a reader checks the source without leaving the page. Captions on means a muted laptop, a noisy shop, and a screen reader user all get the words. YouTube already stores the track when the creator (or auto-captions, when YouTube will actually show them) uploaded it. We are not writing subtitles. We are asking the player to show what is already there.
This sits under the Content Factory line: Process the real recording, Post the hub, keep provenance on the page. It does not replace a complete caption file when you are quoting. If the factory cannot fetch a complete English track, it does not invent quotes and it does not treat a silent player as proof.
What you do not do
- Do not autoplay with sound on first paint. Click first, then
autoplay=1. - Do not paste a
<track>or a VTT you wrote to “help.” If YouTube has no captions, the CC button stays empty. - Do not use undocumented player API calls to force auto-generated-only tracks across the fleet.
cc_load_policy=1shows authored captions. Auto-generated-only often stays off. That is a YouTube limit. - Do not fork a second master. This URL is the public rule. The skill name is
youtube-captions-on-by-default.
Where it is wired
Jim Klauck’s on-page player (Check A Pro long-form) uses a click-to-play facade and the same query string in the iframe and in VideoObject embedUrl. Fleet WordPress sites get a must-use plugin that rewrites iframe src on output. New HTML you write still includes the parameters so the filter is a backstop, not the only copy of the rule.
YouTube’s own docs: player parameters (cc_load_policy, cc_lang_pref). Directory: canonical directory.

