Home/ Blog /SEO

How to Use VideoObject Schema and When Videos Get Video Results

Turan Doğan
Turan Doğan
SEO & GEO Specialist
SEO April 20, 2026 13 min read
How to Use VideoObject Schema and When Videos Get Video Results
SUMMARY
VideoObject is the structured data type that describes the title, thumbnail and publication time of a video on a page in a form Google can read, and its only required fields are name, thumbnailUrl and uploadDate. The critical point where schema alone is not enough is this: Google reserves video features for watch pages, where the video is the main reason the page exists, so a blog post or product page with an embedded video may not get a video thumbnail despite correct markup. That is why the right question is not "how do I write the schema?" but "is this page really a watch page?"

Embedding a video on a page does not make that video exist for Google. What the browser shows is a player frame: the name of the file inside it, its duration, what it covers and when it was published are often written nowhere in the page's HTML. Google tries to fill this gap on its own, but when the only clue it has is an iframe address, it is likely to treat the page as an ordinary text result instead of identifying the video.

VideoObject is the structured data type that closes this gap. It declares the video's title, thumbnail, duration and publication time in a machine-readable form. However, writing the markup correctly is only half of getting a video result. The other half is a condition most guides skip: what kind of page the page itself is.

What exactly VideoObject schema tells Google

Google tries to understand video details on its own. VideoObject lets you steer that guesswork: you decide information such as the description, thumbnail URL, upload date and duration shown in video results. The markup also makes the video easier to find.

The surfaces where videos can appear are not limited to one place. The main search results page, the Videos mode, Google Images and Discover are different display channels. On top of these, additional features such as the live badge and key moments can kick in, depending on how the page is marked up.

One caveat here. Google does not guarantee that adding markup will result in a particular video feature, and some features may not be eligible to trigger for some queries. Schema produces eligibility, not results.

Fewer required fields, and more decisive recommended fields, than you think

Most Turkish-language resources list four required fields for VideoObject and include description in the list. In Google's own definition, there are three required fields.

  • name: The title of the video. It must be unique for each video on the site.
  • thumbnailUrl: The URL pointing to the video's unique thumbnail file. It is a repeatable field, and multiple sizes can be provided.
  • uploadDate: The date and time the video was first published, in ISO 8601 format. If you don't specify a time zone, the time zone used by Googlebot is assumed.

The remaining fields fall into the recommended category, but "recommended" does not mean "optional decoration" here. The description, duration, contentUrl, embedUrl, expires and hasPart fields directly determine the information density of the result and which features you are eligible for. The duration field is written in ISO 8601 duration format: PT00H30M5S represents a video thirty minutes and five seconds long.

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "Setting up category page filters",
  "description": "A walkthrough video showing step by step when filter parameters should produce indexable pages.",
  "thumbnailUrl": [
    "https://example.com/images/filter-setup-1280x720.webp",
    "https://example.com/images/filter-setup-640x360.webp"
  ],
  "uploadDate": "2026-05-14T09:30:00+03:00",
  "duration": "PT14M22S",
  "contentUrl": "https://example.com/video/filter-setup.mp4",
  "embedUrl": "https://example.com/player/filter-setup",
  "inLanguage": "en"
}

A warning: the name, description and thumbnailUrl values must be unique for each video on the site. The most common mistake on corporate sites is stamping the same template description and the same brand image onto every video page. This leaves the markup technically valid but with zero distinguishing power.

The difference between contentUrl and embedUrl is the detail that costs the most in practice

Both are URL fields, and neither is the page's address. The distinction is this:

  • contentUrl points to the actual content bytes of the video file. This is the most effective way for Google to fetch your video file, and this field should be provided whenever possible.
  • embedUrl is the address of the player that plays the video. It is usually the src value of the iframe or embed tag on the page.

Writing the address of the page where the video is published into both fields is a common mistake and leaves the fields useless. If contentUrl cannot be provided, embedUrl is provided instead.

The practical consequence of this distinction ties directly to feature eligibility. For features such as video previews and key moments to work, Google must be able to successfully fetch the actual bytes of the video file. So blocking the streaming file's URL with robots.txt or noindex, keeping the video file at changing addresses or having a server that can't handle crawl requests switches off these features, even if the schema is flawless.

