YouTube vs self-hosted video is rarely an either-or choice. YouTube puts a video in front of YouTube's own audience, and Google can show the YouTube page in video results, but the click goes to YouTube. A self-hosted MP4 on your own page keeps the visitor there, loads lightly and carries the page's own video markup. For most businesses the answer is both. Videngine publishes each approved video to your YouTube channel and to the page it was made from.
Choose the host by the job the video does
Decide where the viewer should end up: on YouTube, among other videos, or on your page, next to the thing you sell.
YouTube is a search engine and a feed in its own right. A video there reaches people who have never heard of your site, and Google can index the YouTube page too. Either way, the visitor is on youtube.com, one tap from the next video.
A self-hosted video is a file on your own domain, played by the browser's <video> element. It does nothing for a YouTube audience, but it makes your page better at its job: the listing or guide gains a video that plays in place, with its markup and transcript.
So the useful question about video hosting for SEO is not which host Google prefers. It is which URL should earn the click.
One detail in Google's video best practices sets expectations. Video features such as video results and key moments need a watch page, whose main purpose is to show one video. A product page with a video beside its text is not one, though Google says it can still appear as a text result and as an image result with a video badge. The video SEO guide covers the wider picture.
YouTube vs self-hosted video, compared
YouTube wins on reach and costs nothing to host; self-hosting wins on control, page weight and keeping the click on your page.
| Factor | YouTube | Self-hosted MP4 on your page |
|---|---|---|
| Discovery | YouTube search, suggested videos and Shorts; Google can index the YouTube page | Google Search, through your own page only |
| Which URL earns the click | youtube.com, unless the searcher lands on your page with the embed | Your page |
| Page speed and what loads | An iframe with YouTube's player, before anyone presses play | With preload="metadata": a poster and a small part of the file |
| Player and related videos | YouTube's player; related videos can be limited to your channel, not switched off | Your browser's player; nothing plays next |
| Branding | YouTube's logo and player around your video | Your page and poster frame only |
| Analytics | YouTube's channel analytics | Your site analytics, if you track player events |
| Cost and bandwidth | Nothing to pay for storage or transfer | Your host's storage and transfer; one file at one bitrate |
| Captions and transcripts | A caption track on YouTube; no text in your page's HTML | A WebVTT track in the player and a transcript in the HTML |
| Structured data | Recommended on your page for an embed | VideoObject with contentUrl pointing at your MP4 |
The player rows come from YouTube's player parameters: since September 2018 related videos can't be disabled, and setting rel to 0 only limits them to your channel. The modestbranding parameter is deprecated and has no effect.
For video SEO on your website, two rows matter most: which URL earns the click, and whether your page carries its own markup. An embed does count: Google says it may index an embedded video both on your page and on YouTube's, still recommends structured data on your page, and says more video features depend on the host letting Google fetch the video file. With a self-hosted file, that permission is yours to give.
What each option loads on the page
A self-hosted video with a poster and preload="metadata" loads an image and a small part of the file until someone presses play; a YouTube embed loads a full player in an iframe.
Self-hosted video performance comes down to four attributes. poster shows a still frame. preload="metadata" asks the browser to fetch only the length and dimensions. width and height reserve the space so the page does not jump. Browsers treat preload as a hint, but it is the sensible setting.
<video controls playsinline preload="metadata" width="1920" height="1080" poster="/videos/listing.jpg">
<source src="/videos/listing.mp4" type="video/mp4">
<track kind="captions" src="/videos/listing.vtt" srclang="en" label="English">
</video>
A YouTube embed is a page within your page, and it brings YouTube's player with it whether or not anyone presses play. web.dev's embed best practices say lazy loading the YouTube embed can save approximately 500 KB on the initial page load, and recommend a facade: a lightweight stand-in that loads the real player on click.
| Setup | Before play | On play |
|---|---|---|
Self-hosted, preload="metadata", poster | The poster and enough of the MP4 to read its length and size | The MP4 streams from your host or CDN |
Self-hosted, preload="auto" | Possibly the whole file, wanted or not | Plays from the buffer |
| YouTube iframe | YouTube's player, scripts and styles | The video streams from YouTube |
YouTube iframe, loading="lazy" | Nothing until it nears the viewport, then the player | The video streams from YouTube |
| YouTube facade | A thumbnail and a small script | The real player loads, then the video |
Use facades with care where the video's search appearance matters. Google's documentation says not to rely on user actions, such as clicking, to load the video. A self-hosted player written into the page's HTML avoids the question. The video glossary defines poster frame, WebVTT and watch page.
The “both” setup, step by step
Publish the landscape cut to YouTube with a link back to the page, and put the same video on the page, self-hosted, with markup and a transcript.
- Make two cuts from one source: 16:9 for YouTube and the page, 9:16 for Shorts.
- Upload the landscape cut to YouTube. Say what the video is in the description's first sentence, then put the page's URL straight after it.
- Self-host the same file on the page with a poster,
preload="metadata", width, height and a WebVTT caption track. - Add the transcript as text in the page's HTML, not only in the caption file.
- Add VideoObject structured data, with
contentUrlpointing at your MP4. - List the page in a video sitemap, and don't block the MP4 with robots.txt or noindex.
- Keep the copies in step. When the source changes, replace the file and update or retire the upload.
What about duplicate content?
It is the most common worry, and mostly misplaced. Google's video documentation expects one video to live in several places: it says an embedded YouTube video may be indexed on your page and on YouTube, that both may appear in video features, and that the same video can sit on a watch page and on another page. Nothing there suggests a penalty.
Google does not promise which copy a searcher sees. To win the click, make your page the better result, with the transcript and specification YouTube's page lacks. The real risk is on your own site: near-identical pages carrying the same video and little else.
Storage and bandwidth: when self-hosting gets expensive
Short videos on a CDN-backed static host are usually cheap to serve; costs grow with long files, heavy viewing and frequent replacement.
Two one-minute 1080p H.264 videos already on this site are 3.3 MB and 3.6 MB. Each full play transfers roughly the file's size, so a thousand plays of a 3.5 MB video is about 3.5 GB of transfer. With preload="metadata", visitors who never press play download almost none of it. Check your host's bandwidth allowance, and watch for:
- Long recordings. A 30-minute webinar at a similar bitrate is about thirty times the size.
- Heavy viewing. A single MP4 does not adapt to slow connections the way a streaming host's encodings do.
- Frequent replacement. On a site built from Git, every old version stays in the repository's history.
- Repository limits. GitHub blocks files larger than 100 MiB and recommends repositories ideally stay under 1 GB.
Past those points, keep the player, markup and transcript on the page but serve the file from a streaming host, or let YouTube carry the long-form library.
How Videngine publishes to YouTube and your page
Videngine publishes each approved video to your connected YouTube channel and into the page it was made from, from the same review panel.
Each source usually gives a 16:9 cut and a 9:16 cut, with YouTube titles, descriptions, hashtags and tags written separately for each. Captions are transcribed from the finished audio, burned in and exported as WebVTT. For YouTube, a channel Owner connects the channel once; approved videos queue one at a time, all at once or on approval, with privacy and synthetic-content disclosure as settings. The YouTube video maker guide covers the channel side, and short-form video the vertical cut.
For the website, a workspace connects the GitHub repository its site is built from. Publish then makes one commit that:
- adds the MP4, a poster JPG and a WebVTT caption track, in
/videos/by default; - writes an HTML5 player into the page at a
<!-- videngine -->marker, with a poster and a preload of metadata only; - adds a readable transcript in a
<details>element and VideoObject JSON-LD, including contentUrl, duration and transcript; - keeps
video-sitemap.xmlcurrent and adds its Sitemap line to robots.txt.
All of it is in the HTML the server sends, not injected by JavaScript. Republishing replaces the video in place; Remove takes it out in one commit. It works for static sites whose pages are HTML files in the repository, on hosts such as Vercel, Netlify, Cloudflare Pages or GitHub Pages.
When Videngine is the wrong tool
Videngine is the wrong tool when the videos already exist and the problem is hosting them, or when the video is about a person rather than a page.
- Finished footage. Webinars, filmed tours and edited videos need a host, not a renderer: a streaming service, or YouTube alone.
- Long-form and live video. These belong on a streaming service with adaptive bitrate.
- Framework-built sites. Website publishing isn't supported for them yet; download the MP4s and add them through your own build.
- Talking heads. Videngine has no presenters and is not a timeline editor; use DaVinci Resolve or Premiere Pro.
Questions about YouTube and self-hosted video
Is it better to embed YouTube or host video on my own site for SEO?
For your own page, self-hosting gives a lighter page, full control of the player and a file Google can fetch from your server. An embed still counts: Google may index it on your page and on YouTube, and recommends structured data on your page either way. Many businesses do both.
Is the same video on YouTube and my website duplicate content?
Google's video documentation describes no penalty for it. It says an embedded YouTube video may be indexed on both your page and YouTube's page, and that the same video can sit on a watch page and on another page. Make your page the stronger result with a transcript and the facts YouTube's page lacks.
Does a YouTube embed slow down my page?
It adds weight before anyone presses play, because the iframe loads YouTube's player. web.dev says lazy loading a YouTube embed can save approximately 500 KB on the initial page load. A self-hosted video with a poster and preload set to metadata loads an image and a small part of the file until someone presses play.
Do I need VideoObject markup if I embed a YouTube video?
Google recommends it. Its documentation says that on your own watch page with an embedded third-party player you should still provide structured data, and you may include the page in a video sitemap. Markup does not guarantee a video feature.
When does self-hosting video get expensive?
When files are long, plays are many or videos are replaced often. Each full play transfers roughly the file's size, so short clips of a few megabytes are cheap to serve from a CDN-backed static host. Long recordings and heavily watched libraries suit a streaming host or YouTube.
Choose your next step
See how hosting fits into the rest of video SEO, or start with the YouTube side of the setup.
Publish once, in both places.
Bring one page that deserves a video and the YouTube channel you want it on. Review the video in the studio, then send it to the channel and the page. Choosing a plan joins the launch list; there is no charge today.
Join the waitlist ↗Published by Videngine, a video rendering product built and run by Wall & Fifth. External links refer to the original documentation or product descriptions; examples are illustrative unless stated otherwise.