Issue #147 · important
Issue 147
What is this issue?
Pages with embedded video content are missing VideoObject schema, preventing the video from appearing in Google Video Search, video carousels, and video rich results.
Without VideoObject schema:
- Your videos won't appear in Google Video Search
- Videos won't be eligible for video carousels in search results
- Video rich results (thumbnail, duration, upload date) won't display
- Google must detect and understand the video from page context alone
- Key moments/chapters won't appear in search results
A proper VideoObject schema should include: @type (VideoObject), name, description, thumbnailUrl, uploadDate, and optionally duration, contentUrl, embedUrl, hasPart (for key moments).
Why does it matter?
VideoObject schema is important for video SEO and discoverability:
- Google Video Search: Enables videos to appear in Google's dedicated Video Search
- Video carousels: Videos with proper schema can appear in video carousels in search results
- Rich results: Enables video thumbnail, duration, and upload date to appear in search results
- Key moments: Adding
Clipitems enables chapter markers in Google Video results - AI search readiness: AI engines use VideoObject schema to understand and cite video content
- User engagement: Video rich results have higher click-through rates
Resolving this issue improves your SEO health score by ensuring videos are properly structured for maximum visibility in search.
How to fix it
-
Identify pages with video content: Look for pages with:
<video>tags- YouTube/Vimeo embeds (
<iframe>) - Video player elements
-
Add VideoObject JSON-LD structured data to the page's
<head>or before</body>:{ "@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" } -
Include required properties:
name: Video titledescription: Video descriptionthumbnailUrl: Video thumbnail image URL (required by Google)uploadDate: ISO 8601 format (required by Google)
-
Add recommended properties:
duration: In ISO 8601 format (PT9M45S= 9 min 45 sec)contentUrl: For self-hosted videosembedUrl: For YouTube/Vimeo embedshasPart: For key moments/chapters (Clip items)
-
For long videos with chapters, add
hasPartwith Clip items:"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" } ] -
Validate with Google's Rich Results Test
Examples
Example 1: Missing VideoObject Schema
Problematic state:
<!-- Page with video embed but no schema -->
<html>
<head>
<title>SEO Tutorial Video</title>
</head>
<body>
<h1>How to Optimise Title Tags</h1>
<iframe src="https://www.youtube.com/embed/dQw4w9WgXcQ"></iframe>
<p>Watch our tutorial on title tag optimization.</p>
</body>
</html>
Corrected state:
<!-- Page with proper VideoObject schema -->
<html>
<head>
<title>SEO Tutorial Video</title>
<script type="application/ld+json">
{
"@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"
}
</script>
</head>
<body>
<h1>How to Optimise Title Tags</h1>
<iframe src="https://www.youtube.com/embed/dQw4w9WgXcQ"></iframe>
<p>Watch our tutorial on title tag optimization.</p>
</body>
</html>
Example 2: Incomplete VideoObject Schema
Problematic state:
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "SEO Tutorial"
}
Missing required properties: description, thumbnailUrl, uploadDate
Corrected state:
{
"@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"
}
Example 3: Video with Chapters/Key Moments
Corrected state with hasPart:
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "Complete SEO Audit Guide",
"description": "Learn how to perform a complete SEO audit for your website.",
"thumbnailUrl": "https://www.example.com/audit-guide-thumb.jpg",
"uploadDate": "2024-03-15T10:00:00Z",
"duration": "PT15M30S",
"hasPart": [
{
"@type": "Clip",
"name": "Introduction",
"startOffset": 0,
"endOffset": 60,
"url": "https://example.com/video?t=0"
},
{
"@type": "Clip",
"name": "Technical SEO Check",
"startOffset": 60,
"endOffset": 300,
"url": "https://example.com/video?t=60"
},
{
"@type": "Clip",
"name": "Content Analysis",
"startOffset": 300,
"endOffset": 600,
"url": "https://example.com/video?t=300"
}
]
}
How PixyScan detects this
PixyScan follows these logical steps to detect missing VideoObject schema:
-
Detect video content: The crawler identifies pages with:
<video>HTML tags- YouTube/Vimeo embeds (
<iframe>with video URLs) - Video player elements or video-related metadata
-
Extract structured data: The crawler looks for JSON-LD, Microdata, or RDFa blocks on the page
-
Check for VideoObject schema: The crawler verifies if any schema block has:
@typeset toVideoObject- Required properties:
name,description,thumbnailUrl,uploadDate
-
Validate schema completeness: If VideoObject schema is found, the crawler checks for:
thumbnailUrlproperty (required by Google)uploadDateproperty (required by Google)durationin ISO 8601 formatcontentUrlorembedUrlfor the video
-
Trigger conditions: The issue is flagged when:
- Page has video embed but no VideoObject schema
- VideoObject schema exists but
thumbnailUrlis missing - VideoObject schema exists but
uploadDateis missing