AggregateRating schema checker for review snippets
AggregateRating schema checker: test JSON-LD against Google review snippet rules for ratingValue, counts, scale and item type. Free, runs in your browser.
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.
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.
@graph
list. The checker uses the first node whose @type is VideoObject.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.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 (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.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.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.PT1M54S, one minute
and fifty-four seconds.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.Every row carries one of four labels.
uploadDate that is not a
valid ISO 8601 date. Fix these first.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.uploadDate time with no timezone, or a legacy
interactionCount.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.
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:
| Row | Result |
|---|---|
| thumbnailUrl | Missing, Problem |
| uploadDate is ISO 8601 | Pass |
| uploadDate has a timezone | Info |
| duration is an ISO 8601 duration | 2:10, Warning |
| contentUrl, description, creator, interactionStatistic, expires, regionsAllowed | Missing, 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.
thumbnailUrl is required, so a missing thumbnail is reported as a
Problem, not a suggestion.2:10 or 130 instead of PT2M10S.01/09/2026 fails the uploadDate check."creator": "Jane Doe" instead of a Person object with a name.ViewAction counter, where Google documents WatchAction
for views.contentUrl nor embedUrl, so Google has no URL for the
video itself.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.
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.
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.
No. Google lists contentUrl and embedUrl as recommended, so this checker flags their absence as a warning rather than a problem.
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.
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.
WatchAction for views, LikeAction for likes or upvotes, CommentAction for comments and ShareAction for reshares, each with an integer userInteractionCount.
AggregateRating schema checker: test JSON-LD against Google review snippet rules for ratingValue, counts, scale and item type. Free, runs in your browser.
Logo structured data generator: build Organization JSON-LD with logo, url, name and sameAs, and check Google's logo rules. Free, runs in your browser.
Course schema validator: paste Course JSON-LD and check name, description, provider and the 60 character display limit. Free, runs in your browser.
FAQ schema validator: check FAQPage JSON-LD so every Question has a name and acceptedAnswer text. Notes Google's FAQ rich result removal. Free, in-browser.