Schema that fails the thumbnail rule fails silently

The prerequisite for being eligible to appear in video features is that the video has a thumbnail. If Google can fetch your video files, it tries to generate the thumbnail itself; if you want to decide which image is used, you declare it through one of four sources: the poster attribute of the video tag, the video:thumbnail_loc tag in a video sitemap, the thumbnailUrl field in structured data or the og:video:image property in the Open Graph protocol. If you use more than one, you need to provide the same image URL in all of them.

The technical conditions the image must meet are also clear:

  • Supported formats: BMP, GIF, JPEG, PNG, WebP, SVG and AVIF.
  • Size: at least 60x30 pixels; larger is preferred.
  • Access: Googlebot and Googlebot-Image must be able to reach the file, the file must not be blocked by robots.txt or a login requirement, and it must sit at a stable URL.
  • Transparency: at least 80 percent of the pixels must have an alpha value above 250, meaning the image must be largely opaque.

The last item explains why PNG cover images with transparent backgrounds prepared on the design side are silently filtered out. No error shows up in the schema, yet the rich result still doesn't come.

If there is no video result despite correct schema, the problem is the page type

This section corrects the false assumption that wastes the most time in practice. Google reserves video features, including video results on the main search results page and the Videos mode, for pages where the video is the main reason the page exists. These pages are called watch pages, and the definition is simple: the main reason the user visits the page is to watch a single video.

Google's own distinction looks like this:

Counts as a watch pageDoes not count as a watch page
Video landing pageBlog post reviewing an embedded video
TV series episode player pageProduct page hosting a 360-degree video of the product
News video watch pageVideo category page listing multiple videos with equal prominence
Sports highlights pageMovie review page with an embedded trailer
Event clip page

What the right-hand column has in common is that the video is an element that complements the other content on the page. Writing VideoObject on these pages is not wrong, and it is not wasted either: a page that is not a watch page may be eligible to appear as a text result and as a Google Images result with a video badge. But expectations should be set accordingly. When you add VideoObject for a promotional video on product pages, the goal is not to get a video thumbnail placed next to the product result but to accurately declare the video's existence and content.

If the video is an asset that should appear with video features, the solution is not to force the markup but to give that video its own watch page. It is not a problem for the same video to be on both a watch page and a news article or product page. Each watch page needs a page title and description specific to that video.

There is one more related rule: the main structured data type reflecting the page's primary focus must be present. If you put only Video markup on a page that is mostly a recipe, Google will not have enough information to show that page as a recipe rich result. Video schema does not replace the page's main type; it is added alongside it.

How to control key moments with Clip and SeekToAction

Key moments let users navigate a video like chapters in a book. Google tries to detect segments automatically; when you declare them, it gives priority to the ones you define. There are two ways to take control.

  • With Clip, you write the start and end time and the label of each segment yourself. Its required fields are name, startOffset (the start in seconds) and url (a link pointing to the same URL path as the video and carrying a time parameter); endOffset is recommended. It is supported in all languages where Google Search is available.
  • With SeekToAction, you don't write segments one by one; you declare where in your URL structure you put timestamps, and Google determines the key moments itself. Turkish is among the supported languages.
"hasPart": [
  { "@type": "Clip", "name": "Deciding on filter parameters",
    "startOffset": 45, "endOffset": 180,
    "url": "https://example.com/video/filter-setup?t=45" },
  { "@type": "Clip", "name": "Checking the canonical",
    "startOffset": 181, "endOffset": 320,
    "url": "https://example.com/video/filter-setup?t=181" }
]

Defining segments manually makes sense when you want to decide which section appears with which title. If you want to switch the feature off completely, including automatic detection, the nosnippet rule is used. If the video is hosted on YouTube, key moments are managed not with Clip markup but with timestamps in the YouTube description.

Self-hosting or YouTube?

Schema does not make this decision; the business model does. A real comparison of the two options looks like this:

