你在文章页里嵌入了视频(YouTube、Vimeo、MP4),加上了 VideoObject JSON-LD。Rich Results Test 显示「Valid」,预览也对。过了几周,Search Console Enhancements → Videos 还是显示 0 条,或者页面被索引了但没有视频外观;你的 URL 也始终没出现在 Google 视频 tab 里。有效的 schema 是必要不充分——Google 还另外要求:缩略图可抓且分辨率够、contentUrl 或 embedUrl 指向真正的视频播放资源(不是包着 <video> 标签的 HTML 页面)、日期是 ISO 8601、视频对公网可访问(无登录墙、不被区域锁、Googlebot 能拿到)。这篇按命中率排序走完五种常见失败模式,附具体诊断方法。
10 秒判断你是哪种情况
| 症状 | 最可能的原因 |
|---|---|
| Rich Results Test 「Valid」但 Search Console Enhancements 显示 0 条 | 抓取时问题:缩略图或视频 URL 对 Googlebot 不可达 |
| Rich Results Test 报「Missing field thumbnailUrl」 | 必填字段缺失 |
contentUrl 设了但 Google 不识别 | URL 指向 HTML 包装页,不是视频文件 |
| 视频已索引但 SERP 不显示缩略图 | 缩略图小于 1200x720、宽高比不对、或不可达 |
| 只有某一个视频缺失 | 那个视频私有 / 区域锁 / 付费墙 |
常见原因(按命中率排序)
1. contentUrl 指向页面,不是视频文件
最常见的错。contentUrl 必须是视频文件的直链(mp4、webm、mov),不是包含 <video> 的页面 URL。
{
"@context": "https://schema.org",
"@type": "VideoObject",
"contentUrl": "https://yourdomain.com/articles/how-to-foo/",
"embedUrl": "https://yourdomain.com/articles/how-to-foo/"
}
两个 URL 都是错的——它们指向包着视频的文章页。Googlebot 抓到的是 HTML,没看到视频文件,于是把 VideoObject 丢掉。
修复:要么直链视频文件,要么 embedUrl 用播放器 iframe URL:
{
"@type": "VideoObject",
"contentUrl": "https://cdn.yourdomain.com/videos/how-to-foo.mp4",
"embedUrl": "https://www.youtube.com/embed/VIDEO_ID"
}
YouTube:embedUrl 是 https://www.youtube.com/embed/VIDEO_ID——注意是 /embed/,不是 /watch?v=。Vimeo:https://player.vimeo.com/video/VIDEO_ID。
2. thumbnailUrl 缺失或分辨率太低
Google 要求 thumbnailUrl,且图必须 Googlebot 能抓、HTTPS、最好至少 1200x720(16:9)。320x180 的缩略图能过 Rich Results Test 但 SERP 不会显示缩略图。
{
"@type": "VideoObject",
"thumbnailUrl": [
"https://yourdomain.com/videos/foo-thumb-1200x720.jpg",
"https://yourdomain.com/videos/foo-thumb-1920x1080.jpg"
]
}
可以传数组——Google 自己挑最好的。
怎么判断:
curl -A "Googlebot/2.1 (+http://www.google.com/bot.html)" -I "https://yourdomain.com/videos/foo-thumb.jpg"
# 期望 200 + image/jpeg
identify https://yourdomain.com/videos/foo-thumb.jpg # ImageMagick 确认尺寸
状态 403/401/302 表示被挡。尺寸小于 1200x720 就重新导出。
3. uploadDate 不是 ISO 8601
uploadDate 必须是带时区的完整 ISO 8601 字符串。"2026-05-19" 勉强能用,但 "2026-05-19T00:00:00Z" 或 "2026-05-19T14:30:00-07:00" 才是 Google 期望的。
{
"@type": "VideoObject",
"uploadDate": "2026-05-19T14:30:00-07:00"
}
常见错:输出成 "5/19/2026"(US locale)或 "2026年5月19日"(本地化),都会失败。
4. 视频被挡——登录墙、付费墙、区域锁
Googlebot 抓不到视频(或它的 embed 页)就没法验证视频存在。付费墙、Vimeo 私有视频、区域锁内容都拿不到视频 rich result。
怎么判断:
curl -A "Googlebot/2.1" -I "https://www.youtube.com/embed/VIDEO_ID"
# 期望 200;302-to-login 或 401 表示被挡
YouTube unlisted(未公开列出):VideoObject 可以工作,只要 embedUrl 是公开 embed URL。真正私有的视频拿不到视频 rich result。
修复:付费墙内容用 paywalled content schema(isAccessibleForFree: false + hasPart + cssSelector)。Google 对付费视频有专门的合规计划。
5. 同页多个 VideoObject 冲突
页面上既有 hero 视频又有正文里嵌入视频,可能输出两个 VideoObject。如果它们 name 或 contentUrl 一样,Google 会判定为重复 / 歧义,可能两个都不选。
修复:每页只保留一个 canonical VideoObject,代表主视频。如果一页真的有多个不同视频,每个给独立的 name 和 contentUrl,并考虑从索引的角度是否应该拆成独立 URL。
可直接复制的 VideoObject 模板
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "10 分钟搭好自托管服务器",
"description": "硬件挑选、系统安装、SSH 加固——分步演示。",
"thumbnailUrl": [
"https://yourdomain.com/videos/server-setup-thumb-1200x720.jpg",
"https://yourdomain.com/videos/server-setup-thumb-1920x1080.jpg"
],
"uploadDate": "2026-05-19T14:30:00-07:00",
"duration": "PT10M30S",
"contentUrl": "https://cdn.yourdomain.com/videos/server-setup.mp4",
"embedUrl": "https://www.youtube.com/embed/VIDEO_ID",
"publisher": {
"@type": "Organization",
"name": "站点名",
"logo": {
"@type": "ImageObject",
"url": "https://yourdomain.com/logo.png"
}
},
"potentialAction": {
"@type": "SeekToAction",
"target": "https://yourdomain.com/videos/server-setup#t={seek_to_second_number}",
"startOffset-input": "required name=seek_to_second_number"
}
}
注:duration 用 ISO 8601 duration 格式。PT10M30S = 10 分 30 秒;PT1H5M = 1 小时 5 分。
最短修复路径
按命中率排序:
embedUrl改成真正的播放器 URL(YouTube/embed/VIDEO_ID、Vimeo/video/VIDEO_ID)—— 修掉 ~40%- 加 / 升级
thumbnailUrl到 1200x720+ —— 修掉 ~25% uploadDate改成带时区的 ISO 8601 —— 修掉 ~15%curl -A "Googlebot/2.1"验证缩略图和 embed URL 可抓 —— 修掉 ~15%- 每页一个 canonical VideoObject —— 剩下的 5%
预防建议
- VideoObject 输出做进通用视频嵌入组件,每个视频自动有 schema。各页手写 JSON-LD 会漂移。
- 构建期校验 VideoObject 必填字段:缺
name、description、thumbnailUrl、uploadDate、contentUrl/embedUrl之一就 fail build。 - 缩略图源图按 1920x1080 制作,schema 数组里降采样到 1200x720。
- 每次框架升级后,给一个 canary 视频页跑 Rich Results Test。
- 每周看一次 Search Console Enhancements → Videos。骤降通常意味着模板回归。
FAQ
Q:YouTube 嵌入会自动给我的页面生成 VideoObject 吗? A:不会。YouTube 在它自己的 watch 页(youtube.com/watch?v=…)上输出 VideoObject,不在你的页面上。你 iframe 嵌入到自己页面后,除非你自己加 JSON-LD,否则页面是没有 schema 的。
Q:VideoObject 必填字段?
A:name、description、thumbnailUrl、uploadDate,加 contentUrl 或 embedUrl 二选一。两个都给兼容性最好。
Q:Rich Results Test 显示 Valid 但几周后还是没视频 tab 收录。 A:校验只检 schema 语法。被索引要 Googlebot 真去抓 embed / content URL 验证视频存在。检查缩略图和 embed URL 公网可达。同时确认外层文章页本身有被索引(URL Inspection)。
Q:YouTube watch 页能进 Google 视频 tab,我的文章页却进不去。 A:正常。YouTube watch 页是那个视频的官方 canonical。你的页面也能排,但需要 embed 正确,并且页面有 embed 之外的独特内容增值。
Q:contentUrl 还是 embedUrl?
A:能给就都给。contentUrl(视频文件直链)是 Google 偏好的(视频 sitemap 也用);embedUrl(播放器 iframe URL)是用户实际看到的。自托管视频两个都设;YouTube 嵌入只有 embedUrl,可以接受。
Q:付费墙文章里的视频还能拿视频 rich result 吗?
A:可以,用付费内容 schema(isAccessibleForFree: false)。Google 有专门的合规计划——注册站点,按 付费内容指南 走。