Video Sitemap

Video Sitemap Generator

Help Google discover and index your videos for video rich results in search

Add URLs

No URLs Added

Add URLs using the form above to generate your sitemap.

Generated Sitemap

<!-- Add URLs to generate your sitemap -->

Other Sitemap Types

About Video Sitemap Generator

Video content is one of the fastest-growing areas of web search, with Google increasingly featuring video rich results — carousels, video previews, and key moments — prominently in search results. A video sitemap is the most reliable way to ensure Google discovers your videos, understands their content, and considers them for these high-visibility video features in search.

Without a video sitemap, Google may still discover your videos by crawling your pages, but it has no guarantee of finding all of them — especially videos loaded via JavaScript players, embedded from third-party platforms, or hosted on separate domains. A video sitemap provides explicit metadata about each video including title, description, thumbnail, duration, upload date, and content ratings — information Google uses to power video rich results.

Video rich results can dramatically increase click-through rates from search. A video thumbnail displayed inline with your search result stands out visually, communicates content format immediately, and attracts users who prefer video content. For sites that invest in video production — tutorials, product demos, educational content — video sitemaps translate that investment into measurable search traffic.

Video Sitemap Metadata and Rich Results

Video sitemaps use Google's video extension namespace (xmlns:video) and support a rich set of metadata fields that feed directly into Google's video understanding and rich result generation. Beyond basic title and description, you can specify video duration, upload date, content ratings, category, tags, and whether the video requires a subscription — all of which Google uses to match videos to relevant searches.

The video:thumbnail_loc field is particularly important — this is the image Google displays as the video preview in search results. A compelling thumbnail that accurately represents the video content improves click-through rates just as an OG image does for social sharing. Google may also generate its own thumbnails from your video, but providing an explicit thumbnail gives you control over first impressions.

Video sitemaps work for both self-hosted videos and embedded videos from platforms like YouTube or Vimeo. For YouTube embeds, Google generally discovers and indexes them without a sitemap since YouTube is a Google property. For self-hosted videos, Wistia embeds, and other third-party players, a video sitemap significantly improves discovery and indexing speed.

Key Considerations

Video Content URL vs Page URL

The video:content_loc tag should point to the actual video file URL (MP4, WebM) while the page <loc> tag points to the page where the video is embedded. Google needs both — the page URL for context and the content URL to analyze the video. For videos behind players, video:player_loc can point to the player embed URL instead of the raw file.

Thumbnail Requirements

The video:thumbnail_loc image must be at least 160x90px and at most 1920x1080px. Google recommends a 16:9 aspect ratio for best display in video carousels. The thumbnail must be publicly accessible — not behind authentication or blocked by robots.txt. A high-quality, representative thumbnail significantly improves click-through rates in video search results.

Duration Accuracy

The video:duration field specifies the video length in seconds. This value must be accurate — Google verifies it against the actual video. Duration appears in search results and helps users decide whether to click. Set it to the exact duration (e.g., 305 for a 5:05 video) and keep it updated if you trim or extend videos.

Family Safety and Restrictions

The video:family_friendly tag (yes/no) and video:restriction tag (for geographic or platform restrictions) affect where and to whom your videos appear in search. Always set family_friendly accurately — incorrect values can result in your videos being restricted from certain search contexts or violating Google's content policies.

Common Video Sitemap Issues

Video Discovery Issues

  • Video content URL not accessible to Googlebot — blocked by authentication or robots.txt
  • Missing video:content_loc or video:player_loc — Google can't verify the video exists
  • JavaScript-rendered video players not providing raw content URLs
  • Videos on CDN not linked back to verified Search Console domain

Metadata Errors

  • Missing video namespace declaration in sitemap XML
  • Inaccurate video:duration causing validation failures in Search Console
  • Thumbnail image too small or wrong aspect ratio for video carousels
  • Missing video:upload_date reducing eligibility for freshness-based ranking

Rich Result Eligibility

  • Videos not meeting minimum quality thresholds for video rich results
  • Duplicate video content appearing on multiple pages without canonical handling
  • Video structured data (JSON-LD) conflicting with sitemap metadata
  • Videos too short (under 30 seconds) for most video rich result features

Implementation Guide

Complete Video Sitemap XML Format

A properly formatted video sitemap with comprehensive metadata:

<?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/guides/css-gradients-tutorial</loc>

    <video:video>
      <!-- Required fields -->
      <video:thumbnail_loc>https://www.example.com/thumbnails/css-gradients.jpg</video:thumbnail_loc>
      <video:title>CSS Gradient Generator Tutorial – Linear, Radial &amp; Conic</video:title>
      <video:description>Learn how to create stunning CSS gradients using our free generator tool. Covers linear, radial, conic, and repeating gradients with live code examples.</video:description>

      <!-- Video source — use content_loc for direct file, player_loc for embed -->
      <video:content_loc>https://www.example.com/videos/css-gradients.mp4</video:content_loc>

      <!-- Optional but recommended -->
      <video:duration>480</video:duration>
      <video:upload_date>2026-02-28T00:00:00+00:00</video:upload_date>
      <video:family_friendly>yes</video:family_friendly>

      <!-- Additional metadata for richer results -->
      <video:tag>css</video:tag>
      <video:tag>gradients</video:tag>
      <video:tag>web design</video:tag>
      <video:category>Tutorial</video:category>

    </video:video>

  </url>

