Handbook/Ch. 8
Handbook · Chapter 8

Media SEO — Images & Video

Google indexes images referenced via img src, never CSS background-image. Descriptive alt text, filenames, and responsive images; the three distinct video URL roles; VideoObject required properties; and image and video sitemaps.

Image SEO

Google indexes images referenced via <img src> (or inline Data URIs). Supported: BMP, GIF, JPEG, PNG, WebP, SVG, AVIF. CSS background-image is NOT indexed. Don't block image URLs; verify CDN domain ownership in Search Console.

Video SEO

Requirements to index a video (all must hold): (1) watch page indexed and performing; (2) video is the main content (one prominent video per page); (3) standard embed (<video>/<iframe>/<embed>/<object>, no fragment/interaction-gated loading, JS-injected must appear rendered); (4) file at a stable non-expiring URL (no Data URLs); (5) thumbnail accessible (stable URL); (6) contentUrl/embedUrl accessible — don't block the CDN; (7) not hidden; paywalled → add paywall markup; (8) unique title/description.

Keep three URL roles distinct (common pitfall):

URL Purpose Where
Watch page Page embedding the video sitemap <loc>
Player Embeddable player embedUrl / <video:player_loc>
Video file Content bytes on CDN contentUrl / <video:content_loc>

content_loc/player_loc cannot equal <loc>; embedUrl/contentUrl must not point at the watch page.

VideoObjectRequired: name, thumbnailUrl, uploadDate (ISO 8601 with timezone). Recommended: contentUrl (most effective), embedUrl, duration (ISO 8601 PT1M54S), description, expires, regionsAllowed.

{
  "@context": "https://schema.org", "@type": "VideoObject",
  "name": "How to Make an Origami Boat", "description": "Step-by-step folding guide.",
  "thumbnailUrl": ["https://example.com/1x1.jpg","https://example.com/16x9.jpg"],
  "uploadDate": "2024-07-19T08:00:00+08:00", "duration": "PT1M54S",
  "contentUrl": "https://example.com/video/123/file.mp4", "embedUrl": "https://example.com/embed/123"
}

Key Moments (two mutually-exclusive approaches; video must be ≥30s): Clip markup (manual name+startOffset seconds+url with timestamp, chronological, no duplicate start times) OR SeekToAction (give Google your ?t={seek_to_second_number} pattern; startOffset-input must be exactly "required name=seek_to_second_number"). LIVE badge: BroadcastEvent in publication with isLiveBroadcast: true, startDate, and endDate when the stream ends — use the Indexing API on live/stop/change. nosnippet disables Key Moments; duration must be ISO 8601 not seconds.

Video sitemap (xmlns:video=".../sitemap-video/1.1") — required: video:video, video:thumbnail_loc, video:title, video:description (≤2048), one of video:content_loc/video:player_loc. Notable limits: video:duration 1–28800 s (8 h), video:rating 0.0–5.0, video:tag max 32. Removed: video:category, video:price, video:gallery_loc, autoplay/allow_embed. mRSS is an accepted alternative.

News sitemap (xmlns:news): required news:publication (name+language), news:publication_date, news:title; max 1,000 URLs, only last-2-days articles.

Sources

  1. Google Search Central — Google Images and image SEO best practices
  2. Google Search Central — Video SEO best practices
  3. Google Search Central — VideoObject (video) structured data
Related
Image SEO: Alt Text, Formats & Lazy-Loading Schema Markup Guide 2026: Types, JSON-LD & Testing agent.heading_skip

Audit your own site — free

156 checks, internal PageRank, render-diff. No signup, results in ~30s.

Scan your site →