Skip to content
schemamarkup.info — structured data, better SEOschemamarkup.info — structured data, better SEORules current · 29 Aug

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
FeatureStatusSurfaceLast verified
Video (opens in a new tab)ACTIVEsearch, video, images2026-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
Video

When the video was published.

ISO 8601 — PT4M32S.

Source

The video file itself.

A player that can be embedded.

<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.

Check a page