The Video Schema Generator builds a valid schema.org/VideoObject JSON-LD block in seconds. Paste the output into your page’s <head> element and your video becomes eligible for Google’s video rich results — the thumbnail-and-duration cards that appear in the main search results and the dedicated Video tab.
Structured data for video is one of the highest-leverage SEO moves available for content publishers. A video rich result occupies significantly more vertical space than a plain link, shows an inline thumbnail that catches the eye before the headline, and displays the video duration and upload date — all signals that increase click-through rate without any change to your content.
How it works
The schema is built according to the schema.org/VideoObject specification and Google’s VideoObject guidelines. Three categories of field are supported:
Required fields — the minimum set Google needs to render a rich result: video title (name), description, a direct thumbnail image URL, the upload date, a duration in ISO 8601 format, and at least one of a direct content URL or an embed URL.
Optional fields — publisher details (with optional logo as an ImageObject), author, language, region restrictions, view count (expressed as a WatchAction InteractionCounter), boolean flags for family-friendliness, subscription requirement, and live broadcast status, an expiry date, and comma-separated keywords.
Clips — each clip is a schema.org/Clip node listed under hasPart. It carries a name, a startOffset and endOffset in seconds, and an optional deep-link URL. Clips enable chapter-level rich results and are the schema equivalent of YouTube’s chapter timestamps.
Duration: the ISO 8601 format explained
Google requires duration in ISO 8601 format (PT(H)H(M)M(S)S). The rule:
PTprefix means “period of time”12M30Smeans 12 minutes and 30 seconds1H5Mmeans 1 hour and 5 minutes (no seconds component needed if zero)PT0Sis valid for live streams with no fixed duration
The hour/minute/second builder in this tool constructs the string automatically. You never need to type PT12M30S by hand.
Worked example
A cooking channel publishes a how-to video. Their generated VideoObject looks like this (abbreviated):
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "How to Make Perfect Sourdough Bread",
"description": "A step-by-step guide from starter to baked loaf.",
"thumbnailUrl": "https://example.com/thumbnails/sourdough.jpg",
"uploadDate": "2026-06-01",
"duration": "PT12M30S",
"embedUrl": "https://www.youtube.com/embed/exampleId",
"hasPart": [
{ "@type": "Clip", "name": "Introduction", "startOffset": 0, "endOffset": 30 },
{ "@type": "Clip", "name": "Making the starter", "startOffset": 30, "endOffset": 180 }
]
}
The duration PT12M30S tells Google the video is 12 minutes and 30 seconds long — the figure shown in the duration badge. The two clips allow Google to surface “Making the starter” as a timestamped chapter link in the search result.
Formula note
The only non-trivial calculation is the ISO 8601 duration construction. Given hours (H), minutes (M), and seconds (S):
- If H = 0, M = 12, S = 30: result is
PT12M30S - If H = 1, M = 5, S = 0: result is
PT1H5M - Components with a zero value are omitted unless all three are zero (which is invalid and blocked by validation)
The interaction count, when present, is emitted as a WatchAction InteractionCounter with userInteractionCount set to the integer value — the schema pattern recommended by Google for view counts.