Google indexes pages, not videos. If your video player loads via JavaScript or sits behind a click, Googlebot may never see it — and your video will not show up in the Videos tab, in video carousels, or as a rich result. A video sitemap fixes that problem by handing Google a structured list of every video on your site, the page each one lives on, and the metadata it needs to rank.
This guide explains what a video sitemap is, how it differs from a regular XML sitemap and from VideoObject schema, the required and optional tags Google supports, three ways to create one (manual XML, WordPress plugin, or generator), and how to submit it through Google Search Console. You will also see a copy-paste XML template, the most common indexing errors, and the troubleshooting steps that fix them.
If you are building a video product or video on demand application, a video sitemap is one of the cheapest SEO wins you can ship — usually a few hours of work for ongoing organic traffic from video search.
What Is a Video Sitemap?
A video sitemap is an XML file that tells search engines which pages on your site contain videos and provides structured metadata about each video — title, description, thumbnail URL, video file or player URL, duration, publication date, and more. It uses Google’s video sitemap specification with the namespace http://www.google.com/schemas/sitemap-video/1.1, which extends the standard sitemap protocol.
The job of a video sitemap is discovery. Googlebot can read the HTML of a page, but it cannot reliably detect a video that loads through JavaScript, sits inside an iframe, plays only after a user click, or streams via a player API. The video sitemap gives Google a direct pointer: “this page contains this video, here is the thumbnail, here is the duration, here is the player.” Without that pointer, the video may exist on your page and still be invisible to search.
A single video sitemap can list up to 50,000 video URLs and must not exceed 50 MB uncompressed. If your video library is larger, split it across multiple sitemaps and reference them in a sitemap index file. Each <url> entry can contain multiple <video:video> blocks if a single page hosts more than one video.
Video Sitemap vs Regular Sitemap vs VideoObject Schema
People often confuse a video sitemap, a regular XML sitemap, and VideoObject structured data. They solve different problems and work best together. The table below shows how the three compare.
| Feature | Regular XML Sitemap | Video Sitemap | VideoObject Schema |
|---|---|---|---|
| File type | XML file | XML file (extends sitemap protocol) | JSON-LD or Microdata embedded in HTML |
| Lives at | /sitemap.xml |
/video-sitemap.xml (separate file) |
Inside <script> tags on each page |
| Purpose | Discovery of pages | Discovery of videos on pages | Page-level video metadata for rich results |
| Submitted via | Google Search Console | Google Search Console | Auto-detected from page HTML |
| Required metadata | URL, last-modified, change frequency | Thumbnail, title, description, content_loc or player_loc | name, description, thumbnailUrl, uploadDate, contentUrl or embedUrl |
| Duration format | N/A | Seconds (integer) | ISO 8601 (e.g., PT1M30S) |
| Best for | Most sites | Large video libraries (50+ videos) or videos behind JS | Every page that embeds a video |
The short version: use VideoObject schema on every page that has a video, and add a video sitemap on top if you have a large library or your videos load in a way Googlebot cannot crawl. The two signals reinforce each other — schema confirms the page-level metadata, and the sitemap drives discovery.
For a deeper look at how protocols like HLS deliver the actual video files referenced in a sitemap, see our guide on what HLS streaming is.
How a Video Sitemap Works for SEO
Google’s crawler reads your sitemap file the same way it reads your regular sitemap.xml. When it hits a <video:video> block, it stores the metadata and queues the host page for video indexing. If everything checks out — thumbnail loads, video URL returns a valid media file, page is crawlable — the video becomes eligible to appear in the Videos tab, in the main results with a thumbnail, in video carousels, and as a Key Moments result for longer content.
Three things happen behind the scenes:
- Discovery. Google learns the video exists, even if the player loads via JavaScript or behind a user interaction.
- Indexing. The video metadata (title, description, duration, thumbnail) is added to Google’s video index.
- Rich results. When the page is eligible, the thumbnail, title, and duration appear directly in search as a video snippet.
The Search Console Video Indexing Report tells you which videos Google has indexed, which are excluded, and why. That report is the source of truth — not your sitemap submission. A sitemap entry is a request; the report shows what Google actually did with it.
A video sitemap will not, on its own, make a video rank. It only makes the video discoverable. Ranking still depends on the page’s authority, the video’s relevance, the thumbnail click-through rate, and signals like watch time. But without discovery, none of those signals matter.
Required Video Sitemap Tags
Google requires five elements for every video entry. Miss any of them and the video will be excluded from the index. The table below lists each required tag and what it does.
| Tag | Required | Description |
|---|---|---|
<loc> |
Yes | Page URL where the video lives. Must be a real, crawlable page — not the video file itself. |
<video:thumbnail_loc> |
Yes | Absolute URL of the thumbnail image. Minimum 60×30 px; 1280×720 px (16:9) recommended. JPG, PNG, or GIF. |
<video:title> |
Yes | Video title as plain text. Should match the title shown on the page. |
<video:description> |
Yes | Plain text description, maximum 2,048 characters. Should match the on-page description. |
<video:content_loc> or <video:player_loc> |
One required | Direct URL to the video file (content_loc) or to the embed/player URL (player_loc). At least one must be present. |
A few rules that catch people out:
- The
<loc>is the page URL, not the video URL. The video URL goes inside<video:content_loc>. - The thumbnail must be a fully qualified URL with the protocol (https://), not a relative path.
- Files referenced in the sitemap must be accessible to Googlebot — no login walls, no robots.txt block, no firewall rules that exclude crawler IPs.
- Supported protocols are HTTP and HTTPS only. FTP and other protocols will fail.
If you are serving video from a video hosting API, make sure the player URL or content URL you paste into the sitemap returns a 200 OK to Googlebot without authentication.
Optional Video Sitemap Tags
The optional tags are where you give Google extra context. None are required, but each one improves how the video appears in search and helps with restriction or scheduling. The table below covers the tags most teams use.
| Tag | Description | Format |
|---|---|---|
<video:duration> |
Length of the video in seconds. | Integer, 1–28,800 (max 8 hours) |
<video:publication_date> |
When the video was first published. | W3C date format (e.g., 2026-05-20T09:00:00+00:00) |
<video:expiration_date> |
When the video should be removed from the index. | W3C date format |
<video:rating> |
Star rating of the video. | Float, 0.0–5.0 |
<video:view_count> |
Total number of times the video has been watched. | Integer |
<video:family_friendly> |
Whether the video is safe for all audiences. | yes or no |
<video:restriction> |
Country-based restrictions for where the video can play. | ISO 3166 country codes with relationship="allow" or deny" |
<video:platform> |
Restrict by platform (web, mobile, tv). | relationship="allow" or deny" |
<video:requires_subscription> |
Whether viewers need to be logged in or paid to watch. | yes or no |
<video:uploader> |
The video uploader name. | Plain text, max 255 characters. Optional info attribute can link to uploader profile. |
<video:live> |
Whether the video is a live stream. | yes or no |
<video:tag> |
Descriptive keyword tags. | Up to 32 tags per video |
A few notes from Google’s documentation:
<video:category>,<video:gallery_loc>,<video:price>, and<video:tvshow>are deprecated. Do not include them in new sitemaps.- For
<video:live>, set the value toyesfor active live streams. Google uses this to apply a LIVE badge in the SERP. If you are running a live video streaming platform, this is the tag that earns you the badge. <video:expiration_date>is honored even if other signals contradict it. After the expiration timestamp, Google will remove the video from search results.
How to Create a Video Sitemap
You have three practical ways to create a video sitemap: write the XML by hand, use a WordPress SEO plugin, or run an online generator. The right choice depends on your stack, video library size, and how often the catalog changes.
Method 1: Create a Video Sitemap Manually in XML
Best for: custom sites, small libraries, full control over the markup.
- Open a text editor and create a file named
video-sitemap.xml. - Add the XML declaration and the urlset element with both the sitemap and video namespaces.
- For each video, add a
<url>block containing one or more<video:video>blocks with the required fields. - Save the file and upload it to your site root (e.g.,
https://yoursite.com/video-sitemap.xml). - Reference it in your
robots.txtand submit it through Google Search Console.
Here is a complete copy-paste template covering two videos — one with a direct file URL and one with an embed player URL:
<?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://yoursite.com/videos/product-demo</loc>
<video:video>
<video:thumbnail_loc>https://yoursite.com/thumbs/product-demo.jpg</video:thumbnail_loc>
<video:title>Product Demo: 90-Second Walkthrough</video:title>
<video:description>A 90-second tour of the product, covering signup, the first stream, and the dashboard.</video:description>
<video:content_loc>https://cdn.yoursite.com/videos/product-demo.mp4</video:content_loc>
<video:duration>92</video:duration>
<video:publication_date>2026-05-01T09:00:00+00:00</video:publication_date>
<video:family_friendly>yes</video:family_friendly>
<video:tag>product demo</video:tag>
<video:tag>walkthrough</video:tag>
</video:video>
</url>
<url>
<loc>https://yoursite.com/videos/live-event</loc>
<video:video>
<video:thumbnail_loc>https://yoursite.com/thumbs/live-event.jpg</video:thumbnail_loc>
<video:title>Annual User Conference: Live Stream</video:title>
<video:description>The full live stream of the 2026 annual user conference.</video:description>
<video:player_loc>https://yoursite.com/player?id=live-event-2026</video:player_loc>
<video:duration>7200</video:duration>
<video:publication_date>2026-04-15T14:00:00+00:00</video:publication_date>
<video:live>no</video:live>
</video:video>
</url>
</urlset>
If your videos are generated dynamically (a CMS, an API, a database), script the XML output. Python, Node, and PHP all have sitemap libraries that support the video namespace — use them instead of string concatenation so you do not have to worry about escaping special characters in titles and descriptions.
For sites delivering large video catalogs, generating the sitemap on the fly from your video content management system keeps it in sync with the catalog without manual updates.
Method 2: Create a Video Sitemap with a WordPress Plugin
Best for: WordPress sites, teams without engineering time, sites that publish videos through standard editor blocks.
The big three WordPress SEO plugins all generate video sitemaps automatically when they detect a video on a post or page:
- Yoast SEO with the Video SEO add-on detects YouTube, Vimeo, and self-hosted videos and adds them to a dedicated video sitemap at
/video-sitemap.xml. - Rank Math Pro scans every published post for embedded videos and updates the sitemap as new posts go live. Free version supports basic sitemaps; video sitemap is a Pro feature.
- All in One SEO (AIOSEO) Pro offers similar auto-detection and pulls metadata directly from oEmbed responses for YouTube and Vimeo.
- SEOPress PRO has a video sitemap module with both auto-detection of YouTube embeds and manual per-video metadata fields.
The setup pattern is the same across plugins: enable the video sitemap, let the plugin scan the site, then add manual metadata (title, description, duration, thumbnail) for any video the auto-detection misses. Most plugins will not pick up videos that load through custom JavaScript players — for those, you need manual entries.
Method 3: Use an Online Video Sitemap Generator
Best for: one-time generation, static sites, small libraries.
Online generators crawl your site for embedded videos and produce a sitemap file you can download and upload to your server. The tradeoff: they only see videos visible to a headless crawler, so JavaScript-heavy players and authenticated content will be missed. Re-run them whenever your catalog changes.
For larger or developer-led setups, scripting the generation step yourself gives you control and avoids the recurring drift between site state and sitemap.
How to Submit a Video Sitemap to Google
Once the file is hosted at a public URL, submission takes two minutes.
- Add the sitemap to robots.txt. Add
Sitemap: https://yoursite.com/video-sitemap.xmlon its own line. This lets crawlers other than Google discover it. - Open Google Search Console. Pick the property for your site.
- Go to Sitemaps. Under the Indexing menu on the left.
- Add a new sitemap. Enter the path (
video-sitemap.xml) and click Submit. - Watch the Video Indexing Report. Under Indexing → Video pages. This shows which videos are indexed and which are excluded with reasons.
Initial crawling usually takes hours to a few days. The report updates daily once indexing starts.
Bing and other search engines accept the same sitemap format. Submit through Bing Webmaster Tools using the same file. There is no separate video sitemap submission UI in Bing — it uses your regular sitemap form.
Video Sitemap Best Practices
The tags are easy; the discipline is what makes the sitemap actually drive indexing. Below are the practices Google calls out explicitly in its documentation, plus a few that come up in the Video Indexing Report errors.
Match Sitemap Metadata to On-Page Content
The title and description in the sitemap must match what is actually shown on the page. If the sitemap says “Product demo: 90-second walkthrough” and the page says “Welcome video,” Google may flag the entry as misleading and exclude it. The sitemap is metadata about a real video on a real page — it is not a separate ranking surface.
Use a High-Quality Thumbnail
Thumbnails are the most important signal for click-through rate in the video SERP. Use a 16:9 image at 1280×720 px when you can; 60×30 px is the bare minimum Google accepts. JPG, PNG, and GIF are all fine. Make sure the thumbnail URL returns a 200 OK to Googlebot and is not blocked by robots.txt — a missing thumbnail is the single most common reason videos drop out of the index.
Keep Videos Relevant to the Host Page
A video sitemap entry says “this page contains this video.” If the video is not actually the primary content of the page, Google will either downrank or exclude it. Do not list every video that happens to appear on a page; list the videos that are the focus of the page.
One Sitemap per Logical Group
If your site has a large catalog, split sitemaps by category, language, or content type and reference them from a sitemap index file. Hard cap is 50,000 URLs and 50 MB uncompressed per file. Smaller sitemaps also make debugging the Video Indexing Report easier.
Make Player and Content URLs Accessible
Googlebot must be able to fetch the video file or load the player without a login, paywall, or geo-block on its crawler IPs. If you use a CDN for video streaming, confirm the URLs return successfully to a non-cookie request.
Refresh Publication and Expiration Dates
Add a <video:publication_date> for every entry. For time-limited videos (live event replays, time-boxed campaigns, licensed content), use <video:expiration_date> so Google removes them when they should go. Without an expiration date, an old video can keep showing in search after it has been pulled from the site.
Keep the Sitemap in Sync with the Catalog
Static sitemaps drift. Every time you publish, unpublish, or rename a video, the sitemap should update. Regenerate it on a schedule (nightly cron) or trigger regeneration from your CMS webhook. A stale sitemap that points to dead URLs hurts trust signals over time.
Common Video Sitemap Errors and How to Fix Them
The Video Indexing Report surfaces specific exclusion reasons. The most frequent — and the fix for each — are below.
| Error | What It Means | How to Fix |
|---|---|---|
| Video is not the main content of the page | The video is buried in a sidebar, footer, or modal — not the page’s focus. | Move the video into the primary content area. Add an H1 and surrounding context that describes the video. |
| Missing or inaccessible thumbnail | The <video:thumbnail_loc> URL returns 404, a redirect, or is blocked by robots.txt. |
Use an absolute URL, check the file exists with a curl -I, and make sure robots.txt allows /thumbs/ or wherever the image lives. |
| Video player not crawlable | The player loads with JavaScript Googlebot cannot execute. | Use <video:content_loc> instead of <video:player_loc> when possible, or add VideoObject schema with contentUrl to the page. |
| Video URL not accessible | The MP4 or HLS manifest in <video:content_loc> returns 403, 404, or requires authentication. |
Confirm the URL is public. If you use signed URLs, generate a long-lived signed URL specifically for crawler access, or fall back to <video:player_loc>. |
| Thumbnail too small | Below 60×30 px. | Use a 1280×720 thumbnail. Always 16:9. |
| No video found on the page | Sitemap entry exists but Googlebot cannot detect a video on the host page. | Add VideoObject schema to the page. Make sure the player markup is in the initial HTML, not injected by JS after page load. |
| Robots.txt blocks the player | Disallow: rule covers the player URL. |
Remove the disallow rule or move the player to an allowed path. |
For deeper troubleshooting, the Search Console Video Indexing documentation lists every error code Google reports.
If you are diagnosing playback issues separately from indexing — buffering, broken players, region-blocked content — start with the player and CDN logs. Indexing and playback are different problems with different fixes; the sitemap only controls discovery.
A video sitemap solves one problem: making Google aware of every video on your site. Once Google can see the videos, the next set of problems are about hosting them reliably, encoding them for every device, and delivering them with low buffer rates. Those problems shape what you build behind the sitemap.
Where LiveAPI Fits in a Video SEO Stack
A video sitemap points search engines at video URLs. Those URLs have to actually work — return playable media to a wide range of devices and connections, at the resolution Google expects from the thumbnail.
That is the layer LiveAPI handles. LiveAPI is a video API that gives you ingest (RTMP, SRT, RTSP), encoding to adaptive bitrate HLS, an embeddable player, and global delivery through Akamai, Cloudflare, and Fastly. The player URLs and content URLs you put into your sitemap stay accessible to Googlebot, return correctly-sized thumbnails on demand, and play across mobile and desktop without device-specific quirks.
A few practical fits:
- VOD libraries: Upload videos through the LiveAPI video upload API and use the returned player and content URLs directly in your
<video:player_loc>and<video:content_loc>tags. Each upload is transcoded for adaptive bitrate streaming so the same URL serves every device. - Live events: Run a stream with
<video:live>yes</video:live>while it is live. After it ends, the Live to VOD API publishes the recording, which you can add as a regular VOD entry — no separate post-production step. - Player embeds: The LiveAPI embeddable video player renders in the initial HTML, which means Googlebot can detect the video without executing JavaScript. That avoids the “player not crawlable” exclusion that hits many SPAs.
For teams building from scratch, see our guide to building a video streaming app.
Is a Video Sitemap Right for Your Site?
Use this checklist to decide whether to invest the time.
- You have 5+ videos on the site that are not on YouTube. A video sitemap matters most when search engines cannot fall back on YouTube’s index.
- Your players load with JavaScript or sit inside iframes Googlebot may not execute.
- You publish new videos regularly and want them indexed within days, not weeks.
- You want video rich results (thumbnails in search, video carousels, Key Moments).
- You serve geo-restricted or subscription content that needs
<video:restriction>or<video:requires_subscription>tags. - You run a video on demand platform or OTT service where video is the primary product, not a supplement to text.
If your site has one or two videos embedded on a blog post and they are YouTube embeds, on-page VideoObject schema is enough — skip the sitemap. The crossover point where a sitemap becomes worth the effort is around 50 videos, or any number of videos using non-standard players.
Video Sitemap FAQ
What is the difference between a sitemap and a video sitemap?
A regular sitemap lists all the URLs on your site so search engines can discover them. A video sitemap is a separate XML file that lists pages containing videos and includes video-specific metadata (thumbnail, title, description, duration, player URL). You usually need both: the regular sitemap for general discovery and the video sitemap for video-specific discovery.
Do I still need a video sitemap if I use VideoObject schema?
Often yes. VideoObject schema gives Google page-level metadata when it crawls a page, but it does not help Google find the video in the first place if the player is JavaScript-driven or behind interaction. The sitemap drives discovery; schema provides context. They work best together. For most sites with a substantial video library, run both.
How many videos can a video sitemap contain?
A single video sitemap can list up to 50,000 video URLs and must be no larger than 50 MB uncompressed. If you exceed either limit, split the entries across multiple sitemaps and reference them from a sitemap index file. There is no overall limit on the number of sitemaps.
Where should I host the video sitemap file?
At a public URL on the same domain as the videos it references, typically the site root (e.g., https://yoursite.com/video-sitemap.xml). Add a reference to it in your robots.txt and submit the URL through Google Search Console. Cross-domain sitemaps require domain verification in Search Console.
How long does it take for Google to index videos from a sitemap?
Most videos in a fresh sitemap submission are crawled within a few days and appear in the Video Indexing Report shortly after. Time to actual ranking varies — discovery is fast, but ranking depends on the page’s authority, the video’s relevance, and click-through signals. Check the Video Indexing Report daily for the first week.
Can a video sitemap include YouTube videos embedded on my site?
Yes. Use <video:player_loc> with the YouTube embed URL (e.g., https://www.youtube.com/embed/VIDEO_ID). Make sure the embed actually appears on the page in the initial HTML. Note that even with a sitemap entry, YouTube usually ranks the original video on YouTube ahead of your embed page — the sitemap helps your page appear when the embed adds value beyond what the YouTube page offers.
Why are my videos showing in the sitemap but not in search?
The most common reasons: the video is not the main content of the page, the thumbnail is too small or inaccessible, the player URL returns an error to Googlebot, the page is blocked by robots.txt or noindex, or the page itself has low authority. The Video Indexing Report in Search Console shows the specific exclusion reason for each entry.
Should I add a video sitemap if all my videos are short clips?
If your clips are the primary content of their host pages — product demos, tutorials, testimonials — yes. If they are background loops or decorative animations with no informational value, no. The sitemap is for videos people would search for, not for media that happens to be on the page.
How often should I update my video sitemap?
Every time the underlying catalog changes. Generate it dynamically from your video database or CMS, or regenerate it on a nightly cron. Static, hand-maintained sitemaps drift quickly and end up pointing to videos that have been moved, renamed, or removed.
Can I use a video sitemap for a livestream?
Yes. Set <video:live>yes</video:live> while the stream is live and use a publication date. Google may apply a LIVE badge in the SERP. After the stream ends, update the entry to point at the VOD recording and remove the live flag. The SRT protocol and RTMP server you use for ingest do not affect the sitemap — what matters is that the player URL serves the stream successfully to Googlebot.
Ship a Video Sitemap This Week
The work is mostly mechanical. Pick one of the three methods, generate the file for your current video catalog, fix the thumbnail URLs first (that is where most exclusions come from), submit through Search Console, and watch the Video Indexing Report. Most teams ship the first version in a few hours and iterate as the report shows specific errors.
If your sitemap is going to point at videos hosted on your own infrastructure, the upstream work — encoding, video hosting, delivery — has to be in place first. Get started with LiveAPI to ship a video pipeline that produces sitemap-ready URLs from day one: instant transcoding, HLS output, multi-CDN delivery, and a player that renders in the initial HTML so Googlebot can see it.