Field guide  ·  Video SEO

How to build the perfect
video watch page

An annotated wireframe that walks through every element of a dedicated video watch page, what goes where, and why, mapped element-by-element to Google's official video indexing best practices. Each recommendation carries a citation back to the source so you can verify and go deeper.

Built from Google Search Central → Video SEO best practices
developers.google.com/search/docs/appearance/video
Source last updated 2025-12-18. Citations marked [n] resolve to the reference list at the foot of this page.

How to read the annotations

RequiredMandatory for video indexing eligibility. Skip it and the video won't appear in video features.
Strongly recommendedGoogle explicitly advises this; major impact on discovery and quality.
Feature enhancementUnlocks a specific rich feature (previews, key moments, live badge).
Structured dataMetadata Google reads to describe and rank the video.
01

First, is it actually a watch page?

Every rich video feature, video results on the main page, Video mode, Key Moments, the Live badge, depends on having a dedicated page whose single purpose is to play one video. Get this wrong and nothing else on this page matters.

Google defines a watch page as a page whose main purpose is to show users a single video.[1] The video is the reason the visitor is there, not a garnish on top of other content. That distinction is the gate to every feature below.

✓  These are watch pages

A video landing page · a TV episode player page · a news video page · a sports highlight page · an events clip page. The common thread: watching the video is the whole reason to visit.[1]

✕  These are NOT watch pages

A blog post reviewing an embedded video · a product page with a 360° product spin · a category page listing many equally-prominent videos · a movie review with a trailer tucked in.[1]

★  The rule that drives everything

Create one dedicated watch page per video, and give each page a title and description that are unique to that video.[1] It is fine to also embed the same video elsewhere (a news article, a product page); a non-watch page can still appear as a text result or a Google Image result with a video badge.[1] But the rich video treatment lives on the dedicated page.

02

Three URLs, kept straight

Google distinguishes three different URLs on a video page. Confusing them is one of the most common reasons structured data and sitemaps fail validation. Here is what each one is and where it lives.

The three URLs on a video watch page and how to declare each The watch page URL holds the embed; inside it the player URL is the iframe source; the player loads the video file URL, which is the actual bytes. ① WATCH PAGE https://example.com/videos/grilling-steaks-for-summer The page embedding the video · sitemap <loc> ② VIDEO PLAYER https://example.com/videoplayer.php?video=123 The iframe src · structured data: embedUrl ③ VIDEO FILE https://streamserver.example.com/video/123/file.mp4 The actual bytes · structured data: contentUrl Must stay fetchable & on a stable URL HOW TO DECLARE EACH Watch page sitemap: <loc> Player SD: embedUrl sitemap: player_loc File SD: contentUrl sitemap: content_loc in <video>: source src

Nesting is literal: the player lives inside the watch page, the file plays inside the player. Declaring embedUrl where you meant contentUrl (or vice versa) is a frequent validation failure.[10]

03

The annotated wireframe

Here is the page itself. The left column is the rendered layout; the right column annotates each block with what it is, the priority level, and why Google wants it there. Read top to bottom.

https://example.com/videos/grilling-steaks-for-summer
Breadcrumb navigation
A Recommended

Breadcrumb trail

Helps Google understand where this page sits in your site structure, and can render as a breadcrumb in results. Pair it with BreadcrumbList structured data.

Why: The technical requirements for getting content into Search apply to video pages too, and clear site structure is part of that foundation.[2]

Page H1 + visible byline
Grilling steaks for summer
Published Jun 3, 2026 · 4 min 12 sec · by Bob
B Required-ish

Unique, video-specific title

The visible H1 should match the intent of the video and align with the <title> and the structured-data name. A visible publish date supports byline-date understanding.

Why: Each watch page must have a page title and description unique to that video; Google links to its title and description best-practice guides for exactly this.[1]

The video player — the main content
LIVE 4:12
C Required

The embedded video, front and center

Embed using an element Google recognises: <video>, <embed>, <iframe>, or <object>.[2]

The video must be embedded on the watch page, must not be hidden behind other elements, and must not require a user action (swipe, click, type) to load.[2][3]

