Video sitemaps: what to include and when you need one

What a video sitemap is, when you need one, the video:video tags Google supports, a complete XML example, size limits and how to submit it to Google.

By Videngine9 min read
The short answer

A video sitemap is an XML file, or extra tags in an existing sitemap, that lists the pages on your site that carry video and describes each video: thumbnail, title, description and the file or player URL. Google says it helps it find video it might otherwise miss, especially new video. It works alongside VideoObject markup, not instead of it. Videngine updates video-sitemap.xml in the same commit as each video it publishes.

When a video sitemap helps, and when it doesn't

A video sitemap helps when Google might not find or understand your videos by crawling alone: on a new site, a large one, or one that publishes a lot of video.

Google's video sitemap documentation calls it a good way to help Google find and understand the video on your site, “especially content that was recently added or that we might not otherwise discover with our usual crawling mechanisms”. Its general guidance on sitemaps says you might need one if:

  • the site is large, so some new pages may not be linked from anywhere else on it;
  • the site is new and has few external links pointing to it;
  • the site has a lot of rich media, such as video, that you want to appear in Search.

You might not need one if the site is small (about 500 pages or fewer that you want in search), every important page is reachable by links from the home page, and you have few media files you want shown in results.

Then ordinary discovery is usually enough. Google's video best practices say it can find videos referenced by a <video>, <embed>, <iframe> or <object> element, and VideoObject markup on each page describes them. A sitemap still costs little, and earns more with every video you add.

Either way, Google's overview says a sitemap doesn't guarantee that every item in it will be crawled and indexed.

The video:video tags Google supports today

Each video sits in a <video:video> element inside the <url> entry for the page that shows it, and needs a thumbnail, a title, a description, and either the file's URL or a player's URL.

This is the list as Google's video sitemap reference gives it, last updated 20 May 2026.

TagRequired?What it holds
video:videoYesParent element for one video on the page in <loc>; repeat it per video.
video:thumbnail_locYesURL of the thumbnail image, meeting Google's thumbnail requirements.
video:titleYesThe title, ideally as shown on the page. Escape HTML entities or use CDATA.
video:descriptionYesUp to 2,048 characters; must match the page's description, though not word for word.
video:content_locThis or player_locURL of the video file, in a supported format. Google recommends it where possible. Not the same as <loc>.
video:player_locThis or content_locURL of a player for the video, such as a YouTube or Vimeo embed. Not the same as <loc>.
video:durationNoLength in seconds, 1 to 28,800.
video:expiration_dateNoDate after which Google won't show the video. Omit if it doesn't expire.
video:ratingNo0.0 to 5.0.
video:view_countNoNumber of views.
video:publication_dateNoDate first published: YYYY-MM-DD, or a timestamp with timezone.
video:family_friendlyNoyes or no for SafeSearch; omitted means yes.
video:restrictionNoCountry codes (ISO 3166), with relationship allow or deny.
video:platformNoweb, mobile or tv, with relationship allow or deny.
video:requires_subscriptionNoyes or no.
video:uploaderNoUploader's name, up to 255 characters.
video:liveNoyes for a livestream, otherwise no.
video:tagNoOne short tag per element, up to 32 per video.

Google's page also lists tags and attributes it has removed from its documentation: <video:category>, <video:gallery_loc>, the autoplay and allow_embed attributes of <video:player_loc>, and <video:price> and <video:tvshow>. If an older plugin writes them, leave them out of new files.

A video sitemap example for two pages

Here is a complete video sitemap XML file for two pages: a product page that hosts its own video file, and a guide that embeds a YouTube video.

