Skip to content

Video schema example

Google requires name, thumbnailUrl and uploadDate for VideoObject, and recommends description, contentUrl or embedUrl, duration and expires. Clip or SeekToAction markup can add key moments. Google must be able to fetch the video file or the player for the page to be treated as a video page.

JSON-LD ยท passes this validator with 0 errors
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "Re-waxing a canvas pack in 6 minutes",
  "description": "How to clean and re-wax a waxed-canvas backpack at home.",
  "thumbnailUrl": [
    "https://example.com/video/rewax-16x9.jpg"
  ],
  "uploadDate": "2026-02-11T09:00:00+00:00",
  "duration": "PT6M12S",
  "contentUrl": "https://example.com/video/rewax.mp4",
  "embedUrl": "https://example.com/embed/rewax",
  "hasPart": [
    {
      "@type": "Clip",
      "name": "Cleaning",
      "startOffset": 20,
      "endOffset": 95,
      "url": "https://example.com/video/rewax?t=20"
    },
    {
      "@type": "Clip",
      "name": "Applying wax",
      "startOffset": 95,
      "endOffset": 280,
      "url": "https://example.com/video/rewax?t=95"
    }
  ]
}
</script>

What Google checks

Video docs

Required: namethumbnailUrluploadDate

Recommended: descriptioncontentUrlembedUrldurationexpiresinteractionStatisticregionsAllowed

Taken from Google Search Central's documentation for this type. Meeting the requirements makes a page eligible; Google decides whether to show a rich result.

Mistakes the validator catches on VideoObject

"duration": "6:12"
ISO 8601 only: PT6M12S.
uploadDate without a time zone
Google recommends a full date-time with an offset.
Thumbnail blocked by robots.txt
Google must be able to crawl the thumbnail and the video or player URL.

Paste your own version into the schema markup validator or test a live URL.

Questions

What is required for VideoObject?

name, thumbnailUrl and uploadDate.

contentUrl or embedUrl?

Provide contentUrl (the media file) when you can; embedUrl (the player) is the alternative. Both is fine.

How do I get key moments?

Add Clip objects with start and end offsets, or a SeekToAction telling Google how your URLs encode timestamps.

Other examples

ArticleProductFAQPageRecipeEventLocalBusinessOrganizationBreadcrumbListJobPostingReview