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.
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.
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
LIVE4: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.
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.
04
The document head, line by line
Half the SEO value of a watch page is invisible. Here is the head you want, with each line annotated against the rules it satisfies.
index.html — <head><title>Grilling steaks for summer | Bob's Kitchen</title>← unique per video [1]<metaname="description"content="Bob shows you how to grill steaks perfectly every time."><!-- Canonical: one stable URL for this watch page --><linkrel="canonical"href="https://example.com/videos/grilling-steaks-for-summer"><!-- Control preview length; do NOT add nosnippet if you want key moments [7][8] --><metaname="robots"content="max-video-preview:-1, max-image-preview:large"><!-- Open Graph: a supported metadata source [2] --><metaproperty="og:type"content="video.other"><metaproperty="og:title"content="Grilling steaks for summer"><metaproperty="og:video"content="https://streamserver.example.com/video/123/file.mp4"><metaproperty="og:video:image"content="https://example.com/thumbs/123.jpg">← OG thumbnail [4]
ⓘ On metadata sources
Google supports three ways to describe a video: structured data, video sitemaps, and the Open Graph protocol.[2] You don't have to use all three, but if you specify a thumbnail in more than one place, use the identical thumbnail URL across all of them.[4]
⚠ The nosnippet trap
Adding the nosnippet meta tag opts the video out of key moments completely, including any automatic key moments Google would have generated.[7] Only use it if you genuinely want to suppress that feature.
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<scripttype="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
Property
Role
Source rule
name
The video's title. Must be unique across your site.
Provide unique info in name, description, thumbnailUrl per video.[6]
description
What the video covers. Consistent with actual content.
Structured data must be consistent with the real content.[6]
thumbnailUrl
Preferred thumbnail. Same URL everywhere you declare it.
Use the same thumbnail URL across all metadata.[4]
contentUrl
The actual video file bytes. Needed for previews and key moments.
Provide contentUrl of a supported file type; don't block it.[9]
embedUrl
The player URL (the iframe src), distinct from the file.
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.
Don't block the streaming file. Don't apply noindex or robots.txt disallow to the URL of the actual video bytes (such as an M3U8 stream).[9]
Serve it from a stable URL of a supported file type, declared via contentUrl.[9]
Give both hosts capacity. If example.com/puppies.html embeds a video served by streamserver.example.com, both hosts must meet the technical requirements and have server capacity to support crawling.[9]
Google won't expose the file directly. Users who click a video result land on your site to watch; the file URL is for Google's processing, not public display.[9]
★ 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.
Accessible to Googlebot and Googlebot Images, not blocked by robots.txt or a login, and at a stable URL.[4]
Transparency
At least 80% of pixels must have an alpha value greater than 250 (essentially opaque).[4]
Where to set it
poster on the <video> element · thumbnailUrl in structured data · thumbnail tag in a sitemap · og:video:image in OGP.[4]
Consistency
If 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 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.
One video, one dedicated page.The video is the page's main purpose, not a complement to other content. [1]
Unique title and description per video.Visible on-page and matched in the <title>, meta description, and structured data. [1][6]
Embedded with a recognised element.<video>, <embed>, <iframe>, or <object>; not behind a fragment URL; not requiring a user action. [2][3]
Video not hidden behind other elements.If paywalled, add paywall structured data so Google can still find it. [3]
Supported file type at a stable URL.From the supported-formats list; no data URLs; URL doesn't expire on you. [15][5]
Valid thumbnail, stable URL, same everywhere.Meets size, format, and transparency specs; identical URL across poster, structured data, sitemap, OGP. [4]
Three URLs declared correctly.Watch page (<loc>), player (embedUrl), file (contentUrl), not confused with each other. [10][9]
Google can fetch the file.Not blocked by noindex/robots.txt; both page and stream hosts have crawl capacity. [9]
Features wired intentionally.Clip or SeekToAction for key moments; BroadcastEvent for live; max-video-preview set; no accidental nosnippet. [7][11][8]
Listed in your video sitemap.Helps Google discover and re-confirm the video. [2]
Verified in Search Console.Video indexing report, video rich result report, and Performance report with the Videos filter. [16]
✓ 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.
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
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
Provide a high-quality video thumbnail. Thumbnail metadata sources, format/size/location/transparency specs, same-URL-everywhere rule. …/video#provide-thumbnail
Use stable URLs. CDN expiry warning; single stable thumbnail and file URL; verify Googlebot to serve contentUrl only to trusted clients. …/video#stable-url
Provide consistent and unique information in your structured data. Consistency with actual content; unique name, description, thumbnailUrl per video. …/video#structured-data
Key moments. Clip vs SeekToAction; language support; YouTube-description path; user-set moments prioritized over automatic; nosnippet opt-out. …/video#key-moments
Video previews. Few-second moving preview; allow Google to fetch files; max-video-preview robots meta tag. …/video#video-previews
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
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
Live Badge. Enable the red LIVE badge with BroadcastEvent structured data. …/video#live-badge
Restrict a video based on the user's location. regionsAllowed and ineligibleRegion in structured data; restriction tag in sitemaps. …/video#restrict
Remove a video / expiration. 404 or noindex on the watch page; expiration date behavior; backdating warning; omit if it doesn't expire. …/video#remove
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
Use a supported video file type. Full list of accepted formats; data URLs not supported. …/video#supported-video-files
Monitor video watch pages with Search Console. Video indexing report, video rich result report, Performance report with the Videos appearance filter. …/video#monitor