Video Schema: Video Content Markup

Video content competes for attention in search results alongside articles, images, and other formats. VideoObject schema tells Google exactly what your video contains, enabling rich results with thumbnails, duration markers,…

Video content competes for attention in search results alongside articles, images, and other formats. VideoObject schema tells Google exactly what your video contains, enabling rich results with thumbnails, duration markers, and key moments. For websites investing in video content, proper markup determines whether that investment translates to search visibility.

What Video Rich Results Display

Video schema enables several distinct search features:

Video thumbnails appear alongside search listings, immediately signaling video content availability. These visual elements catch attention in text-dominated results.

Duration and upload date display beneath video listings, helping users evaluate whether to watch.

Key moments break longer videos into timestamped sections, allowing users to jump directly to relevant parts from search results.

Video carousels aggregate video content for relevant queries, giving schema-marked videos opportunity for prominent placement.

For Nashville businesses creating video content, whether tutorial videos, virtual tours, or promotional material, proper schema maximizes the return on that production investment by ensuring Google understands and can feature the content appropriately.

When VideoObject Schema Applies

VideoObject schema works for video content you host or embed on your pages. The schema describes the video itself, not the page containing it.

Appropriate uses:

Product demonstration videos. Tutorial and how-to videos. Webinar recordings. Promotional brand videos. Interview and podcast video versions. Virtual tours and walkthroughs.

Implementation contexts:

Self-hosted videos on your server. YouTube embeds on your pages. Vimeo or other platform embeds. Videos within broader content pages.

The schema marks up the video as content; where the video file actually lives matters less than having it properly described on your page.

Required Properties

Google requires certain properties for video rich result eligibility.

name provides the video title:

"name": "How to Install a Ceiling Fan in 30 Minutes"

description summarizes video content:

"description": "Step-by-step guide to installing a standard ceiling fan, including electrical connections, mounting, and blade attachment. Suitable for DIYers with basic electrical knowledge."

Keep descriptions under 200 characters for optimal display, though longer descriptions are valid.

thumbnailUrl points to the video’s preview image:

"thumbnailUrl": "https://www.example.com/videos/ceiling-fan-thumbnail.jpg"

Thumbnail requirements: minimum 60×30 pixels, maximum 1920×1080. Provide high-quality images that accurately represent video content.

uploadDate indicates when the video was published:

"uploadDate": "2025-01-10T08:00:00-06:00"

Use ISO 8601 format with timezone offset.

Recommended Properties That Enhance Display

duration shows video length using ISO 8601 duration format:

"duration": "PT28M35S"

This indicates 28 minutes and 35 seconds. The format uses:

  • PT (period of time)
  • H for hours
  • M for minutes
  • S for seconds

PT1H15M30S means 1 hour, 15 minutes, 30 seconds.

contentUrl points to the actual video file:

"contentUrl": "https://www.example.com/videos/ceiling-fan-install.mp4"

This should be a direct URL to the video file, not a page containing the video.

embedUrl provides the embeddable player URL:

"embedUrl": "https://www.youtube.com/embed/VIDEO_ID"

For YouTube videos, use the embed URL format. For self-hosted videos, this would be your video player’s embed endpoint.

interactionStatistic shows view counts:

"interactionStatistic": {
  "@type": "InteractionCounter",
  "interactionType": { "@type": "WatchAction" },
  "userInteractionCount": 15420
}

View counts add social proof to video listings.

Working with YouTube Embeds

Most websites use YouTube hosting for videos. Schema markup on your page enhances how Google treats the embed within your site’s context.

YouTube already provides structured data for videos on youtube.com. Your schema on your website helps Google understand the video in your page’s context, particularly for:

  • Associating the video with your brand/organization
  • Connecting the video to surrounding page content
  • Enabling video rich results for your page (not just YouTube’s)
{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "Nashville Office Virtual Tour",
  "description": "Take a virtual walkthrough of our downtown Nashville headquarters, featuring our collaborative workspaces, client meeting areas, and rooftop terrace.",
  "thumbnailUrl": "https://www.yoursite.com/images/office-tour-thumb.jpg",
  "uploadDate": "2025-01-05",
  "duration": "PT4M22S",
  "embedUrl": "https://www.youtube.com/embed/YOUR_VIDEO_ID",
  "contentUrl": "https://www.youtube.com/watch?v=YOUR_VIDEO_ID"
}

