b2KIT

VideoObject Schema Builder

Create VideoObject schema markup with thumbnail, duration, upload date, and embed URL. Optimize for video rich results.

Tested tool guide Tested browser tools Checked August 16, 2026

What VideoObject Schema Builder does, with a checked example

A form that turns the details of a video - title, description, thumbnail, duration, upload date, embed URL - into a JSON-LD VideoObject block ready to paste into a page's head. Google reads this markup to list the video in video rich results and video search. The surprise is the formats: the duration field is not 6:45 but ISO 8601 (PT6M45S), and the upload date is not August 10, 2026 but 2026-08-10. Get those two wrong and Google's validator rejects the markup even though every other field looks right.

Worked example

A concrete input and expected output from the current implementation.

Input

Title: How to Brew Pour-Over Coffee; Description: A 6-minute guide to brewing pour-over coffee with a gooseneck kettle; Thumbnail: https://cdn.example.com/coffee-thumb.jpg; Duration: 6:45; Upload date: 2026-08-10; Embed URL: https://www.youtube.com/embed/abc123xyz

Expected output

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "How to Brew Pour-Over Coffee",
  "description": "A 6-minute guide to brewing pour-over coffee with a gooseneck kettle.",
  "thumbnailUrl": "https://cdn.example.com/coffee-thumb.jpg",
  "uploadDate": "2026-08-10",
  "duration": "PT6M45S",
  "embedUrl": "https://www.youtube.com/embed/abc123xyz"
}

Six minutes and 45 seconds become PT6M45S, the ISO 8601 duration notation that schema.org's VideoObject type and Google expect; the date is kept in YYYY-MM-DD. Every other field maps one-to-one to a VideoObject property.

How the result is produced

1

Field-to-property mapping

Each form field writes to the matching schema.org property: name to name, description to description, thumbnail URL to thumbnailUrl, embed URL to embedUrl. The two fields that need conversion are duration and date: minutes:seconds is rewritten as ISO 8601 (6:45 becomes PT6M45S) and the date is normalized to YYYY-MM-DD. The finished block is one JSON-LD object meant to sit inside a <script type="application/ld+json"> tag.

2

Output shape

The builder emits a single VideoObject node with @context and @type at the top; empty fields are omitted so the markup stays minimal. Google's video documentation treats thumbnailUrl, uploadDate and duration as required properties, with embedUrl or contentUrl pointing at the player. The builder supplies the values, but only a page that actually renders the video makes the markup usable.

Good uses

  • You wrote a tutorial post with an embedded YouTube walkthrough and want Google to index the video and show it as a video rich result.
  • You are generating head markup for a catalog of product videos and need duration and date fields formatted consistently across all of them.
  • You are testing variants of the markup - different thumbnail, duration, or embed URL - and want clean JSON to paste into Google's Rich Results Test.

Limits and checks

  • The tool converts what you type; it cannot verify that the thumbnail URL resolves, is at least 120px wide (Google's guideline), or shows the actual video. A broken or undersized image can keep the video out of rich results regardless of the markup.
  • Duration and date are converted mechanically. If you enter 6:45 meaning 6 hours 45 minutes, or a future upload date, the output repeats your mistake, and Google rejects upload dates that are in the future or durations that do not match the video.
  • The generated JSON is only valid inside a script tag with type application/ld+json. Pasting the raw object into page body text, or into a page that already serves malformed markup, fails validation with no indication from the builder itself.

Common questions

Why does the output show PT6M45S instead of 6:45?

That is ISO 8601, the duration notation the schema.org VideoObject type expects. The letters are fixed: P for period, T to start the time portion, then H for hours, M for minutes, S for seconds. Google's validator rejects durations written as 6:45 or 6m45s, so you should not edit the generated value.

Does this guarantee my video appears in Google's video rich results?

No. The markup makes the page eligible; Google still has to crawl and render the page, see a visible video player, and judge the result relevant. Broken embeds, videos hidden behind a click, and pages blocked from crawling all prevent rich results even with perfect JSON-LD. The Rich Results Test confirms the markup is valid, nothing more.

References and verification

The example and behavioral notes were checked against the browser implementation. Standards and primary references below define the relevant format, formula, or platform behavior.

Related Tools