Why: If it is gated behind interaction or hidden, Google can't confirm the video is the page's main content, the one thing that makes the page eligible for video features.[2]

Poster frame / thumbnail (shown before play)
poster="https://example.com/thumbs/123.jpg"
D Required

A valid thumbnail at a stable URL

Set it on the <video> element's poster attribute, and mirror the same URL in your structured data and sitemap.[4]

Why: A video must have a valid thumbnail at a stable URL to be indexed. If the thumbnail URL changes too often (some CDNs expire them fast), Google may fail to index the video.[3][5]

Visible video description
E Recommended

Unique on-page description

Real, readable copy describing what the video covers, distinct from every other video on the site, and consistent with the structured-data description.

Why: Google asks for unique information in the name, description, and thumbnailUrl for each video, and for structured data to be consistent with the actual content and other metadata.[6]

Visible chapter list (key moments)
  • 0:00 Choosing the cut
  • 1:05 Seasoning and resting
  • 2:30 Grill setup and heat zones
  • 3:20 Searing and the finish
F Feature: Key Moments

Timestamped chapters

Lets users jump to segments like chapters in a book. Enable with Clip structured data (exact start/end + label) or SeekToAction (tell Google your timestamp URL pattern).[7]

Why: Google may detect key moments automatically, but it prioritizes the moments you specify yourself.[7] Clip works in all languages; SeekToAction in a defined subset.[7]

On-page transcript
[0:00] Today we're grilling the perfect summer steak...
[1:05] Season generously and let it come to room temp...
[2:30] Build a two-zone fire so you can sear then...
G Recommended

Full text transcript

Real, crawlable text on the page gives the watch page substantive content beyond the embed, supporting indexing and ranking of the page itself.

Why: The indexed watch page must be performing well in Search before its video is considered, and an indexed page does not guarantee an indexed video.[3] Text content helps the page earn that standing.

In <head> — invisible to users, read by Google
<script type="application/ld+json"> { "@type": "VideoObject",   "name": "Grilling steaks...",   "thumbnailUrl": "...",   "contentUrl": "...",   "embedUrl": "..." } </script>
H Structured data

VideoObject JSON-LD

The machine-readable description of the video. Google supports structured data, video sitemaps, and Open Graph as metadata sources.[2]

Why: Structured data influences how the video appears and is the mechanism for nearly every enhancement. Full field-by-field breakdown in section 05.

Related videos (internal links)
I Informational

Links to other watch pages

Each links to another dedicated watch page, not a gallery. This builds crawlable paths between your videos.

Why: Helping Google find your videos is step one; internal links from indexed pages aid discovery and crawling of the rest of your library.[2]

The ordering above is deliberate: the player and its thumbnail sit at the visual top because the video is the page's main content; transcript and chapters reinforce that the page is genuinely about the video; structured data and internal links work behind the scenes.

05

VideoObject structured data, field by field

This is the single highest-leverage block on the page. Here is a thoroughly populated VideoObject, with the role of each property annotated inline.

JSON-LD — VideoObject <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "VideoObject", "name": "Grilling steaks for summer", ← unique per video [6] "description": "Bob shows you how to grill steaks perfectly every time.", "thumbnailUrl": ["https://example.com/thumbs/123.jpg"], ← stable URL [3][5] "uploadDate": "2026-06-03T08:00:00+00:00", "duration": "PT4M12S", ← ISO 8601 duration "contentUrl": "https://streamserver.example.com/video/123/file.mp4", ← the bytes [9] "embedUrl": "https://example.com/videoplayer.php?video=123", ← the player [10] <!-- KEY MOMENTS via Clip: prioritized over auto-detection [7] --> "hasPart": [ { "@type": "Clip", "name": "Choosing the cut", "startOffset": 0, "endOffset": 65, "url": "https://example.com/videos/grilling-steaks-for-summer?t=0" }, { "@type": "Clip", "name": "Grill setup and heat zones", "startOffset": 150, "endOffset": 200, "url": "https://example.com/videos/grilling-steaks-for-summer?t=150" } ], <!-- LIVE BADGE: only for livestreams [11] --> "publication": { "@type": "BroadcastEvent", "isLiveBroadcast": true, "startDate": "2026-06-03T08:00:00+00:00", "endDate": "2026-06-03T08:30:00+00:00" }, <!-- REGION RESTRICTION (optional): allow-list [12] --> "regionsAllowed": ["US", "CA"], <!-- EXPIRATION: only if the video genuinely expires [13] --> "expires": "2027-06-03T08:00:00+00:00" } </script>

