Guides· 8 min read

Video Schema Markup and Sitemaps: Get Product Videos Indexed

A working VideoObject JSON-LD template, a video sitemap example, and the watch page rule that decides whether Google indexes your product video at all.

By disha Sharma

ShareXLinkedIn
Video schema markup checklist card listing the required VideoObject fields name, thumbnailUrl and uploadDate, plus duration as PT1M30S in schema and 90 seconds in a video sitemap

You added a demo video to your feature page, waited a month, and Search Console says "No video indexed." The markup isn't always the problem. Since 2023, Google only treats a video as indexable when it's the main thing on the page.

The short answer: video schema markup is a VideoObject block in JSON-LD that tells Google a page has a video, plus its title, thumbnail and upload date. A video sitemap lists those video pages for the whole site. To get a product video indexed, you need three things:

  1. A watch page. The video is above the fold, prominent, and the reason the page exists.
  2. Valid VideoObject markup on that page, with the three required fields (name, thumbnailUrl, uploadDate) and the recommended ones (description, duration, contentUrl or embedUrl).
  3. A video sitemap (or video entries in your existing sitemap), submitted in Google Search Console.

Here's what Google requires, according to its own video structured data docs and video sitemap reference:

Schema markup (VideoObject)Video sitemap
DescribesOne video, on the page itselfEvery video page, site-wide
Requiredname, thumbnailUrl, uploadDatethumbnail_loc, title, description, plus content_loc or player_loc
Duration formatISO 8601, e.g. PT1M30SSeconds, from 1 to 28,800
Where it livesJSON-LD in the page HTMLAn XML file submitted in Search Console

Most guides stop at the markup. The part product teams miss is the watch page rule, so that's where we'll start.

Why Your Product Video Isn't Indexed: The Watch Page Rule

In April 2023, Google started showing video thumbnails in main search results only "when the video is the main content of a page." In December 2023, it extended the rule to Video mode.

Google's own examples of pages where video is not the main content:

  • A blog post where the video supports the text
  • A product details page with a complementary video
  • A category page listing several videos of equal prominence

That covers most places SaaS teams put demo videos: the homepage hero, a feature page, a launch blog post. Those pages can still rank as normal web results. They just won't show the video thumbnail, and Search Console's video indexing report will flag them with reasons like "Video isn't on a watch page."

The fix isn't to strip videos from feature pages. Keep them there for visitors, and give each important video its own watch page too: /demo, /videos/onboarding-walkthrough, /changelog/video/march-release. One video, above the fold, with a short description and transcript below it.

Rule of thumb: if you want a video to appear as a video in Google, build a page whose job is to play that one video.

The VideoObject Schema Template (JSON-LD)

Google recommends JSON-LD. Here's a working template for a product demo watch page:

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "Acme Analytics Product Demo: Build a Dashboard in 90 Seconds",
  "description": "A 90-second walkthrough of connecting a data source, building a revenue dashboard and sharing it with your team.",
  "thumbnailUrl": "https://example.com/videos/demo/thumbnail-1280x720.jpg",
  "uploadDate": "2026-11-08T09:00:00+05:30",
  "duration": "PT1M30S",
  "contentUrl": "https://example.com/videos/demo/acme-demo.mp4",
  "embedUrl": "https://example.com/embed/acme-demo"
}

What each field does, and where it goes wrong:

  • name (required): the video title. Match the visible title on the page.
  • thumbnailUrl (required): a stable image URL Googlebot can fetch. Google accepts BMP, GIF, JPEG, PNG, WebP, SVG and AVIF, minimum 60×30 pixels (video best practices). Bigger is better; 1280×720 is a safe default.
  • uploadDate (required): ISO 8601. Include the time and timezone, like the example, so the date can't be misread.
  • description (recommended): one or two plain sentences on what the viewer will see.
  • duration (recommended): ISO 8601. PT1M30S is 1 minute 30 seconds, and PT45S is 45 seconds.
  • contentUrl / embedUrl (recommended): the video file and the player URL. Google needs at least one of them it can actually reach to fetch the video and offer features like previews and key moments.

Place the block in a <script type="application/ld+json"> tag in the page's head or body. Add one VideoObject per video. Then test it in Google's Rich Results Test before you ship.

Takeaway: fill all three required fields and at least one of contentUrl or embedUrl. Most "invalid markup" errors come from the thumbnail, date or duration format.

How to Build a Video Sitemap

Schema describes one video on one page. A video sitemap tells Google which pages on your site have videos, which helps when you have dozens of watch pages and some rarely get crawled.

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
  <url>
    <loc>https://example.com/demo</loc>
    <video:video>
      <video:thumbnail_loc>https://example.com/videos/demo/thumbnail-1280x720.jpg</video:thumbnail_loc>
      <video:title>Acme Analytics Product Demo: Build a Dashboard in 90 Seconds</video:title>
      <video:description>A 90-second walkthrough of connecting a data source, building a revenue dashboard and sharing it with your team.</video:description>
      <video:content_loc>https://example.com/videos/demo/acme-demo.mp4</video:content_loc>
      <video:duration>90</video:duration>
    </video:video>
  </url>
</urlset>

The rules from Google's reference:

  • Required: thumbnail_loc, title, description, and either content_loc (the file) or player_loc (the player).
  • Duration is in seconds, from 1 to 28,800 (8 hours). Not ISO 8601, which trips up teams copying values from their schema.
  • Description can be up to 2,048 characters.
  • Retired tags: video:category, video:gallery_loc, video:price and video:tvshow no longer do anything. Delete them if an old plugin still writes them.

