Skip to content
SEO Madmanby Adam Hafez
Free tool

Video schema validator: VideoObject required fields

Video schema validator: check VideoObject JSON-LD for Google's required and recommended properties, ISO 8601 dates and durations. Free, in your browser.

Runs entirely in your browser. Nothing you enter is uploaded, logged or stored.

Parsed with the browser's own JSON.parse against Google's documented property tables for VideoObject. Nothing you type is sent anywhere.

Key takeaways

  • Google documents three required VideoObject properties, name, thumbnailUrl and uploadDate, and treats the rest as recommended.
  • Google documents uploadDate as an ISO 8601 date or datetime and recommends including a timezone in the value.
  • Google recommends contentUrl, or embedUrl when the file URL is not available, so it can locate the video itself.
  • Google recommends creator, or author, as a Person or Organization with a name or alternateName.
  • This checker reads only the JSON-LD typed in and cannot confirm that the thumbnail is crawlable or that the video is indexed.

What it takes

  • A pasted VideoObject JSON-LD object

More tools

All of them free, all of them browser-only.

Browse the tools

How to use it

  1. 1Paste the VideoObject JSON-LDCopy the contents of the script tag with type="application/ld+json" that describes the video, not the surrounding page markup.
  2. 2Fix the three required fieldsAdd name, thumbnailUrl and uploadDate first, since Google documents all three as required for video markup.
  3. 3Correct the date and durationWrite uploadDate as ISO 8601 with a timezone and duration as a value like PT2M10S, then recheck the flagged rows.
  4. 4Point to the video fileAdd contentUrl for the media file, or embedUrl for a player, so Google can locate the video content.

Paste the JSON-LD that describes a video and this validator checks it against the property tables in Google’s video structured data documentation. It runs in your browser with JSON.parse, and nothing you paste is sent anywhere.

What this video schema validator checks

  • A VideoObject node. The input can be one object, an array, or an object with an @graph list. The checker uses the first node whose @type is VideoObject.
  • The three required properties. Google documents name, thumbnailUrl and uploadDate as required. name is the video title, which Google asks to be unique for each video on the site. thumbnailUrl points to the video’s thumbnail image. uploadDate is when the video was first published.
  • Eight recommended properties. contentUrl, embedUrl, description, duration, creator, interactionStatistic, expires and regionsAllowed are each reported as present or missing. Google accepts author in place of creator, so either one counts.
  • creator shape. Google documents creator (or author) as a Person or Organization. A plain text value gets a Warning, and so does a Person or Organization with neither name nor alternateName, because Google says you must provide one of them.
  • interactionStatistic values. Each counter, one object or an array, is checked for an interactionType Google supports, WatchAction, LikeAction, CommentAction or ShareAction, and for a userInteractionCount that is an integer. A legacy interactionCount with no interactionStatistic gets an Info row, since Google recommends the newer property.
  • uploadDate format. It must be an ISO 8601 date or datetime, as in Google’s example 2024-03-31T08:00:00+08:00. A datetime without a timezone gets an extra note, because Google recommends one and otherwise defaults to Googlebot’s timezone.
  • duration format. It must be an ISO 8601 duration. Google’s example is PT1M54S, one minute and fifty-four seconds.
  • A way to find the video. If both contentUrl and embedUrl are missing, the checker warns. Google calls contentUrl the most effective way for it to fetch the video file, and embedUrl the alternative when the file URL is not available.

How to read the results

Every row carries one of four labels.

  • Problem. No VideoObject node, a missing required property, or an uploadDate that is not a valid ISO 8601 date. Fix these first.
  • Warning. A duration that is not an ISO 8601 duration, no contentUrl and no embedUrl, a creator that is not a named Person or Organization, or an unsupported interactionType or non-integer userInteractionCount.
  • Info. A missing recommended property, an uploadDate time with no timezone, or a legacy interactionCount.
  • Pass. The property is present or the format is valid.

If the text is not valid JSON, the checker shows the parser’s error message instead, for example after a trailing comma or a missing quote.

Worked example

This markup sits inside an @graph with a WebPage node:

{
  "@type": "VideoObject",
  "name": "Canonical tags explained",
  "uploadDate": "2026-09-01T08:00:00",
  "duration": "2:10",
  "embedUrl": "https://example.com/embed/42"
}

The checker finds the VideoObject node and reports:

RowResult
thumbnailUrlMissing, Problem
uploadDate is ISO 8601Pass
uploadDate has a timezoneInfo
duration is an ISO 8601 duration2:10, Warning
contentUrl, description, creator, interactionStatistic, expires, regionsAllowedMissing, Info

name, uploadDate, embedUrl and duration pass the presence check. Adding a thumbnailUrl, writing the date as 2026-09-01T08:00:00+00:00 and the duration as PT2M10S clears every Problem and Warning. embedUrl alone satisfies the contentUrl-or-embedUrl check, so no warning appears for it.

Common mistakes it catches

  • No thumbnail. thumbnailUrl is required, so a missing thumbnail is reported as a Problem, not a suggestion.
  • Clock-style durations. 2:10 or 130 instead of PT2M10S.
  • Dates without a timezone. Valid ISO 8601, but Google then assumes Googlebot’s timezone.
  • Non-ISO dates. A value like 01/09/2026 fails the uploadDate check.
  • A creator as a bare string. "creator": "Jane Doe" instead of a Person object with a name.
  • Unsupported interaction types. A ViewAction counter, where Google documents WatchAction for views.
  • No way to reach the video. Neither contentUrl nor embedUrl, so Google has no URL for the video itself.

What it cannot check

It reads only the JSON you paste. It cannot confirm that the thumbnail URL loads or is crawlable, that the video sits on a watch page, as Google requires, or that the video gets indexed. Google’s documentation points to its Rich Results Test for testing the live page.

Sources

  1. 1.Video (VideoObject, Clip, BroadcastEvent) structured data - Google Search CentralPrimary

Frequently asked questions

What are the required properties for VideoObject schema?

Google documents three, name, thumbnailUrl and uploadDate. Everything else in its table, including description, duration, contentUrl and embedUrl, is recommended. This checker marks a missing required field as a Problem and a missing recommended one as Info.

Does valid VideoObject markup guarantee a video rich result?

Google's documentation describes required and recommended properties for eligibility, not a guarantee. Meeting them makes a page eligible, and Google still decides what to show.

Is contentUrl required?

No. Google lists contentUrl and embedUrl as recommended, so this checker flags their absence as a warning rather than a problem.

What happens if uploadDate has no timezone?

Google recommends including one and says that without it, Google defaults to Googlebot's timezone. The checker accepts the date as valid ISO 8601 and adds an Info row suggesting a timezone.

Should I use creator or author on a VideoObject?

Either. Google documents creator and notes support for author, as a Person or Organization with a name or alternateName. The checker accepts whichever one you use.

Which interactionStatistic types does Google support for video?

WatchAction for views, LikeAction for likes or upvotes, CommentAction for comments and ShareAction for reshares, each with an integer userInteractionCount.