What each property does

PropertyRoleSource rule
nameThe video's title. Must be unique across your site.Provide unique info in name, description, thumbnailUrl per video.[6]
descriptionWhat the video covers. Consistent with actual content.Structured data must be consistent with the real content.[6]
thumbnailUrlPreferred thumbnail. Same URL everywhere you declare it.Use the same thumbnail URL across all metadata.[4]
contentUrlThe actual video file bytes. Needed for previews and key moments.Provide contentUrl of a supported file type; don't block it.[9]
embedUrlThe player URL (the iframe src), distinct from the file.Provide the player URL as embedUrl.[10]
hasPart (Clip)Explicit chapters with start/end and labels.Clip lets you set exact segments; prioritized over auto.[7]
BroadcastEventMarks a livestream so the LIVE badge can appear.Enable the LIVE badge with BroadcastEvent.[11]
regionsAllowedLimits which regions see the video result.Set regionsAllowed, or use ineligibleRegion to deny.[12]
expiresWhen the video should drop out of video results.Only include if the video actually expires.[13]
⚠  The expiration footgun

An expiration date in the past pulls the video from results entirely; the page may then appear only as a text result with no thumbnail.[13] It is easy to accidentally backdate this on a live video. If a video doesn't expire, omit the expiration field entirely.[13]

06

Turning on the rich features

Three optional features each have their own switch. None is guaranteed to trigger, adding markup makes you eligible, not entitled.[7]

Video previews — the moving clip in results

Google selects a few seconds of your video to show as a moving preview.[8] To be eligible, allow Google to fetch your video files, then optionally cap the length with the max-video-preview robots meta tag.[8]

Key Moments — chapter navigation

Two paths depending on where the video lives. If it is embedded on your own page, use Clip structured data (exact start/end times and labels, supported in all languages) or SeekToAction (tell Google where timestamps go in your URL structure, supported in a named subset of languages).[7] If the video is hosted on YouTube, specify timestamps and labels in the YouTube description instead.[7] Google prioritizes the moments you set over its own automatic detection.[7]

Live badge — the red LIVE marker

For livestreaming videos, enable the red LIVE badge with BroadcastEvent structured data.[11]

ⓘ  Third-party embeds (YouTube, Vimeo, Facebook)

If you embed a third-party player, Google may index the video both on your page and on the platform's own page, and both can appear in video features as long as they meet the indexing criteria.[14] Google still recommends you provide structured data on your own watch page, and check with the host that they let Google fetch the video file.[14]

07

Letting Google fetch the bytes

Previews and key moments both require Google to successfully fetch the actual video file. This is a server-and-robots concern, not a markup one.

★  If you worry about scrapers

You can verify Googlebot and serve the stable contentUrl only to trusted clients like Googlebot, while other clients don't see that field.[5] That keeps the file fetchable for indexing without exposing its location to everyone.

08

Thumbnail specifications

If you let Google fetch the file it will try to auto-generate a thumbnail, but you can and should specify your preferred one.[4] Here are the exact specs.

SpecRequirement
FormatsBMP, GIF, JPEG, PNG, WebP, SVG, and AVIF.[4]
SizeMinimum 60×30 pixels; larger is preferred.[4]
LocationAccessible to Googlebot and Googlebot Images, not blocked by robots.txt or a login, and at a stable URL.[4]
TransparencyAt least 80% of pixels must have an alpha value greater than 250 (essentially opaque).[4]
Where to set itposter on the <video> element · thumbnailUrl in structured data · thumbnail tag in a sitemap · og:video:image in OGP.[4]
ConsistencyIf declared in multiple places, use the identical URL everywhere.[4]
⚠  Supported video file types