<?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://www.example.com/products/folding-desk</loc>
    <video:video>
      <video:thumbnail_loc>https://www.example.com/videos/folding-desk.jpg</video:thumbnail_loc>
      <video:title>Oak &amp; steel folding desk: sizes and storage</video:title>
      <video:description>A 45-second look at the oak and steel folding desk: its open and folded sizes, and how it stores flat against a wall.</video:description>
      <video:content_loc>https://www.example.com/videos/folding-desk.mp4</video:content_loc>
      <video:duration>45</video:duration>
      <video:publication_date>2026-09-14T09:30:00+01:00</video:publication_date>
    </video:video>
  </url>
  <url>
    <loc>https://www.example.com/guides/desk-for-a-small-room</loc>
    <video:video>
      <video:thumbnail_loc>https://www.example.com/videos/small-room-desk.jpg</video:thumbnail_loc>
      <video:title>How to choose a desk for a small room</video:title>
      <video:description>How to measure a small room for a desk, and what to check before buying: depth, legroom and where the cables go.</video:description>
      <video:player_loc>https://www.youtube.com/embed/VIDEO_ID</video:player_loc>
      <video:duration>132</video:duration>
      <video:publication_date>2026-10-02</video:publication_date>
      <video:tag>small room</video:tag>
      <video:tag>home office</video:tag>
    </video:video>
  </url>
</urlset>
  • Two namespaces. The <urlset> declares the sitemaps.org namespace and Google's video namespace, which makes the video: tags valid.
  • One <url> per page. <loc> is the page the video is watched on, never the file. A page with two videos carries two <video:video> elements in its one <url>.
  • content_loc for a file you host. The product page serves its own MP4, so it uses <video:content_loc>, which Google calls the most effective way for it to fetch the video file.
  • player_loc for an embed. The guide embeds a YouTube video, so it gives the embed URL; replace VIDEO_ID with the real ID. Choosing where to host is covered in YouTube or self-hosted video for SEO.
  • Escaped text. The ampersand in the first title is written &amp;: the sitemaps.org protocol requires UTF-8 and entity-escaped values.
  • Numbers and dates. Duration is in seconds; dates are a plain date or a timestamp with timezone.

Where to put it and how to submit a video sitemap

Put the file at the root of your site, point to it from robots.txt, and submit it in Google Search Console.

Google lets you keep video entries in a separate file or add the video tags to your existing sitemap. A separate video-sitemap.xml is easier to rebuild when videos change. Keep it at the root: sitemaps.org says a sitemap's location determines which URLs it can include.

Then tell crawlers where it is. Sitemaps.org says a Sitemap: line in robots.txt applies whatever the User-agent lines say, and that you can list more than one:

Sitemap: https://www.example.com/sitemap.xml
Sitemap: https://www.example.com/video-sitemap.xml

For Google, also submit the file's URL in the Sitemaps report in Search Console, where you will see whether Google could read it.

RuleWhat sitemaps.org says
URLs per sitemap fileNo more than 50,000
Size per sitemap fileNo larger than 50MB (52,428,800 bytes) uncompressed; the file may be gzipped
Sitemaps per index fileNo more than 50,000, and the index itself no larger than 50MB
EncodingUTF-8, with every data value entity-escaped
HostsAll URLs in one sitemap from a single host
robots.txtA Sitemap line with the full URL, independent of any User-agent line; more than one allowed

A large catalogue or marketplace can reach those limits: split the entries across several files, list them in a sitemap index, and submit the index.

Keeping the sitemap true

A video sitemap is only useful while it matches the site, so change it in the same release as the page it describes.

  1. Add the entry when the video goes live. Google says every file the sitemap references must be reachable by Googlebot: not blocked by robots.txt, not behind a login, not stopped by a firewall.
  2. Match the page. Use the title and description the page shows, and list only videos related to the page's content.
  3. Update the entry when you replace a video. A new cut usually brings a new thumbnail and duration, often a new title. Google asks for stable thumbnail and file URLs and the same thumbnail URL across all your metadata, so change sitemap, markup and page together.
  4. Take out what is gone. Remove the entry when a video comes down. For a removed or expired video, Google lists three options: a 404 for the page that embedded it, a noindex robots meta tag on that page, or an expiration date in the sitemap or structured data.
  5. Keep dates honest. video:publication_date is when the video was first published; don't move it forward to look fresh.

A sitemap written by hand drifts. One generated by the process that publishes the video does not.

Sitemap and VideoObject: use both

