og:video checker: make link previews play video
og:video is the Open Graph tag that points a link preview at a video file. Two apps play it: iMessage and Discord. Every other app tested shows og:image. This page covers the tags, the MP4 file they point at, and what to fix when the video doesn't play.
Paste a page URL. Check My OG reads its og:video tags, downloads the MP4 and probes it: codec, pixel format, faststart, content type, range requests and size.
What og:video is
The Open Graph protocol lists og:video as an optional property, described as "A URL to a video file that complements this object" (ogp.me). It takes the same structured properties as og:image. Put them after the og:video tag they describe.
| Tag | What it holds |
|---|---|
og:video | The URL of the video file. og:video:url means the same thing. |
og:video:secure_url | An https URL for the same file. Facebook asks for it even when og:video is already https. |
og:video:type | The MIME type. Use video/mp4. |
og:video:width, og:video:height | The size in pixels. Facebook calls them required. Discord measures the file itself. |
Tags that work
This is the tag set on the Check My OG home page, which passes every check.
<meta property="og:type" content="website">
<meta property="og:title" content="Your page title">
<meta property="og:video" content="https://example.com/preview.mp4">
<meta property="og:video:secure_url" content="https://example.com/preview.mp4">
<meta property="og:video:type" content="video/mp4">
<meta property="og:video:width" content="1200">
<meta property="og:video:height" content="630">
<meta property="og:image" content="https://example.com/preview.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="What the image shows">
<meta name="twitter:card" content="summary_large_image">
Discord's docs say to set og:type to video.* or twitter:card to player. In Check My OG's device test (24 Oct 2026, Mac and iOS) a plain og:type website page with a direct MP4 played without either.
Which apps play og:video
| App | What it shows |
|---|---|
| iMessage | Plays. Autoplays the MP4 muted and looping. With autoplay off or Reduce Motion on, the poster with a play button. A video that can only be streamed (HLS) needs a tap. |
| Discord | Plays. An inline player with a play button; it doesn't autoplay. |
| X (Twitter) | og:image. The large card needs twitter:card set to summary_large_image. |
| og:image. Its docs call an MP4 only "eligible" for inline play; in testing it showed the image. | |
| Slack | og:image. Video players only for sites Slack handles itself, or through an app unfurl. |
| og:image, title and description. No video seen. | |
| Bluesky | og:image. Link cards have no video field. |
| Mastodon | og:image. Video cards come from oEmbed, not og:video. |
| WhatsApp, Telegram, Signal, Matrix / Element | og:image. |
Status as of 26 Oct 2026, from support.json. Not yet tested: Messenger, Instagram DMs, Threads, Reddit, Teams, Google Chat and a few others.
What the MP4 file needs
Check My OG runs these checks on the file og:video points at.
| Check | Why |
|---|---|
| A direct link to the file | Apple says videos that need embedding HTML won't play inline in Messages. Discord says to point og:video directly at the file. A YouTube or Vimeo page URL fails the content type check below. |
| Absolute https URL | Discord's docs ask for https. Facebook asks for an https URL for inline play. |
Answers 200, served as video/mp4 | The checker fetches the file as Twitterbot and reads the Content-Type header. Apple asks servers to send the correct MIME type for .mp4 files. |
| Range requests (206) | Apple says iOS needs byte-range requests for random access in media playback. |
Faststart (moov before mdat) | FFmpeg's guide: with the index first, the video can start playing before it fully downloads. |
H.264 and yuv420p | FFmpeg's H.264 guide says QuickTime and most other players only support 4:2:0 chroma subsampling for H.264. |
| Real size matches the tags | The file's width and height should equal og:video:width and og:video:height. |
| Video under 50 MB | Discord's fetch returns at most 50 MB and must finish, measuring the image and video included, within 10 seconds. |
| Video plus poster under 10 MB, page under 1 MB | Apple's guideline: the page itself under 1 MB; icons, images and video together under 10 MB. |
One FFmpeg command fixes the codec, pixel format and faststart checks:
ffmpeg -i input.mov -c:v libx264 -pix_fmt yuv420p -movflags +faststart preview.mp4
Why og:image still matters
Ten of the twelve apps above show only og:image. iMessage shows it as the poster when autoplay is off. Discord's docs say og:image is required to render the video and becomes its preview frame. The checker tests the poster too: PNG, JPEG, GIF or WebP, at least 600 px wide at 1.91:1, the same shape as the video, under 5 MB. Apple suggests 900 px or wider for Messages. The video's first frame is a good choice.
Common problems and fixes
- The card shows the image in X, Slack or LinkedIn and never plays. That is expected: those apps don't play og:video. Test in iMessage or Discord.
- og:video points at a YouTube, Vimeo or player page and nothing plays. Point it at the .mp4 file itself.
- The checker reports the video served as
text/htmlorapplication/octet-stream. The URL leads to a page, or the server sends the wrong type: setvideo/mp4for .mp4 files. - Range requests fail (200 instead of 206). Turn on byte ranges at your host or CDN. Apple suggests testing with
curl --range 0-99: a server that supports ranges returns 100 bytes. - Faststart, H.264 or yuv420p fails. Re-encode with the FFmpeg command above.
- iMessage shows a play button instead of autoplaying. Autoplay is off or Reduce Motion is on for that device, or the video is a stream (HLS) rather than a downloadable MP4.
- Discord shows a plain card with no player. Check that og:image is set, the file is under 50 MB, and the whole fetch finishes in 10 seconds. Discord also drops the video when it can't measure the file and no width and height are given.
Clearing a cached preview
Apps cache a preview by its URL, so a fixed page can keep showing the old card. Discord holds one for about 30 minutes; its Embed Debugger (discord.com/developers/embeds) shows how it reads a URL. Facebook's Sharing Debugger fetches the page again, but caches images by URL. Bluesky saves the card into each post, so only a new post fetches the page again. In every app, share the link with a new query string such as ?v=2, and give a changed video or image file a new URL too.
Questions
Which apps play og:video?
iMessage autoplays it, muted and looping. Discord shows an inline player you tap to play. X, Facebook, Telegram, WhatsApp, Slack, LinkedIn, Bluesky, Mastodon, Signal and Matrix show og:image instead.
Why is my video link preview not working?
Most often og:video points at a player page instead of an MP4 file, or the file misses one requirement: H.264, yuv420p, faststart, served as video/mp4 over https with range requests. Also make sure you are testing in iMessage or Discord, the only apps that play it.
Can og:video point to a YouTube or Vimeo link?
No. Apple says videos that need embedding HTML will not play inline in Messages, and Discord's docs say to point og:video directly at the video file. Use the URL of the MP4 itself.
Do I still need og:image if I have og:video?
Yes. Most apps show og:image and never play the video, iMessage shows it when autoplay is off, and Discord's docs say og:image is required to render the video.
Is og:video:secure_url required?
The Open Graph spec describes it as an alternate URL for pages that need HTTPS. Facebook asks for it even when og:video is already https, so set both tags to the same https URL.
Sources
- The Open Graph protocol: structured properties (og:video)
- Apple TN3156: Create rich previews for Messages
- Apple Safari Web Content Guide: Creating video (byte-range requests, MIME types)
- Discord: Link previews overview
- Facebook: Sharing for webmasters
- Slack: Unfurling links in messages
- Bluesky: Website card embeds
- Mastodon: PreviewCard
- FFmpeg: H.264 encoding guide (yuv420p, faststart)
- Check My OG platform data (support.json), with a source and test date for each app