VideoObject Schema Missing
Issue No: 147
Category: Structured Data & Rich Results
Issue type: Issue
Priority: IMPORTANT
Description
Pages with embedded video content are missing VideoObject schema, preventing the video from appearing in Google Video Search, video carousels, and video rich results.
How do we capture it
- Detect
<video>tags or YouTube/Vimeo embeds (<iframe>) in page HTML - Check JSON-LD for
"@type": "VideoObject" - If video embed detected but schema absent → trigger issue
What to store
StructuredDataAudit record with schemaType = VideoObject, issueNumber = 147, plus StructuredDataField rows:
| Field | Type | Comment |
|---|---|---|
has_thumbnail_url | boolean | thumbnailUrl present — required by Google |
has_upload_date | boolean | uploadDate present — required by Google |
has_duration | boolean | duration in ISO 8601 format present |
has_content_url | boolean | contentUrl direct video file URL present |
has_embed_url | boolean | embedUrl (e.g. YouTube embed URL) present |
Core audit fields used: isPresent, hasName, hasDescription, rawJson
Condition for trigger
-
Trigger Rule 1: Schema absent on video page
- Target Field:
isPresent - Evaluation Logic:
isPresent = falseAND video embed detected on page - Severity: IMPORTANT
- Diagnostic Message: "Video embed detected on page but no VideoObject schema found."
- Target Field:
-
Trigger Rule 2: Thumbnail URL missing
- Target Field:
has_thumbnail_url - Evaluation Logic:
has_thumbnail_url = false - Severity: IMPORTANT
- Diagnostic Message: "
thumbnailUrlis required by Google but is missing from VideoObject schema."
- Target Field:
-
Trigger Rule 3: Upload date missing
- Target Field:
has_upload_date - Evaluation Logic:
has_upload_date = false - Severity: IMPORTANT
- Diagnostic Message: "
uploadDateis required by Google but is missing from VideoObject schema."
- Target Field:
Sources
Long description
VideoObject gives Google the video's title, description, thumbnail, duration, and upload date — enabling indexing in Google Video Search and video carousels. Without it, Google must detect and understand the video from page context alone.
Adding Clip items enables key moments — chapter markers shown directly in Google Video results:
"hasPart": [
{ "@type": "Clip", "name": "Introduction", "startOffset": 0, "endOffset": 60, "url": "https://example.com/video?t=0" },
{ "@type": "Clip", "name": "Main Tutorial", "startOffset": 60, "endOffset": 540, "url": "https://example.com/video?t=60" }
]
Required fields: name, description, thumbnailUrl, uploadDate
Full example:
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "How to Optimise Your Title Tags",
"description": "A walkthrough of best practices for writing effective title tags for SEO.",
"thumbnailUrl": "https://www.example.com/thumbnail.jpg",
"uploadDate": "2024-03-01T08:00:00Z",
"duration": "PT9M45S",
"embedUrl": "https://www.youtube.com/embed/dQw4w9WgXcQ",
"contentUrl": "https://www.example.com/videos/title-tags.mp4"
}
How to Fix
- Add
VideoObjectJSON-LD to every page with embedded video - Always include
thumbnailUrlanduploadDate(required by Google) - Add
durationin ISO 8601 (PT9M45S= 9 min 45 sec) - Add
hasPartClips for long videos with chapters - Use
contentUrlfor self-hosted videos,embedUrlfor YouTube/Vimeo