Don’t duplicate all of YouTube’s metadata unnecessarily. Focus on properties that help Google understand the video in your page’s context.

Key Moments: Clip and SeekToAction

Key moments allow users to jump to specific video sections directly from search results. Two methods enable this.

Clip markup manually specifies video segments:

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "Complete Kitchen Renovation Guide",
  "description": "Full walkthrough of kitchen renovation process from planning to completion.",
  "thumbnailUrl": "https://www.example.com/thumb.jpg",
  "uploadDate": "2025-01-10",
  "duration": "PT45M",
  "hasPart": [
    {
      "@type": "Clip",
      "name": "Planning and Budget",
      "startOffset": 30,
      "endOffset": 480,
      "url": "https://www.example.com/video?t=30"
    },
    {
      "@type": "Clip",
      "name": "Demolition Process",
      "startOffset": 480,
      "endOffset": 900,
      "url": "https://www.example.com/video?t=480"
    },
    {
      "@type": "Clip",
      "name": "Cabinet Installation",
      "startOffset": 900,
      "endOffset": 1500,
      "url": "https://www.example.com/video?t=900"
    },
    {
      "@type": "Clip",
      "name": "Countertop and Finishing",
      "startOffset": 1500,
      "endOffset": 2700,
      "url": "https://www.example.com/video?t=1500"
    }
  ]
}

Clip properties:

  • name describes the segment
  • startOffset and endOffset specify timing in seconds
  • url links to video at that timestamp

SeekToAction markup tells Google your video supports timestamp URLs, allowing automatic key moment detection:

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "Kitchen Renovation Guide",
  "potentialAction": {
    "@type": "SeekToAction",
    "target": "https://www.example.com/video?t={seek_to_second_number}",
    "startOffset-input": "required name=seek_to_second_number"
  }
}

SeekToAction works when:

  • Your video player supports timestamp parameters
  • Video chapters are defined in the video itself (YouTube chapters)
  • Google can automatically identify logical segments

For YouTube videos, ensure chapters are set in the video description. Google can then use SeekToAction to enable key moments based on those chapters.

Self-Hosted Video Considerations

Videos hosted on your own servers require additional attention:

Accessibility: Google must be able to access and fetch your video files. Check robots.txt isn’t blocking video URLs.

File format: Use common formats (MP4, WebM) that Googlebot can process.

contentUrl specificity: Point directly to the video file, not to a page or player.

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "Product Assembly Instructions",
  "description": "Complete assembly guide for Model XR-500",
  "thumbnailUrl": "https://www.example.com/videos/thumbnails/xr500-thumb.jpg",
  "contentUrl": "https://www.example.com/videos/xr500-assembly.mp4",
  "uploadDate": "2025-01-08",
  "duration": "PT12M45S"
}

For self-hosted videos, also consider:

  • Video sitemap submission
  • Proper video file headers and caching
  • CDN configuration for video delivery

Video Sitemaps: Complementary to Schema

Video sitemaps help Google discover video content across your site. They complement, not replace, VideoObject schema.

A video sitemap entry:

<url>
  <loc>https://www.example.com/videos/ceiling-fan-install</loc>
  <video:video>
    <video:thumbnail_loc>https://www.example.com/thumbs/ceiling-fan.jpg</video:thumbnail_loc>
    <video:title>How to Install a Ceiling Fan</video:title>
    <video:description>Step-by-step ceiling fan installation guide</video:description>
    <video:content_loc>https://www.example.com/videos/ceiling-fan.mp4</video:content_loc>
    <video:duration>1715</video:duration>
  </video:video>
</url>

Video sitemaps help discovery. Schema helps understanding and rich result eligibility. Use both for comprehensive video SEO.

Method Purpose When to Use
VideoObject schema Rich result eligibility, detailed metadata Every page with video
Video sitemap Discovery, indexing Sites with many videos
YouTube chapters Key moments via SeekToAction YouTube-hosted content
Clip markup Manual key moments Self-hosted or specific segment highlighting