</urlset>

Next.js Video Sitemap Route

Generate a video sitemap dynamically from your content database:

// app/video-sitemap.xml/route.ts
import { getAllVideoContent } from "@/lib/videos";

export async function GET() {
  const videos = await getAllVideoContent();

  const escapeXml = (str: string) =>
    str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");

  const xml = `<?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">
${videos.map((v) => `  <url>
    <loc>${v.pageUrl}</loc>
    <video:video>
      <video:thumbnail_loc>${v.thumbnailUrl}</video:thumbnail_loc>
      <video:title>${escapeXml(v.title)}</video:title>
      <video:description>${escapeXml(v.description)}</video:description>
      <video:content_loc>${v.videoUrl}</video:content_loc>
      <video:duration>${v.durationSeconds}</video:duration>
      <video:upload_date>${new Date(v.uploadedAt).toISOString()}</video:upload_date>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>`).join("\n")}
</urlset>`;

  return new Response(xml, {
    headers: { "Content-Type": "application/xml" },
  });
}

Complement Video Sitemap with JSON-LD

Add VideoObject structured data alongside your video sitemap for maximum rich result eligibility:

// Add to your video page component
const videoSchema = {
  "@context": "https://schema.org",
  "@type": "VideoObject",
  name: "CSS Gradient Generator Tutorial",
  description: "Learn how to create CSS gradients with our free tool.",
  thumbnailUrl: "https://example.com/thumbnails/css-gradients.jpg",
  uploadDate: "2026-02-28T00:00:00+00:00",
  duration: "PT8M0S", // ISO 8601 duration format
  contentUrl: "https://example.com/videos/css-gradients.mp4",
  embedUrl: "https://example.com/embed/css-gradients",
  // Key moments for chapter-based navigation in search results
  hasPart: [
    {
      "@type": "Clip",
      name: "Introduction",
      startOffset: 0,
      endOffset: 60,
      url: "https://example.com/guides/css-gradients-tutorial#intro",
    },
    {
      "@type": "Clip",
      name: "Linear Gradients",
      startOffset: 60,
      endOffset: 180,
      url: "https://example.com/guides/css-gradients-tutorial#linear",
    },
  ],
};

Common Use Cases

  • Tutorial sites with instructional video content embedded on pages
  • Product demo pages with self-hosted explainer videos
  • Educational platforms where video is the primary content format
  • Marketing sites wanting video rich results for product searches
  • Blogs that regularly publish video walkthroughs alongside written guides

Pro Tip

Combine your video sitemap with VideoObject JSON-LD structured data on each video page. The sitemap ensures Google discovers your videos, while JSON-LD provides the structured metadata Google needs to generate Key Moments (video chapter navigation) in search results — one of the most valuable video rich result features for educational and tutorial content.

Frequently Asked Questions

Do I need a video sitemap if my videos are hosted on YouTube?+
Generally no. Google already knows about YouTube videos since YouTube is a Google property. YouTube videos embedded on your pages are typically discovered through Google's standard crawling. However, if you want to associate specific YouTube videos with specific pages on your site for contextual rich results, you can include the YouTube embed URL in video:player_loc. For self-hosted videos on your own domain, a video sitemap is strongly recommended.
What video formats does Google support in video sitemaps?+
Google supports most common web video formats including MP4 (H.264), WebM, and OGG. For video:content_loc, point to the actual video file in one of these formats. For JavaScript-based players that don't expose raw file URLs, use video:player_loc with the embed URL instead. Google will attempt to analyze videos from the player URL though direct file access is more reliable.
How do I get Key Moments (video chapters) in Google Search?+
Key Moments appear when you add chapter timestamps to your video using either YouTube's chapter format in descriptions, or VideoObject JSON-LD with hasPart/Clip markup on your page. The video sitemap alone doesn't enable Key Moments — you need the structured data. However, the sitemap ensures the page is indexed, which is a prerequisite for Key Moments to appear.
Why aren't my videos appearing in Google video search results?+
Common reasons include: (1) Googlebot can't access the video file — blocked by authentication or robots.txt, (2) Missing or incorrect video sitemap format, (3) Video content is too short (under 30 seconds for most features), (4) Thumbnail image inaccessible or incorrect size, (5) Site doesn't have enough authority for video rich results, (6) Video hasn't been indexed yet — allow 1-2 weeks after submitting sitemap.
Can I include the same video on multiple pages in my video sitemap?+
Yes, you can reference the same video:content_loc from multiple page URLs if the video appears on multiple pages. However, designate one canonical page as the primary URL for that video — this is where Google will attribute rich results. Use canonical tags on your pages to signal which is the primary version. Avoid creating thin pages that exist solely to host a video without additional meaningful content.