Video Sitemap: XML Format and Setup Guide
A video sitemap is a specialized XML file that tells Google about the videos on your site - their thumbnails, titles, durations, and hosting URLs. Done right, a videos sitemap helps Google index your videos into the Video tab, rich results, and Google search. This guide covers the exact XML format, required tags, a working example, and how to submit your video sitemap to Search Console.
What a video sitemap is
A video sitemap is an XML file that uses Google's video namespace (http://www.google.com/schemas/sitemap-video/1.1) to describe each video hosted on your site. It lists the landing page URL where the video is embedded, plus child elements describing the video itself - thumbnail, title, description, content or player URL, and duration. Google uses this data to index videos and show them in Video results and rich snippets.
When to create a video sitemap vs embedding schema
Google's official recommendation is to use VideoObject JSON-LD schema on each video page. Schema is usually enough for sites with a handful of videos. A dedicated video sitemap is worth the effort when: you have dozens or thousands of videos, your videos load via JavaScript (so crawlers may miss them during rendering), you need to describe multiple videos per page, or you want to supply metadata like live_broadcast, platform restrictions, or expiration dates that are easier to manage centrally. Many sites do both - schema on-page plus a sitemap for belt-and-braces coverage.
Required and optional XML tags
Required tags (per video):
<video:thumbnail_loc>- URL of a still image, ideally 1280x720, at least 160x90.<video:title>- plain text title, max 100 characters.<video:description>- plain text, max 2048 characters.<video:content_loc>OR<video:player_loc>- direct media URL (mp4) or embeddable player URL. At least one is required.
Recommended optional tags:
<video:duration>- length in seconds (1 to 28800).<video:expiration_date>,<video:publication_date>,<video:rating>,<video:view_count><video:family_friendly>- yes/no.<video:live>,<video:requires_subscription>,<video:platform>,<video:restriction>
Video sitemap XML example
<?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/videos/how-to-bake-bread</loc>
<video:video>
<video:thumbnail_loc>https://example.com/thumbs/bread.jpg</video:thumbnail_loc>
<video:title>How to Bake Bread at Home</video:title>
<video:description>Step-by-step tutorial for baking artisan sourdough bread.</video:description>
<video:content_loc>https://example.com/media/bread.mp4</video:content_loc>
<video:player_loc>https://example.com/player?id=bread</video:player_loc>
<video:duration>612</video:duration>
<video:publication_date>2025-09-12T10:00:00+00:00</video:publication_date>
<video:family_friendly>yes</video:family_friendly>
<video:live>no</video:live>
</video:video>
</url>
</urlset>How to submit your video sitemap to Google Search Console
Upload the XML file to your web root (or wherever your sitemaps live) and make it accessible at a public URL. In Google Search Console, open Indexing > Sitemaps, enter the path (for example /video-sitemap.xml), and click Submit. GSC will report status, last read date, and any parsing errors. You can also add a Sitemap: line in robots.txt pointing to the video sitemap so other crawlers discover it. Monitor the Videos report under Indexing > Video pages for coverage issues.
Common video sitemap mistakes
- Missing thumbnail - every video must have a reachable
thumbnail_loc. Blocked or 404 thumbnails disqualify the entry. - Invalid duration - must be an integer number of seconds between 1 and 28800. Strings like "10:12" are rejected.
- Wrong content vs player URL -
content_locmust be a direct media file, not an HTML page.player_locshould be an embeddable URL (iframe or SWF URL). - Landing page does not contain the video - Google must find the video on the
<loc>page. A sitemap pointing to a page with no embed is ignored. - Blocking video files or thumbnails in robots.txt - if Google cannot fetch the media or image, the entry fails.
Video sitemaps aren't just for video hosts
Most guides treat video sitemaps as a niche thing for YouTube-style sites. That's wrong. If you run a content marketing blog that embeds YouTube walkthroughs, a product site with explainer videos, or a training platform with embedded Vimeo content - you can and should feed Google a video sitemap.
Here's what I saw on a B2B SaaS blog last quarter: 140 posts, each embedding a short YouTube explainer. No video sitemap. GSC's Video pages report showed 12 indexed videos out of 140. After we built a video sitemap pointing to the YouTube embed URLs with proper thumbnails and descriptions, video indexing hit 118 within three weeks. Traffic from Video search tripled.
The trick: content_loc points to the YouTube watch URL, player_loc to the embed URL with allowfullscreen="true", and the thumbnail hosted on your own domain (not YouTube's i.ytimg.com, which sometimes gets rate-limited during Google's thumbnail fetch).
Full example with embedded YouTube content
<url>
<loc>https://example.com/blog/setup-oauth</loc>
<video:video>
<video:thumbnail_loc>https://example.com/og/oauth-thumb.jpg</video:thumbnail_loc>
<video:title>OAuth 2.0 Setup in 5 Minutes</video:title>
<video:description>Walkthrough of OAuth 2.0 app registration,
scope config, and first token exchange.</video:description>
<video:content_loc>https://www.youtube.com/watch?v=abc123</video:content_loc>
<video:player_loc allow_embed="yes" autoplay="ap=1">
https://www.youtube.com/embed/abc123
</video:player_loc>
<video:duration>287</video:duration>
<video:publication_date>2026-02-14T09:00:00+00:00</video:publication_date>
<video:family_friendly>yes</video:family_friendly>
<video:uploader info="https://www.youtube.com/@example">
Example Engineering
</video:uploader>
</video:video>
</url>Note the allow_embed attribute on player_loc - this tells Google it's OK to show the video in Google results with an embedded player, which dramatically lifts CTR on video rich results.
Google's video rich result requirements
To qualify for video rich results (the big thumbnail treatment in SERPs, not just the Videos tab), Google wants more than sitemap presence. The landing page itself must:
- Embed the video visibly near the top. Videos loaded in an accordion or tab Google can't reach don't qualify.
- Have a thumbnail at minimum 60×30, but 1280×720 is what actually gets the big-thumbnail SERP.
- Include VideoObject JSON-LD matching the sitemap entry. When they disagree, Google trusts the on-page schema.
- Use
hasPartwithCliporSeekToActionfor key moments to appear in SERP.
A sitemap alone won't get you rich results. Sitemap + on-page schema + visible embed is the minimum.
Real mistakes I keep finding
- Thumbnails hot-linked from a CDN with hotlink protection. Googlebot fetches with a specific User-Agent, CDN blocks it, thumbnail counts as broken. Every entry fails silently.
- Duration in ISO 8601 format. You use
PT5M30Sin VideoObject JSON-LD but sitemaps demand integer seconds. I see this mix-up constantly. - Same thumbnail across 200 videos. Google treats identical thumbnails as a signal of low-quality or auto-generated content. Use unique frames.
- Listing the same video on 30 different landing pages. Pick one canonical landing page per video. Multiple landing pages fight for the same video-result slot.
- Expired videos still in sitemap. If a video is gone, remove the entry or set
expiration_date. Dead video URLs drag down crawl trust.
Diagnosing video indexing issues
GSC's Video pages report under Indexing is the starting point. It shows three states: "Video on page," "No video indexed," and error categories. For a URL in "No video indexed," click through to see specifics - most often it's "Video is outside the viewport" or "Google could not determine the prominent video on the page."
# Validate video sitemap XML locally xmllint --noout --schema \ https://www.google.com/schemas/sitemap-video/1.1/sitemap-video.xsd \ video-sitemap.xml # Check a thumbnail is reachable with Googlebot UA curl -I -A "Googlebot/2.1 (+http://www.google.com/bot.html)" \ https://example.com/og/video-thumb.jpg