
Key takeaways
- Google's VideoObject documentation lists only three required properties: name, thumbnailUrl and uploadDate.
- contentUrl and embedUrl are recommended properties, not required ones, and Google treats them as alternatives to each other rather than a mandatory pair.
- uploadDate must be ISO 8601, and Google recommends including timezone information, as in its own example of 2024-03-31T08:00:00+08:00.
- duration uses ISO 8601 duration format, with Google's own example PT00H30M5S standing for thirty minutes and five seconds.
- Google states plainly that valid structured data does not guarantee a rich result will appear in Search.
VideoObject is one of the schema.org types where a specific, wrong-sounding claim travels further than the source it is supposedly quoting. A four-property required list circulates in SEO advice: name, thumbnailUrl, uploadDate, and either contentUrl or embedUrl. Checked directly against Google’s own current VideoObject documentation, that fourth requirement does not exist. Getting this distinction wrong matters in practice, since a validator or a checklist that treats a recommended property as required will flag pages that are, by Google’s own definition, already compliant.
Required and recommended
Google’s structured data page for Video draws a firm line between two tables, and only three
properties sit in the required one: name, the video’s title; thumbnailUrl, a URL to the
video’s unique thumbnail image; and uploadDate, the date and time the video was first published.
Nothing else appears in that table.
contentUrl and embedUrl both live in the recommended table instead, and Google frames them as
alternatives rather than a pair to satisfy together: it recommends providing contentUrl if
possible, since that is the most effective way for Google to fetch the video content directly, and
recommends falling back to embedUrl only if contentUrl isn’t available. The rest of the
recommended table covers creator (or author), description, duration, expires, hasPart, ineligibleRegion,
interactionStatistic, publication and regionsAllowed, none of which is required either. A page
missing all of these still satisfies Google’s required set as long as name, thumbnailUrl and
uploadDate are present and correctly formatted.
The two formats that fail silently
Both dated properties use ISO 8601, but in different notations, and a mismatch will not throw a
JSON syntax error, it will simply be wrong data.
uploadDate needs to be ISO 8601, and Google recommends adding timezone information, otherwise it
defaults to the timezone used by Googlebot; its documented example is a full timestamp,
2024-03-31T08:00:00+08:00. A malformed string such as 31/03/2024 is not ISO 8601, even though
it happens to be valid JSON.
duration uses ISO 8601 duration notation instead of timestamp notation, and Google’s own example
is PT00H30M5S, which its documentation glosses directly as “thirty minutes and five seconds.” The
leading PT marks a time duration, H/M/S mark hours, minutes and seconds, and the value has
no colons or slashes anywhere in it, a format this site’s own video schema uses the same way (see
duration in the research collection’s video entries, expressed as PT12M30S for twelve minutes
thirty seconds).
Google’s thumbnail guidance is worth treating as a required check even though thumbnailUrl itself
is the only formally required property touching it: the file “must be accessible by Googlebot and
Googlebot Images,” with Google specifically warning not to block it “with robots.txt or a login
requirement,” and to keep it “consistently available at a stable URL.” A thumbnail that returns a
login wall, a 404 after a redesign, or a redirect chain fails this requirement even when the
thumbnailUrl string itself is well-formed.
Valid markup is not ranking
Google states its general caveat for structured data directly: it “does not guarantee that features
that consume structured data will show up in search results,” even for markup that satisfies every
documented required and recommended property. A VideoObject block that validates cleanly still
depends on the underlying video file being reachable, the thumbnail staying accessible over time,
and the page’s actual content matching what the markup asserts. None of that is something a schema
check can confirm from the JSON-LD alone; it can only confirm the markup is internally correct.
Why we care
The gap between what circulates as VideoObject’s required properties and what Google’s own page actually requires is exactly the kind of error this site’s editorial rule exists to catch: name, thumbnailUrl and uploadDate are required, contentUrl and embedUrl are recommended alternatives to each other, and the date and duration formats have exact documented examples that are easy to get subtly wrong without a syntax error ever surfacing. This site’s JSON-LD validator already checks required and recommended properties for Article, Product, FAQPage, HowTo, Organization, BreadcrumbList and Recipe against Google’s own documentation the same way this piece did for Video; VideoObject is not one of its seven supported types yet, and adding it is a natural extension rather than a new category of check, since the underlying method, reading Google’s documented tables directly, is identical.
The evidence
- Sample
- N/A, this is a documentation review, not a data study
Hypothesis: VideoObject has real, specific, machine-checkable required properties that Google documents precisely, and getting the date or duration format wrong is an avoidable failure mode that a documentation review can catch before it ships.
Method: Reading Google's own current, official VideoObject structured data documentation directly, verified by fetching the live page rather than recalling it from memory or a third party's summary, and cross-checking the required-property claim against the page's own required and recommended property tables.
Findings
- Google's required properties table for VideoObject lists exactly three entries: name (the video's title), thumbnailUrl (a URL to the video's unique thumbnail image) and uploadDate (the first-publish date and time).
- contentUrl and embedUrl both sit in the recommended table, not the required one. Google's own guidance treats them as alternatives: provide contentUrl if possible since it is the most effective way for Google to fetch the video file, and provide embedUrl only if contentUrl isn't available.
- A commonly repeated claim states the required set is name, thumbnailUrl, uploadDate, plus either contentUrl or embedUrl. That fourth requirement does not appear in Google's own required table; contentUrl and embedUrl are recommended, and neither is documented as mandatory.
- uploadDate must be ISO 8601, and Google recommends providing timezone information, otherwise it defaults to the timezone used by Googlebot. Its own example is a full timestamp with a timezone offset: 2024-03-31T08:00:00+08:00.
- duration also uses ISO 8601, in duration notation rather than timestamp notation. Google's own example is PT00H30M5S, which it glosses as thirty minutes and five seconds.
- Google's thumbnail guidance states the file must be accessible by Googlebot and Googlebot Images, specifically warning not to block it with robots.txt or a login requirement, and to keep it consistently available at a stable URL.
Limitations: This is a documentation review, not a crawl study, so it cannot say how often real VideoObject markup gets these properties wrong in practice, only what Google's own current page requires and recommends. Google's own documentation is explicit that following it is not sufficient on its own: valid, complete markup does not guarantee a rich result will appear in Search, and the underlying video file, thumbnail image and page content must themselves be genuinely accessible and consistent with what the markup claims, which no amount of schema validation can confirm from the markup alone.
Sources
- 1.Video (VideoObject, Clip, BroadcastEvent) structured data - Google Search CentralPrimary
- 2.Video best practices - Google Search Central
Common questions
Are contentUrl and embedUrl required for VideoObject?
No. Google's own required properties table lists only name, thumbnailUrl and uploadDate. contentUrl and embedUrl are both recommended, and Google presents them as alternatives to each other, with contentUrl preferred because it is the more effective way for Google to fetch the video file directly.
What exact date format does uploadDate need?
ISO 8601. Google recommends including timezone information; otherwise it defaults to the timezone used by Googlebot. Its own documentation example is the full timestamp 2024-03-31T08:00:00+08:00, which is the safest pattern for a validator to check for.
What exact format does duration need?
ISO 8601 duration notation, not a timestamp. Google's own example is PT00H30M5S, which it describes as thirty minutes and five seconds, the same pattern used elsewhere on this site's VideoObject-adjacent schemas.
Does valid VideoObject markup guarantee a video rich result?
No. Google states directly that it does not guarantee a rich result will appear even for markup that follows every documented guideline. The thumbnail, video file and page itself must also be genuinely accessible and match what the markup claims.
About the author

Founder, UpgradIQ FZC LLC
Adam Hafez works on technical SEO and search measurement: how pages get crawled, indexed, ranked and now quoted by answer engines. He founded UpgradIQ, which reads Google Search Console and GA4 to tie ranking movement back to the changes that caused it. He publishes what the data supports and states the limits of it.
- Technical SEO
- Search Console and GA4
- Answer engine optimization
- Structured data
The briefing
Only what actually changed in search, delivered in full by RSS, Atom or JSON feed.
FollowRelated reading
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.
Organization logo structured data generator
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 for Google course lists
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 for FAQPage JSON-LD
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.



