Skip to content

Video schema generator

Help Google find, understand and preview the videos on your pages, including chapter "key moments" via Clip markup.

@VideoObject
Key moments (chapters)
Duration
Files

Your entries are saved in this browser only (localStorage). Privacy

Required
3/3
Recommended
4/10

All Google-required properties present. That makes the page eligible, not guaranteed. Google's docs

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "Fixing \"Missing field price\" in Search Console",
  "description": "Step-by-step: find the product, add the Offer, and re-validate the fix.",
  "thumbnailUrl": "https://example.com/video/price-fix-16x9.jpg",
  "uploadDate": "2026-09-02T10:00:00+00:00",
  "duration": "PT6M42S",
  "embedUrl": "https://www.youtube.com/embed/abc123xyz",
  "hasPart": [
    {
      "@type": "Clip",
      "name": "Find the error",
      "startOffset": 0,
      "endOffset": 95,
      "url": "https://example.com/videos/price-fix?t=0"
    },
    {
      "@type": "Clip",
      "name": "Add the Offer",
      "startOffset": 95,
      "endOffset": 300,
      "url": "https://example.com/videos/price-fix?t=95"
    },
    {
      "@type": "Clip",
      "name": "Validate the fix",
      "startOffset": 300,
      "endOffset": 402,
      "url": "https://example.com/videos/price-fix?t=300"
    }
  ]
}
</script>
  • ?Recommended for Video: add contentUrl if it applies.contentUrl
  • ?Recommended for Video: add expires if it applies.expires
  • ?Recommended for Video: add interactionStatistic if it applies.interactionStatistic
  • ?Recommended for Video: add regionsAllowed if it applies.regionsAllowed
  • ?Recommended for Video: add ineligibleRegion if it applies.ineligibleRegion
  • ?Recommended for Video: add publication if it applies.publication

Checked in your browser against the required and recommended properties Google documents for this type. Confirm with Google's Rich Results Test once it's live.

example.comexample.com/page
Fixing "Missing field price" in Search Console
6:42
Step-by-step: find the product, add the Offer, and re-validate the fix.

An illustration of what the markup can feed. Google decides what actually appears and valid markup never guarantees a rich result.

When to use VideoObject markup

  • A watch page where the video is the main content.
  • Articles with an embedded video you want indexed.
  • Livestreams (add a BroadcastEvent via publication).

Getting it right

  • Required: name, thumbnailUrl and uploadDate (with time zone). Recommended: contentUrl, description, duration, embedUrl and more.
  • contentUrl is the actual video file; embedUrl is the player. Provide at least one so Google can fetch the video.
  • Clip chapters need a name, startOffset in seconds and a url that jumps to that moment.
  • Durations are ISO 8601: 6 minutes 42 seconds is PT6M42S.

Source: Google Search Central, Video structured data documentation, and schema.org/VideoObject.

Google's property list

PropertyGoogle says
namerequired
thumbnailUrlrequired
uploadDaterequired
contentUrlrecommended
descriptionrecommended
durationrecommended
embedUrlrecommended
expiresrecommended
hasPartrecommended
interactionStatisticrecommended
regionsAllowedrecommended
ineligibleRegionrecommended
publicationrecommended

Example output

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "Fixing \"Missing field price\" in Search Console",
  "description": "Step-by-step: find the product, add the Offer, and re-validate the fix.",
  "thumbnailUrl": "https://example.com/video/price-fix-16x9.jpg",
  "uploadDate": "2026-09-02T10:00:00+00:00",
  "duration": "PT6M42S",
  "embedUrl": "https://www.youtube.com/embed/abc123xyz",
  "hasPart": [
    {
      "@type": "Clip",
      "name": "Find the error",
      "startOffset": 0,
      "endOffset": 95,
      "url": "https://example.com/videos/price-fix?t=0"
    },
    {
      "@type": "Clip",
      "name": "Add the Offer",
      "startOffset": 95,
      "endOffset": 300,
      "url": "https://example.com/videos/price-fix?t=95"
    },
    {
      "@type": "Clip",
      "name": "Validate the fix",
      "startOffset": 300,
      "endOffset": 402,
      "url": "https://example.com/videos/price-fix?t=300"
    }
  ]
}

Video schema questions

Do YouTube embeds need VideoObject markup?

Google can often detect YouTube embeds without it, but markup lets you control title, description and upload date for the video on your page.

What happened to Learning Video markup?

Google retired the Learning Video rich result in 2025. Plain VideoObject markup is unaffected.

Are key moments automatic?

Google can detect them itself, but Clip markup lets you set chapter names and times explicitly.

Related generators