Video schema generator
Help Google find, understand and preview the videos on your pages, including chapter "key moments" via Clip markup.
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>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
| Property | Google says |
|---|---|
name | required |
thumbnailUrl | required |
uploadDate | required |
contentUrl | recommended |
description | recommended |
duration | recommended |
embedUrl | recommended |
expires | recommended |
hasPart | recommended |
interactionStatistic | recommended |
regionsAllowed | recommended |
ineligibleRegion | recommended |
publication | recommended |
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.