Skip to main content

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:

FieldTypeComment
has_thumbnail_urlbooleanthumbnailUrl present — required by Google
has_upload_datebooleanuploadDate present — required by Google
has_durationbooleanduration in ISO 8601 format present
has_content_urlbooleancontentUrl direct video file URL present
has_embed_urlbooleanembedUrl (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 = false AND video embed detected on page
    • Severity: IMPORTANT
    • Diagnostic Message: "Video embed detected on page but no VideoObject schema found."
  • Trigger Rule 2: Thumbnail URL missing

    • Target Field: has_thumbnail_url
    • Evaluation Logic: has_thumbnail_url = false
    • Severity: IMPORTANT
    • Diagnostic Message: "thumbnailUrl is required by Google but is missing from VideoObject schema."
  • Trigger Rule 3: Upload date missing

    • Target Field: has_upload_date
    • Evaluation Logic: has_upload_date = false
    • Severity: IMPORTANT
    • Diagnostic Message: "uploadDate is required by Google but is missing from VideoObject schema."

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

  1. Add VideoObject JSON-LD to every page with embedded video
  2. Always include thumbnailUrl and uploadDate (required by Google)
  3. Add duration in ISO 8601 (PT9M45S = 9 min 45 sec)
  4. Add hasPart Clips for long videos with chapters
  5. Use contentUrl for self-hosted videos, embedUrl for YouTube/Vimeo