Watch pages are the <loc>, not the video file. The file goes in content_loc.

Takeaway: list your watch pages, keep durations in seconds, and copy the title and description exactly from the page's schema.

Submit It and Check the Video Indexing Report

  1. Upload the sitemap to your site, for example /video-sitemap.xml, and add it to robots.txt with a Sitemap: line.
  2. In Google Search Console, open Sitemaps under Indexing, paste the URL and submit.
  3. Check one watch page with the URL Inspection tool to confirm Google sees the video.
  4. After a few days, open the Video indexing report. It splits pages into "Video indexed" and "No video indexed," with a reason for each.

The reasons you're most likely to hit, from Google's report documentation:

Search Console reasonWhat it usually means for a product videoFix
Video isn't on a watch pageDemo embedded in a feature page or blog postCreate a dedicated watch page
Cannot determine video position and sizePlayer hidden in a modal, tab or lazy-loaded sectionRender the player on page load, above the fold
No thumbnail URL providedSchema or sitemap missing thumbnailUrlAdd a stable thumbnail URL
Thumbnail blocked by robots.txtCDN or /assets/ path disallowedAllow Googlebot to fetch the image
Video not found on host servicePrivate or deleted videoMake the video public at a stable URL

Takeaway: a "No video indexed" status is a to-do list, not a mystery. Fix the stated reason, then click Validate Fix in the report.

YouTube, Wistia or Self-Hosted: What Changes

You can mark up and list a video hosted elsewhere. Google's sitemap docs show YouTube and Vimeo videos listed with player_loc (the embed player URL) instead of content_loc.

  • YouTube embeds: the video already has its own watch page on youtube.com, and that page competes with yours for the video result. If you want your domain in the video result, build your own watch page with the embed, your own markup and a transcript.
  • Video hosts like Wistia or Vimeo: some can add VideoObject markup for you. Check the page with the Rich Results Test so you don't end up with two conflicting blocks.
  • Self-hosted MP4: you control everything, so you also write and maintain the markup and sitemap yourself.

One more detail for YouTube: Google won't create key moments for a YouTube video automatically. You add timestamps and labels in the YouTube description. For self-hosted video, use Clip or SeekToAction markup.

Takeaway: the host decides how much markup you write, but not whether you need a watch page.

Mistakes That Break Video Indexing

  • Mismatched details. The title, thumbnail and duration should be identical in the visible page, the schema and the sitemap.
  • Wrong duration format. ISO 8601 in schema (PT1M30S), plain seconds in the sitemap (90).
  • Thumbnail on a temporary URL. Signed or expiring CDN links stop working once they expire. Use a permanent public URL.
  • Gated video. If the player only appears after a login or a click, Google can't find its position or size. Google needs the player visible on page load "without requiring any user interaction."
  • One page, five equal videos. A gallery page doesn't count as a watch page for any of them. Give each important video its own page and link to it from the gallery.

Before you submit anything, open one watch page and check those five items by hand. It takes two minutes and catches most errors the report would flag a week later.

Your Next Step

Pick your single most important product video, usually the main demo. Give it a watch page at a clean URL, add the VideoObject block above, list the page in a video sitemap and submit it in Search Console. Check the Video indexing report a week later, fix whatever reason it gives, then repeat for your next video.

If you need more than one video to index, the bottleneck is usually making the videos, not marking them up. A video changelog or a set of short repurposed clips gives every release its own watch page. Add captions and a transcript to each one so the page has crawlable text below the player.

Disha Sharma
About the author

Disha Sharma

Marketing, Poko Motion

Writes about AI video workflows, product storytelling, and motion video.

Questions, answered.

What is video schema markup?

Video schema markup is structured data, usually a VideoObject block written in JSON-LD, that tells Google a page contains a video and describes it. Google requires three properties: name, thumbnailUrl and uploadDate. It also recommends description, duration, and contentUrl or embedUrl. The markup must sit on a page where people can actually watch the video, and you can check it with Google's Rich Results Test before publishing.

Do I need both video schema and a video sitemap?

Neither is strictly mandatory, but they do different jobs, so most sites with several videos use both. VideoObject schema describes one video on the page where it plays. A video sitemap lists every page on your site that contains a video, which helps Google find watch pages it rarely crawls. Keep the title, thumbnail and description identical in both so the signals agree.

Why does Search Console say no video indexed?

Search Console's Video indexing report gives a specific reason for each page. The most common for product videos is "Video isn't on a watch page": since 2023, Google only treats a video as indexable when it is the main content of the page. Other frequent reasons are a missing or blocked thumbnail, a player Google can't see on page load, and a private or deleted video.

What format does video duration use in schema and sitemaps?

The two use different formats. VideoObject schema uses ISO 8601 durations, so 90 seconds is written PT1M30S and 45 seconds is PT45S. A video sitemap uses plain seconds in the video:duration tag, so the same video is 90, with an allowed range of 1 to 28,800 seconds. Copying the schema value into the sitemap is a common mistake that makes the entry invalid.

Can I add video schema for a YouTube video embedded on my site?

Yes. You can mark up a page that embeds a YouTube video, using the YouTube player URL as embedUrl, and list it in a video sitemap with the player_loc tag. The page still needs to be a watch page where the video is the main content. Keep in mind the video also has its own page on youtube.com, which competes with yours for the video result.

Keep reading

#video seo#video schema markup#video sitemap#structured data#technical seo#google search console#product video

Poko Motion · the fastest AI motion video generator

Make your first video
in 5 minutes.

Paste a link, a doc or a deck. A swarm of AI agents builds the video while you watch.