A video sitemap and VideoObject markup are complementary: the sitemap tells Google where your videos are, and the markup describes each video on the page that shows it.

Google supports structured data, video sitemaps and the Open Graph protocol for video, and asks for the same thumbnail URL for a video across all of them. Give both the same facts. Our guide to VideoObject schema covers the markup side in full.

PointVideo sitemapVideoObject on the page
Where it livesOne XML file (or several) at the site rootJSON-LD in the HTML of each watch page
Main jobHelping Google find video, especially new or hard-to-reach videoDescribing the video on the page it sits on
Video filevideo:content_loccontentUrl
Playervideo:player_locembedUrl
Thumbnailvideo:thumbnail_locthumbnailUrl

If you can only do one, do the markup, because it travels with the page, then add the sitemap as the site grows. How AI assistants find and cite video is covered in video in AI search, and unfamiliar terms are in the Videngine glossary.

How Videngine keeps the sitemap, and when to use something else

Videngine's website publishing maintains video-sitemap.xml for you and adds its Sitemap line to robots.txt, in the same commit as the video.

A workspace connects the GitHub repository its website is built from, with “Connect with GitHub” or a fine-grained access token. When a video is approved in the studio, Publish makes one commit that adds the MP4, its poster JPG and a WebVTT caption track (in /videos/ by default); writes an HTML5 player, a readable transcript and VideoObject JSON-LD into the page the video was made from; and updates video-sitemap.xml. All of it is in the HTML the server sends, not injected by JavaScript.

Because the sitemap changes in the same commit as the page, it lists what is actually on the site. Republishing replaces a page's video in place; Remove takes it out in one commit. The video SEO guide shows how player, markup, transcript and sitemap fit together.

Videngine is the wrong tool in three cases:

  • Framework or CMS sites. Website publishing works for sites whose pages are HTML files in the repository, such as static sites on Vercel, Netlify, Cloudflare Pages or GitHub Pages. For framework-built sites, which aren't supported yet, use the framework's or CMS's own sitemap tooling.
  • Videos you already have. Videngine publishes videos it makes from your pages. For an existing library, a CMS, an SEO plugin or a developer is the direct route.
  • Pages with several videos. Videngine places one video per page. A gallery needs one <video:video> per video, written by your own generator.

Questions about video sitemaps

Do I need a video sitemap if I already use VideoObject schema?

Not always, but it is worth having once you publish video regularly. The markup describes the video on its page; the sitemap tells Google where all your videos are, which helps most for new videos and pages that are hard to reach by links. Google supports both, and asks you to keep details such as the thumbnail URL the same in each.

What is the difference between a video sitemap and a normal XML sitemap?

A video sitemap uses the same sitemaps.org format with Google's video namespace added, and a video:video element inside each page's entry. You can keep it as a separate file or add the video tags to your existing sitemap. Google accepts either.

How do I submit a video sitemap to Google?

Add a Sitemap line with the file's full URL to robots.txt, and submit the same URL in the Sitemaps report in Google Search Console. Submission is a signal, not a promise: Google says a sitemap doesn't guarantee that every item in it will be crawled and indexed.

Can a video sitemap include YouTube videos embedded on my site?

Yes. For a YouTube video embedded on your page, put the embed URL in video:player_loc, because you don't have the file to give in video:content_loc. The loc entry is still your own page, not the YouTube watch page.

How many videos can one video sitemap hold?

The sitemaps.org limits are 50,000 URLs and 50MB uncompressed per file. A page with several videos can carry several video:video elements in its one entry. Beyond the limits, split the file and list the parts in a sitemap index.

Choose your next step

See how the sitemap fits into the rest of video SEO, then make sure the markup on each page says the same thing.

Publish the video and its sitemap entry together.

Bring one page that already has a reason for a video. Review the video in the studio, then publish the player, the markup and the sitemap entry to your site in one commit.

Join the waitlist ↗

Published by Videngine, a video rendering product built and run by Wall & Fifth. External links refer to the original documentation or product descriptions; examples are illustrative unless stated otherwise.