Video schema markup generator
VideoObject describes a video that plays on the page. The requirement people miss is that last part: describing a video the page only links to does not qualify.
Reference copy unfinished. The generator below works and produces valid markup. The explanatory sections are still being written, so this page is not listed for search engines yet.
Google Search features this type can produce
From the registry| Feature | Status | Surface | Last verified |
|---|---|---|---|
| Video (opens in a new tab) | ACTIVE | search, video, images | 2026-08-29 |
Meeting a feature’s documented requirements does not guarantee that the feature appears. No tool can promise that, and any that does is describing something it cannot know.
Generate the markup
Runs in your browser<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "How to descale a kettle",
"description": "A three-minute demonstration of descaling an electric kettle with white vinegar.",
"duration": "PT3M12S",
"embedUrl": "https://example.com/embed/descale",
"thumbnailUrl": "https://example.com/thumbs/descale.jpg",
"uploadDate": "2026-07-02T09:00:00+01:00"
}
</script>Paste this into the <head> of the page it describes. Markup that describes a page must live on that page.
The video has to be on the page
Video markup describes a video a visitor can play where the markup sits. A page that mentions a video, or links to one elsewhere, is not a video page, and marking it up as one describes something that is not there.
Name, description, thumbnailUrl and uploadDate are all required, and uploadDate is the one most often wrong: it is when the video was published, not when the page was last touched by a template.
contentUrl and embedUrl are different things
contentUrl points at the actual media file. embedUrl points at a player that can be embedded in an iframe. A hosted video has an embedUrl; a self-hosted MP4 has a contentUrl. Providing at least one is what lets a consumer find the video rather than take your word for it.
duration takes an ISO 8601 duration. If the page shows a running time, the two should agree — our validator treats PT4M32S and a displayed "4:32" as the same value.
Mistakes worth avoiding
Marking up a page that only links to a video
The video must be playable on the page carrying the markup.
uploadDate wired to the template
It is the video publication date. A date that moves on every deploy describes nothing.
A thumbnail that is not the thumbnail
thumbnailUrl should be a real still from the video, not the site logo or a stock image.
Check what you already have
If the page you are marking up already carries structured data, audit it before adding more. Duplicate entities from a theme and a plugin are the most common finding on established sites, and adding a third block makes it worse rather than better.