No VideoObject schema on a page with video
What is this issue?
This issue reports a VideoObject schema block your page already declares that is
missing a required property or carries an invalid date/duration — not a page with an
embedded video and no VideoObject schema at all.
Checked once a page declares VideoObject schema:
name,description,thumbnailUrlanduploadDateare presentuploadDate, if present, is a valid ISO 8601 date- at least one of
contentUrlorembedUrlis present duration, if present, is a valid ISO 8601 duration
What this issue is not: it does not scan the page for <video> tags or video
embeds. A page with an embedded YouTube or Vimeo player and no VideoObject JSON-LD
is never reported.
Why it matters
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
If this issue was raised, your page already declares a VideoObject missing a
required property or value — open the finding for specifics. The steps below are for
a page that declares none yet: worthwhile to add, and never reported as a defect
while absent.
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: No Schema Declared — Not This Issue
<!-- Page with a video embed but no VideoObject 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>Nothing is reported. This check does not scan for <iframe> or <video> embeds.
Example 1b: The Same Page, With a Valid VideoObject (passes)
{
"@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"
}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
Read the declared structured data: every JSON-LD block is parsed, and
@graphwrappers are flattened.Select declared
VideoObjectentities: any schema block whose@typeisVideoObject. A page that declares none is not examined — this check does not scan the HTML for<video>tags or YouTube/Vimeo<iframe>embeds.Check the required properties:
name,description,thumbnailUrlanduploadDatemust be present.Check the value rules, when present:
uploadDate— must be a valid ISO 8601 datecontentUrlorembedUrl— at least one must be presentduration— if present, must be a valid ISO 8601 duration (e.g.PT1M30S)
This is reported when: the page declares a
VideoObjectmissing a required property, or with an invaliduploadDate,duration, or neithercontentUrlnorembedUrl. A page that embeds a video with noVideoObjectschema at all is never reported.
What we store
Storage Level
Page Level — This issue is evaluated for each individual URL that contains structured data.
Database Table / Prisma Model
PageStructuredData
Stored Fields
| Field | Type | Description |
|---|---|---|
| schemaType | SchemaType | The type of schema (e.g., Organization, Person) |
| schemaFormat | SchemaFormat | The format of the schema (JSON-LD, Microdata, RDFa) |
| schemaIdentifier | String? | Unique identifier for the schema |
| rawJson | Json? | The raw JSON-LD or structured data content |
| schemaErrors | Json? | Array of validation errors found in the schema |
| isValidSchema | Boolean? | Whether the schema is valid according to validation |
| missingFields | Json? | Reserved for future use — the crawler always writes null here today; no check currently populates it |
Detection Dependencies
- The following data sources are required to evaluate this issue:
- HTML Document — The crawler parses the HTML to find structured data (JSON-LD, Microdata, RDFa)
- Structured Data Validation — The extracted schema is validated against Schema.org definitions
- Schema Parser — JSON-LD scripts, Microdata attributes, and RDFa markup are parsed