# Your video has 10,000 views and zero search impressions because the schema is missing

VideoObject schema markup tells search engines what your video is about, how long it is, and where the thumbnail lives. Without it, your video pages are invisible in video search results.

Author: J.A. Watte
Published: April 30, 2026
Source: https://jwatte.com/blog/blog-tool-video-schema/

---

You recorded a product demo, edited it, uploaded it to YouTube, and embedded it on your product page. The YouTube version gets views from YouTube's recommendation engine. The version on your site gets nothing from Google. No video carousel placement. No video rich result. No thumbnail in the SERPs. The page ranks for its text content (if it ranks at all), and the video might as well not exist as far as search is concerned.

The gap is VideoObject schema markup. Google cannot reliably detect that a page contains a video just from the `<iframe>` embed. Even when it does detect the video, it doesn't know the title, description, duration, upload date, or thumbnail URL unless you provide that information in structured data. Without it, your video page is ineligible for the video carousel, video rich results, and Google Video search.

## What VideoObject schema actually does

VideoObject is a Schema.org type that describes a video resource. At minimum, Google requires four properties to consider a video for rich results: `name`, `description`, `thumbnailUrl`, and `uploadDate`. Additionally, either `contentUrl` (direct URL to the video file) or `embedUrl` (URL of the embeddable player) must be present.

Optional but high-value properties include `duration` (ISO 8601 format, e.g., "PT5M30S" for 5 minutes 30 seconds), `interactionStatistic` (view count), `expires` (if the video has a limited availability window), and `hasPart` (for marking key moments/chapters within the video).

The key moments markup (`hasPart` with `Clip` items) is particularly valuable. When present, Google can show timestamped links in the video rich result that take users directly to specific sections. This is the same feature YouTube surfaces natively through chapters, but for videos hosted on your own domain, you need to provide the data through schema markup.

A complete VideoObject block also tells Google whether a transcript is available. The `transcript` property (or linking to a separate page containing the transcript via `associatedArticle`) lets Google index the spoken content of your video, which means your video page can rank for queries that match the dialogue, not just the title and description.

## The transcript gap

Most video pages on the web have no crawlable transcript. The video plays in an iframe, the words exist only as audio, and Google can't hear audio. YouTube auto-generates transcripts, but that transcript lives on YouTube's domain, not yours. It helps YouTube rank for the content. It does nothing for your site.

Adding a transcript to your page has three benefits. First, Google can index the full text content of the video, dramatically expanding the query space the page can rank for. Second, the transcript provides an accessible alternative for deaf and hard-of-hearing users (WCAG 1.2.1, Level A). Third, the transcript gives visitors who prefer reading over watching a way to consume the content, which increases time on page and reduces bounce rate for the subset of users who won't click play.

The transcript doesn't need to be a word-for-word closed-caption file. A lightly edited version that reads well as text is fine. Some publishers structure it as an article that stands on its own, with the video as supplementary. This approach maximizes both search visibility and user experience.

## What the Video Schema Audit checks

The [Video Schema + Transcript Audit](/tools/video-schema-transcript-audit/) scans your page for video embeds and validates three things.

First, it checks whether VideoObject JSON-LD markup exists and whether all required properties are present. Missing `thumbnailUrl` is the most common gap: publishers fill in name and description but forget the thumbnail, which makes the rich result ineligible.

Second, it validates the format of each property. Duration must be ISO 8601 ("PT5M30S", not "5:30"). Upload date must be ISO 8601 date format. Thumbnail URL must be a valid, reachable image URL (not a relative path that resolves to a 404). These formatting errors are invisible in testing but cause Google to silently ignore the markup.

Third, it checks for a crawlable transcript. If the page has no `<transcript>` element, no text block associated with the video, and the schema lacks a `transcript` property, the audit flags it. A video page without a transcript is leaving search visibility on the table.

The audit generates a complete JSON-LD block you can paste into your page's `<head>`, pre-filled with the video's detected metadata and placeholder values for anything it couldn't extract automatically.

## How to add VideoObject schema

For a YouTube embed on your product page:

```html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "Product Demo: Widget Pro Setup",
  "description": "Step-by-step setup of Widget Pro in under 5 minutes.",
  "thumbnailUrl": "https://example.com/images/widget-pro-thumb.jpg",
  "uploadDate": "2026-03-15",
  "duration": "PT4M45S",
  "embedUrl": "https://www.youtube.com/embed/dQw4w9WgXcQ",
  "interactionStatistic": {
    "@type": "InteractionCounter",
    "interactionType": "https://schema.org/WatchAction",
    "userInteractionCount": 10423
  }
}
</script>
```

For self-hosted videos, replace `embedUrl` with `contentUrl` pointing to the actual video file. If your video has chapters, add a `hasPart` array with `Clip` items, each specifying `name`, `startOffset`, and `endOffset` in seconds.

If you're building a content-driven site, *The $97 Launch* covers structured data patterns for common page types, so schema markup is part of the build process rather than an afterthought.

## Fact-check notes and sources

- Google VideoObject documentation: [Google Search Central, Video structured data](https://developers.google.com/search/docs/appearance/structured-data/video). Required properties: name, description, thumbnailUrl, uploadDate, plus contentUrl or embedUrl.
- Key Moments (Clip) markup: [Google Search Central, Clip structured data](https://developers.google.com/search/docs/appearance/structured-data/video#clip).
- WCAG 1.2.1 Audio-only and Video-only (Prerecorded): [W3C WCAG 2.1](https://www.w3.org/TR/WCAG21/#audio-only-and-video-only-prerecorded), Level A.
- ISO 8601 duration format: "PT#H#M#S" per ISO 8601:2004, Section 4.4.3.2.

## Related reading

- [Structured data validation](/blog/blog-tool-structured-data/) — validating all schema types beyond video
- [FAQ schema markup](/blog/blog-tool-faq-schema/) — another rich-result-eligible schema type
- [JSON-LD nesting and graph patterns](/blog/blog-tool-json-ld-nesting/) — avoiding nested schema errors
- [How-To schema for tutorials](/blog/blog-tool-how-to-schema/) — step-based markup that pairs with video
- [Image alt text auditing](/blog/blog-tool-image-alt-audit/) — accessible media beyond video

*This post is informational, not SEO-consulting advice. Mentions of Google, YouTube, and Schema.org are nominative fair use. No affiliation is implied.*


---

Canonical HTML: https://jwatte.com/blog/blog-tool-video-schema/
RSS: https://jwatte.com/feed.xml
JSON Feed: https://jwatte.com/feed.json
Hero image: https://jwatte.com/images/blog-tool-video-schema.webp