CriterionHosting on your own siteEmbedding via YouTube
Ability to provide contentUrlPossible; Google can fetch the file directlyNot possible; only embedUrl remains
Control over key momentsFrom schema, via Clip or SeekToActionFrom timestamps in the YouTube description
Infrastructure loadA server able to handle storage, streaming, the player and crawl trafficNo load on the hosting and transcoding side
Where the viewer goesTraffic stays on your own domainPart of it happens on YouTube
Additional visibility surfaceOnly your own pageYouTube is a search surface in its own right

The honest conclusion is this: for most sites, YouTube is the practical choice. The infrastructure cost of hosting video, player maintenance and crawl load rarely pay off for a business where video is not the product. Moreover, when you embed a third-party player, Google may index the video both on your page and on the platform's equivalent page, and both versions may appear if the pages are eligible. Even in this case, it is recommended that you provide structured data for your own watch page and add those pages to your video sitemap.

Self-hosting plus a VideoObject setup wins in a narrow set of scenarios: education and course sites where the video itself is the product being sold, publishers that gather news and sports clips on their own domain, platforms that need to control viewing data and player behavior, and content that would be commercially problematic to move to YouTube. In these scenarios, the feature eligibility that comes with contentUrl and a watch page architecture make a real difference.

As video's share of brand visibility grows

Video is no longer just a page element; it is a source layer where the brand's name appears. In Ahrefs' study of 75,000 brands, a rank correlation of 0.737 was measured between the brand name appearing in video titles, descriptions or transcripts and the brand's visibility in AI answers, and this was the highest value among the signals examined in the study. This is a correlation, not proof that publishing video leads to AI visibility; large, well-known brands being mentioned in more videos and appearing in more answers can produce the same result.

The practical takeaway, without exaggeration, is this: video is not a standalone lever for visibility in generative search engines but a second mention surface that sits alongside text content. In this picture, VideoObject schema makes sure the video is described correctly in search; what produces mentions is the video itself and the quality of its content.

Checks to pass before going live

Once the schema is written, the following are verified in order:

  1. Is the video on the page in a common HTML element? Google can find videos provided with video, embed, iframe and object elements.
  2. Does loading the video require a user action such as scrolling or clicking? If so, the video cannot be found.
  3. If the video is added with JavaScript, does it appear in the rendered HTML? This is checked with the URL Inspection tool.
  4. Is a fragment identifier used to load the video? Google generally does not support fragment URLs.
  5. Is the thumbnail file at a stable URL and open to crawlers?
  6. Is the information in the schema consistent with the actual video content and other metadata?
  7. Is the markup syntactically valid? Critical errors are fixed in the Rich Results Test validation step; then a few pages go live and the URL Inspection tool is used to test how Google sees the page.

The order of this list matters. Syntax validation should be left until last, because most errors are not in the syntax but on the accessibility and page type side. A valid JSON-LD block will not rescue a thumbnail blocked by robots.txt or a page that is not a watch page.

Frequently Asked Questions

Does adding VideoObject mean the video will definitely appear as a video result?

No. Markup produces eligibility, not a guarantee. Google does not commit to triggering a particular video feature, and some features may not be eligible to appear for some queries.

What should you do if there are multiple videos on the same page?

A page listing multiple videos with equal prominence does not count as a watch page. If one of the videos really is the focus of the page, the structure is built accordingly; if they all carry equal weight, giving each video its own watch page is the way to become eligible for video features.

Does the video play directly in the search result?

Google does not show the video file directly in search results. A user who clicks a video result is sent to your site to watch the video. That is why the speed of the watch page and the player's behavior in the first second are as decisive as the result itself.

What should go in the schema if you know the video will be taken down?

The expires field is written only if the video really has an end of validity. Adding this field to a video that does not expire can cause the content to be treated as unavailable for no reason.

Was this article helpful?
Add Seobaz as a preferred source on Google to see us more often in your search results and AI answers.
Add as preferred source
Share this article
Turan Doğan
Founder · SEO & GEO Specialist
Publishing up-to-date guides on SEO, GEO and AEO since 2014, helping brands get seen on both Google and AI engines.
WhatsApp Online · Quick reply
Gift Wheel A discount on every spin
View Cart