Video Schema Generator

Generate valid schema.org VideoObject JSON-LD for better video SEO.

Ad placeholder (leaderboard)
Enjoying the tools? Go Pro for £4.99 (one-time) and remove all ads — forever, on this device. Remove ads — £4.99

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:

  • PT prefix means “period of time”
  • 12M30S means 12 minutes and 30 seconds
  • 1H5M means 1 hour and 5 minutes (no seconds component needed if zero)
  • PT0S is 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.

Ad placeholder (rectangle)