Image Sitemaps: What & How #
What are Image Sitemaps? #
- A way to tell Google about images on your site, especially those not easily found by crawlers (e.g., images loaded via JavaScript).
- Can be a separate sitemap or added as tags inside your existing sitemap.
- Follows the same best practices as general sitemaps.
Why Use Image Sitemaps? #
- Helps Google discover and index images you want to show in search results.
- Useful for rich media-heavy sites or when images aren’t directly linked in HTML.
Basic Structure of an Image Sitemap (XML) #
<?xml version=”1.0″ encoding=”UTF-8″?>
<urlset
xmlns=”http://www.sitemaps.org/schemas/sitemap/0.9″
xmlns:image=”http://www.google.com/schemas/sitemap-image/1.1″>
<url>
<loc>https://example.com/sample1.html</loc>
<image:image>
<image:loc>https://example.com/image.jpg</image:loc>
</image:image>
<image:image>
<image:loc>https://example.com/photo.jpg</image:loc>
</image:image>
</url>
<url>
<loc>https://example.com/sample2.html</loc>
<image:image>
<image:loc>https://example.com/picture.jpg</image:loc>
</image:image>
</url>
</urlset>
Required Tags #
- <image:image> — Wraps each image’s info; you can list up to 1,000 images per URL.
- <image:loc> — The full URL of the image.
Important Notes #
- Image URLs can be on a different domain if you verify that domain in Google Search Console.
- Make sure your robots.txt doesn’t block crawling of images you want indexed.
- Deprecated tags like <image:caption>, <image:geo_location>, etc., are no longer used.
News Sitemaps: What & How #
What are News Sitemaps? #
- Special sitemaps for news publishers to tell Google about their latest news articles and metadata.
- Can be part of an existing sitemap or a separate sitemap just for news articles (recommended for better tracking).
Why Use News Sitemaps? #
- Helps Google find, crawl, and index fresh news content quickly.
- Supports inclusion of important metadata like publication name, language, publication date, and article title.
Best Practices #
- Keep it fresh: Include only articles published within the last 2 days.
- Remove URLs or the <news:news> tag for older articles to avoid clutter.
- It’s okay if your sitemap is temporarily empty; Google understands this.
- Update your news sitemap regularly; don’t create new sitemaps every time you update.
Basic Structure of a News Sitemap (XML) #
<?xml version=”1.0″ encoding=”UTF-8″?>
<urlset xmlns=”http://www.sitemaps.org/schemas/sitemap/0.9″
xmlns:news=”http://www.google.com/schemas/sitemap-news/0.9″>
<url>
<loc>http://www.example.org/business/article55.html</loc>
<news:news>
<news:publication>
<news:name>The Example Times</news:name>
<news:language>en</news:language>
</news:publication>
<news:publication_date>2008-12-23</news:publication_date>
<news:title>Companies A, B in Merger Talks</news:title>
</news:news>
</url>
</urlset>
Required Tags Explained #
- <news:news>: Wraps all news-specific metadata; one per <url>.
- <news:publication>: Contains publication info like name and language.
- <news:name>: Exact name of your news publication as shown on Google News.
- <news:language>: Language of the publication using ISO 639 codes (e.g., “en” for English).
- <news:publication_date>: Date/time article was first published, in W3C datetime format.
- <news:title>: Article headline (don’t add author or publication details here).
Extra Tips
- Split your news sitemap if you have more than 1,000 news URLs.
- Use the correct date and time when the article first appeared, not when added to the sitemap.
- Avoid stuffing titles with extra info; use clean, natural article titles.
Video Sitemaps & Alternatives #
What is a Video Sitemap? #
A video sitemap is a sitemap that includes extra metadata about videos on your site. It helps Google discover and understand your video content more effectively—especially newly added or hard-to-find videos.
Why Use Video Sitemaps? #
- Help Google find videos that normal crawling might miss.
- Provide detailed info like video title, description, thumbnail, duration, publication date, and more.
- Improve video SEO and chances of appearing in rich video search results.
Alternatives to Video Sitemaps #
- mRSS (media RSS) feeds: A simpler way to submit video info, supported by most CMSs and video platforms.
- You can either create:
- A separate video sitemap or mRSS feed, OR
- Add video tags inside your existing sitemap.
- A separate video sitemap or mRSS feed, OR
Key Video Sitemap Best Practices #
- Only list videos relevant to the page content (don’t add unrelated ads or extras).
- All video URLs (player or content) must be:
- Accessible to Googlebot (not blocked by robots.txt or firewalls).
- Publicly available without login.
- Served over supported protocols (HTTP, FTP).
- Accessible to Googlebot (not blocked by robots.txt or firewalls).
- Verify Googlebot identity to prevent spam abuse if needed.
Basic 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://www.example.com/videos/some_video_landing_page.html</loc>
<video:video>
<video:thumbnail_loc>https://www.example.com/thumbs/123.jpg</video:thumbnail_loc>
<video:title>Grilling steaks for summer</video:title>
<video:description>Alkis shows you how to get perfectly done steaks every time</video:description>
<video:content_loc>http://streamserver.example.com/video123.mp4</video:content_loc>
<video:player_loc>https://www.example.com/videoplayer.php?video=123</video:player_loc>
<video:duration>600</video:duration>
<video:publication_date>2007-11-05T19:20:30+08:00</video:publication_date>
<video:family_friendly>yes</video:family_friendly>
<video:live>no</video:live>
</video:video>
</url>
</urlset>
Embedding Videos from Platforms #
- Vimeo example:
<video:player_loc>https://player.vimeo.com/video/987654321</video:player_loc>
- YouTube example:
<video:player_loc>https://www.youtube.com/embed/1a2b3c4d</video:player_loc>
Video Sitemap Tags Reference (Namespace: http://www.google.com/schemas/sitemap-video/1.1) #
Each video on a page must be enclosed in its own <video:video> tag nested inside the page’s <url> tag.
Required Tags for Each Video #
- <video:video>
- Parent container for all video metadata for a single video.
- You can have multiple <video:video> tags per URL if the page has multiple videos.
- Parent container for all video metadata for a single video.
- <video:thumbnail_loc>
- URL of the video’s thumbnail image.
- Must follow thumbnail requirements (clear, relevant, crawlable).
- URL of the video’s thumbnail image.
- <video:title>
- Title of the video as shown on the page.
- HTML entities must be escaped or wrapped in CDATA.
- Should closely match the visible title on your webpage.
- Title of the video as shown on the page.
- <video:description>
- Description of the video (max 2048 characters).
- HTML entities must be escaped or wrapped in CDATA.
- Should reflect the video description on the page (not necessarily word-for-word).
- Description of the video (max 2048 characters).
- Either <video:content_loc> OR <video:player_loc> (One is mandatory)
- <video:content_loc>: URL to the actual video media file (e.g., MP4).
- Recommended as the primary method.
- Must be accessible to Googlebot (not behind login, firewall, or blocked).
- Cannot be the same as the page URL (<loc>).
- Formats like HTML and Flash are not supported.
- Equivalent to VideoObject.contentUrl in structured data.
- Use Googlebot verification if you want to restrict access but allow crawling.
- Recommended as the primary method.
- <video:player_loc>: URL to a video player page or embedded player (e.g., YouTube iframe embed).
- Use if the actual video file URL is not available.
- Must not be the same as the page URL (<loc>).
- Common for Vimeo, YouTube, or other platforms with embedded players.
- Equivalent to VideoObject.embedUrl in structured data.
- Also requires Googlebot access verification if restricted.
- Use if the actual video file URL is not available.
- <video:content_loc>: URL to the actual video media file (e.g., MP4).
Summary: #
At minimum, each <video:video> must contain:
<video:video>
<video:thumbnail_loc>THUMBNAIL_URL</video:thumbnail_loc>
<video:title><![CDATA[Video Title]]></video:title>
<video:description><![CDATA[Video description here…]]></video:description>
<video:content_loc>VIDEO_FILE_URL</video:content_loc> <!– OR –>
<video:player_loc>VIDEO_PLAYER_URL</video:player_loc>
</video:video>
Optional Video Sitemap Tags Explained #
| Tag Name | Purpose | Notes / Values |
| <video:duration> | Length of the video in seconds | Integer from 1 to 28,800 (8 hours max) |
| <video:expiration_date> | When the video expires and should no longer appear in search | W3C date format: YYYY-MM-DD or full datetime with timezone (e.g., 2022-07-16T19:20:30+08:00) |
| <video:rating> | Video rating (quality/popularity) | Float between 0.0 (lowest) and 5.0 (highest) |
| <video:view_count> | Number of times the video has been viewed | Integer (e.g., 12345) |
| <video:publication_date> | Date the video was first published | W3C date format similar to expiration_date |
| <video:family_friendly> | Whether video is suitable for SafeSearch | yes = visible with SafeSearch on; no = visible only if SafeSearch is off |
| <video:restriction> | Control video visibility by country | Requires relationship attribute: allow or deny. Use ISO country codes (e.g., US CA). Example: <video:restriction relationship=”allow”>CA MX</video:restriction> |
| <video:platform> | Control video visibility by device/platform | Requires relationship attribute: allow or deny. Values: web, mobile, tv. Example: <video:platform relationship=”allow”>web tv</video:platform> |
| <video:requires_subscription> | Whether a subscription is needed to view | Values: yes or no |
| <video:uploader> | Name of the video uploader | Max 255 chars; optional info attribute for uploader info URL on the same domain |
| <video:live> | Indicates if the video is a livestream | Values: yes or no |
| <video:tag> | Descriptive tags related to the video content | Multiple tags allowed (max 32); use separate <video:tag> per tag |
Example snippet using some optional tags: #
<video:video>
<video:thumbnail_loc>https://example.com/thumb.jpg</video:thumbnail_loc>
<video:title><![CDATA[How to Grill Perfect Steaks]]></video:title>
<video:description><![CDATA[Step-by-step guide to grilling juicy steaks.]]></video:description>
<video:content_loc>https://example.com/video.mp4</video:content_loc>
<video:duration>600</video:duration>
<video:publication_date>2024-07-20T10:00:00+05:30</video:publication_date>
<video:family_friendly>yes</video:family_friendly>
<video:restriction relationship=”allow”>IN US CA</video:restriction>
<video:platform relationship=”deny”>mobile</video:platform>
<video:requires_subscription>no</video:requires_subscription>
<video:uploader info=”https://example.com/uploader-profile”>GrillMaster</video:uploader>
<video:live>no</video:live>
<video:tag>grilling</video:tag>
<video:tag>steak</video:tag>
<video:tag>outdoor</video:tag>
</video:video>
Deprecated Video Sitemap Tags and Attributes #
Google removed these from their video sitemap specification:
- <video:category>
- <video:gallery_loc>
- autoplay and allow_embed attributes of <video:player_loc>
- <video:price> tag and its attributes
- <video:tvshow> tag and its attributes
Sitemap Alternative: mRSS Feeds #
Google supports mRSS (Media RSS) as an alternative or complement to video sitemaps. mRSS is an extension of RSS 2.0 designed specifically for multimedia content.
- mRSS allows more detailed multimedia metadata than standard RSS.
- You can test, submit, and update mRSS feeds similarly to sitemaps.
- For full mRSS specification, refer to official media RSS documentation.
Basic Structure of an mRSS Feed with Video Example #
<?xml version=”1.0″ encoding=”UTF-8″?>
<rss version=”2.0″
xmlns:media=”http://search.yahoo.com/mrss/”
xmlns:dcterms=”http://purl.org/dc/terms/”>
<channel>
<title>Example MRSS</title>
<link>https://www.example.com/examples/mrss/</link>
<description>MRSS Example</description>
<item>
<link>https://www.example.com/examples/mrss/example.html</link>
<media:content url=”https://www.example.com/examples/mrss/example.flv” fileSize=”405321″
type=”video/x-flv” height=”240″ width=”320″ duration=”120″ medium=”video” isDefault=”true”>
<media:player url=”https://www.example.com/shows/example/video.swf?flash_params” />
<media:title>Grilling Steaks for Summer</media:title>
<media:description>Get perfectly done steaks every time</media:description>
<media:thumbnail url=”https://www.example.com/examples/mrss/example.png” height=”120″ width=”160″/>
<media:price price=”19.99″ currency=”EUR” />
<media:price type=”subscription” />
</media:content>
<media:restriction relationship=”allow” type=”country”>us ca</media:restriction>
<dcterms:valid>end=2020-10-15T00:00+01:00; scheme=W3C-DTF</dcterms:valid>
<dcterms:type>live-video</dcterms:type>
</item>
</channel>
</rss>
Required mRSS Tags for Google #
| Tag | Purpose | Notes |
| <media:content> | Encapsulates video info and URL | medium=”video”, direct video URL in url attribute or <media:player> required |
| <media:player> | URL of the video player | Must differ from <link> URL (which is page URL) |
| <media:title> | Video title | Max 100 chars; escape HTML or use CDATA |
| <media:description> | Video description | Max 2048 chars; escape HTML or use CDATA |
| <media:thumbnail> | Video thumbnail URL | Follow thumbnail requirements |
Useful Optional Tags #
| Tag | Purpose |
| <dcterms:valid> | Publication and expiration date/time range |
| <media:restriction> | Country-based access restrictions (with relationship and type=”country” attributes) |
| <media:price> | Pricing info for purchase, rent, subscription, or package options |
Key Differences: Video Sitemap vs mRSS #
| Aspect | Video Sitemap | mRSS Feed |
| Format | XML sitemap with video namespace | RSS 2.0 with media RSS extension |
| Usage | Google’s recommended way to provide video metadata | Supported alternative, especially if syndicating multimedia feeds |
| Detail Level | Focused on video metadata for indexing | More detailed multimedia syndication including pricing, player, etc. |
| Deprecated Tags | Some video sitemap tags removed | Uses different tags, e.g., <media:price> is supported |
How to Combine Sitemap Extensions #
1. Declare Multiple Namespaces in <urlset> #
Each sitemap extension you want to use needs its namespace declared in the root <urlset> tag using the xmlns attribute.
For example, if you want to combine news, video, image, and hreflang (xhtml) extensions, your <urlset> looks like this:
<?xml version=”1.0″ encoding=”UTF-8″?>
<urlset
xmlns=”http://www.sitemaps.org/schemas/sitemap/0.9″
xmlns:news=”http://www.google.com/schemas/sitemap-news/0.9″
xmlns:video=”http://www.google.com/schemas/sitemap-video/1.1″
xmlns:image=”http://www.google.com/schemas/sitemap-image/1.1″
xmlns:xhtml=”http://www.w3.org/1999/xhtml”>
2. Add Extension Tags Inside Each <url> Tag #
Within each <url> entry, you can include any combination of tags from the declared extensions that apply to that URL.
Example structure inside a <url>:
<url>
<loc>https://www.example.com/article1.html</loc>
<!– News extension –>
<news:news>
<news:publication>
<news:name>Example News</news:name>
<news:language>en</news:language>
</news:publication>
<news:publication_date>2025-07-28</news:publication_date>
<news:title>Breaking News Headline</news:title>
</news:news>
<!– Video extension –>
<video:video>
<video:thumbnail_loc>https://www.example.com/thumb.jpg</video:thumbnail_loc>
<video:title>How to Combine Sitemaps</video:title>
<video:description>Quick tutorial on sitemap extensions</video:description>
<video:content_loc>https://cdn.example.com/videos/tutorial.mp4</video:content_loc>
</video:video>
<!– Image extension –>
<image:image>
<image:loc>https://www.example.com/images/image1.jpg</image:loc>
</image:image>
<!– Hreflang extension –>
<xhtml:link
rel=”alternate”
hreflang=”fr”
href=”https://www.example.com/fr/article1.html”/>
<xhtml:link
rel=”alternate”
hreflang=”es”
href=”https://www.example.com/es/article1.html”/>
</url>
3. Follow Individual Extension Rules #
- Each extension’s tags should follow their specific documentation and structure.
- You can include multiple tags per extension inside a single <url>, like multiple <video:video>, multiple <image:image>, or multiple <xhtml:link>.
- No conflict occurs because namespaces keep them separate.
4. Final Notes #
- Your sitemap file can have up to 50,000 URLs and each can have multiple extension tags.
- Combining extensions helps Google better understand rich content and localized pages in one place.
- Always validate your sitemap with tools like Google Search Console or XML sitemap validators to avoid errors.