VideoObject schema incomplete: add name, thumbnailUrl & uploadDate
Your VideoObject schema is missing required fields like name, thumbnailUrl or uploadDate. Find incomplete video markup free and fix it to stay eligible for video rich results and Key Moments in Google Search.
What it means
This page has VideoObject structured data, but one or more required fields are absent: name (unique video title), thumbnailUrl (a crawlable thumbnail image URL), or uploadDate (ISO 8601 publication date). Recommended fields — contentUrl or embedUrl, duration, description — enrich the result. Missing required fields disqualify the page from Google's video rich results.
Why it matters
Google surfaces videos as a large thumbnail card (title, publisher, duration) and enables the Key Moments feature that deep-links to timestamps. Both need complete VideoObject markup. name labels the result and must be unique per video; thumbnailUrl must be publicly crawlable (not behind a login wall or blocked by robots.txt), Google recommends 1280x720+; uploadDate should carry a timezone offset (2026-07-12T10:00:00+00:00), not a bare date. contentUrl (the actual file) is preferred over embedUrl, and the deprecated interactionCount integer should be replaced by an interactionStatistic object.
How to fix it
- Add
name,thumbnailUrl, anduploadDateto everyVideoObjectblock — these three are unconditionally required. - Use a unique
nameandthumbnailUrlper video; do not reuse values across videos. - Write
uploadDateas a full ISO 8601 DateTime with a timezone offset, not just a date. - Confirm the thumbnail is publicly crawlable (no login wall, not blocked by robots.txt).
- Add
contentUrl(the video file) orembedUrl(the embed player endpoint, not the watch page). - Replace any
interactionCountinteger with aninteractionStatisticInteractionCounter object, and validate in the Rich Results Test.
Example
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "How to Repot a Monstera"
}
</script><script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "How to Repot a Monstera",
"description": "A 3-minute walkthrough of repotting a root-bound Monstera.",
"thumbnailUrl": "https://example.com/img/monstera-16x9.jpg",
"uploadDate": "2026-03-14T08:00:00+00:00",
"contentUrl": "https://example.com/video/monstera.mp4",
"duration": "PT3M20S"
}
</script>name, thumbnailUrl and uploadDate are required; add contentUrl or embedUrl plus duration so the video is eligible for Key Moments.
When it's not a problem
A purely decorative video (background loop, UI animation) with no indexable content does not need VideoObject markup — omitting it is correct. A VideoObject nested in a larger @graph that inherits fields from a parent node may be a false positive; verify with the Rich Results Test. It is separate from schema.invalid (malformed JSON) and schema.none (no markup at all).
How Crawlinx detects it
During parse we read every VideoObject JSON-LD block and check the three required properties (name, thumbnailUrl, uploadDate). Any that are absent are listed in the finding; a total absence of schema is schema.none, not this rule.
How common is it?
32 audited sites in our corpus currently show this issue. The breakdowns below show which platforms, gatekeepers, verticals and countries are most exposed.
FAQ
- Which VideoObject fields does Google require?
- name, thumbnailUrl and uploadDate are the hard-required trio. contentUrl or embedUrl is needed for the video to actually play, and duration unlocks the video duration badge and Key Moments.
- Does thumbnailUrl need a specific size?
- Use an image at least 60x30px; a 16:9 frame 1200px wide or larger is the safe choice. It must be crawlable — not blocked by robots.txt — and represent the video, not a generic poster.
- What date format should uploadDate use?
- ISO 8601 with a timezone offset, e.g. 2026-03-14T08:00:00+00:00. A bare date works but the offset avoids ambiguity about when the video went live.
Audit your own site — free
157 checks, internal PageRank, render-diff. No signup, results in ~30s.