Complete Implementation Example

A Nashville home services company’s video tutorial page:

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "How to Troubleshoot a Furnace That Won't Start",
  "description": "Professional HVAC technician walks through common furnace issues and basic troubleshooting steps homeowners can safely perform before calling for service.",
  "thumbnailUrl": [
    "https://www.nashvillehvac.example.com/videos/thumbs/furnace-troubleshoot-16x9.jpg",
    "https://www.nashvillehvac.example.com/videos/thumbs/furnace-troubleshoot-4x3.jpg",
    "https://www.nashvillehvac.example.com/videos/thumbs/furnace-troubleshoot-1x1.jpg"
  ],
  "uploadDate": "2025-01-12T10:00:00-06:00",
  "duration": "PT8M42S",
  "embedUrl": "https://www.youtube.com/embed/VIDEO_ID",
  "interactionStatistic": {
    "@type": "InteractionCounter",
    "interactionType": { "@type": "WatchAction" },
    "userInteractionCount": 4250
  },
  "hasPart": [
    {
      "@type": "Clip",
      "name": "Check Thermostat Settings",
      "startOffset": 15,
      "endOffset": 95,
      "url": "https://www.nashvillehvac.example.com/videos/furnace-troubleshoot?t=15"
    },
    {
      "@type": "Clip",
      "name": "Inspect Air Filter",
      "startOffset": 95,
      "endOffset": 210,
      "url": "https://www.nashvillehvac.example.com/videos/furnace-troubleshoot?t=95"
    },
    {
      "@type": "Clip",
      "name": "Check Circuit Breaker",
      "startOffset": 210,
      "endOffset": 295,
      "url": "https://www.nashvillehvac.example.com/videos/furnace-troubleshoot?t=210"
    },
    {
      "@type": "Clip",
      "name": "Pilot Light and Ignition",
      "startOffset": 295,
      "endOffset": 420,
      "url": "https://www.nashvillehvac.example.com/videos/furnace-troubleshoot?t=295"
    },
    {
      "@type": "Clip",
      "name": "When to Call a Professional",
      "startOffset": 420,
      "endOffset": 522,
      "url": "https://www.nashvillehvac.example.com/videos/furnace-troubleshoot?t=420"
    }
  ],
  "author": {
    "@type": "Organization",
    "name": "Nashville HVAC Experts",
    "url": "https://www.nashvillehvac.example.com"
  }
}

Common Mistakes

Missing or broken thumbnail. ThumbnailUrl returns 404 or points to wrong image. Test thumbnail URLs independently.

Duration format errors. Using “8:42” instead of “PT8M42S”. Always use ISO 8601 duration format.

Outdated embedUrl. Video was re-uploaded with new URL but schema still points to old embed. Verify embed URLs resolve correctly.

contentUrl pointing to page instead of file. ContentUrl should be the video file (example.com/video.mp4), not the page containing the video (example.com/video-page).

Clip timestamps that don’t match video. Clip says segment starts at 300 seconds but video content at that point doesn’t match the clip name. Verify all timestamps against actual video content.

Schema for restricted videos. Video requires login or payment but schema makes it appear freely available. Be transparent about access requirements.

Testing and Validation

Rich Results Test validates VideoObject schema and previews potential rich result display.

Search Console Video indexing report shows which videos Google has discovered and indexed, plus any issues detected.

Manual verification: Search for your video content and check whether thumbnails and rich features appear in results.

For sites with significant video content, implement schema through CMS templates or video player configuration rather than manual per-video markup. Automation ensures consistency as your video library grows.


Sources

  • Google Search Central: Video Structured Data

https://developers.google.com/search/docs/appearance/structured-data/video

  • Schema.org: VideoObject Type Definition

https://schema.org/VideoObject

  • Google Search Central: Key Moments Markup

https://developers.google.com/search/docs/appearance/structured-data/video#key-moments

  • Google Search Console: Video Indexing Report

https://support.google.com/webmasters/answer/9495631

Video rich result display depends on multiple factors including video quality, page authority, and query context. Valid schema enables eligibility but doesn’t guarantee rich result appearance for every search.

Leave a Reply

Your email address will not be published. Required fields are marked *