To be eligible for video features, use a supported file type: 3GP, 3G2, ASF, AVI, DivX, M2V, M3U, M3U8, M4V, MKV, MOV, MP4, MPEG, OGV, QVT, RAM, RM, VOB, WebM, WMV, and XAP.[15] Data URLs are not supported.[15]

09

The indexing decision flow

Even a perfect page can fail to get its video indexed. This is the chain of conditions Google walks, in order. Every link must hold.

The chain of conditions Google checks before indexing a video A vertical sequence of gates: watch page indexed, page performing in search, video embedded and visible, valid thumbnail at a stable URL, file fetchable. All must pass for the video to be indexed and eligible for features. Watch page is indexed The page itself must be in Google's index first Page is performing in Search Indexed alone is not enough — it must perform Video is embedded and visible On a watch page · not hidden · no user action to load Valid thumbnail at a stable URL Meets specs · URL doesn't expire or churn Google can fetch the file Unlocks previews + key moments · hosts have capacity Video indexed & eligible for video features Video results · Video mode · key moments · live badge IF A GATE FAILS The video isn't indexed. The page may still show as a plain text result with no video thumbnail. GATE TYPE Page-level standing Required of the video Unlocks rich features Successful outcome

The crucial nuance, stated plainly by Google: an indexed watch page does not mean the video will also be indexed.[3] Each gate is independent.

10

The pre-publish checklist

Run this before every video goes live.

✓  After publishing — monitor

Use Search Console's video indexing report to see how many indexed watch pages contain an indexed video and why others didn't, the video rich result report to fix VideoObject issues, and the Performance report's Videos appearance filter to track performance.[16]

REF

References

Every citation above resolves to a specific section of Google's video SEO documentation. All from the same source page unless noted; section anchors given for precision.

  1. Create a dedicated watch page for each video. Definition of a watch page, examples and non-examples, the one-page-per-video and unique-title-and-description rule. developers.google.com/search/docs/appearance/video#watch-page
  2. Help Google find your videos. Recognised embed elements; metadata sources (structured data, video sitemaps, Open Graph); no fragment-loaded video; rendered-HTML requirement. …/video#help-google-find
  3. Ensure your videos can be indexed. Watch page indexed and performing; indexed page does not guarantee indexed video; video embedded and not hidden; paywall structured data; valid thumbnail at a stable URL. …/video#indexing-criteria
  4. Provide a high-quality video thumbnail. Thumbnail metadata sources, format/size/location/transparency specs, same-URL-everywhere rule. …/video#provide-thumbnail
  5. Use stable URLs. CDN expiry warning; single stable thumbnail and file URL; verify Googlebot to serve contentUrl only to trusted clients. …/video#stable-url
  6. Provide consistent and unique information in your structured data. Consistency with actual content; unique name, description, thumbnailUrl per video. …/video#structured-data
  7. Key moments. Clip vs SeekToAction; language support; YouTube-description path; user-set moments prioritized over automatic; nosnippet opt-out. …/video#key-moments
  8. Video previews. Few-second moving preview; allow Google to fetch files; max-video-preview robots meta tag. …/video#video-previews
  9. Allow Google to fetch your video files. Don't block the stream; stable URL; contentUrl of a supported type; both hosts need crawl capacity; file not exposed in results. …/video#allow-fetch
  10. Which URL is which? Watch page vs video player (embedUrl) vs video file (contentUrl); how to declare each in structured data and sitemaps. …/video#which-url
  11. Live Badge. Enable the red LIVE badge with BroadcastEvent structured data. …/video#live-badge
  12. Restrict a video based on the user's location. regionsAllowed and ineligibleRegion in structured data; restriction tag in sitemaps. …/video#restrict
  13. Remove a video / expiration. 404 or noindex on the watch page; expiration date behavior; backdating warning; omit if it doesn't expire. …/video#remove
  14. Using third-party embedded players. Indexing on both your page and the platform; still provide structured data; confirm the host allows fetching. …/video#third-party
  15. Use a supported video file type. Full list of accepted formats; data URLs not supported. …/video#supported-video-files
  16. Monitor video watch pages with Search Console. Video indexing report, video rich result report, Performance report with the Videos appearance filter. …/video#monitor