本文约 4,397 字,预计阅读 11 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:视频上传了,百度根本不知道你有视频
很多 WordPress 站点开始做视频内容,把 B 站或自托管的视频嵌进文章,然后等着百度给视频结果。等三个月也没动静——因为百度并不知道这个页面上有视频。视频是特殊资源类型,百度有专门的视频收录通道,但它不会靠爬虫猜,需要站长主动用 sitemap 或结构化数据声明。
两条路都真实可用,而且建议同时走:一是视频 sitemap(百度搜索资源平台「资源提交」里的视频提交入口),二是页面级的 VideoObject 结构化数据。前者解决「被知道」,后者解决「被理解」。
原理分析:两条通道的分工
| 通道 | 作用 | 提交位置 | 生效特点 |
|---|---|---|---|
| 视频 sitemap | 批量告知视频资源清单 | 搜索资源平台资源提交-视频 | 适合批量,需要维护 XML |
| VideoObject 结构化数据 | 描述单个视频的属性 | 页面 head 内 JSON-LD | 随页面抓取生效 |
| 普通收录 API 推送 | 加速页面被发现 | 普通收录-API 推送接口 | 只解决收录,不解决视频识别 |
视频 sitemap 本质上是一个带视频扩展命名空间的 XML,里面有标题、播放页地址、缩略图、时长、发布时间等字段。百度抓取这个文件后,把视频纳入视频库,再按相关性分发到搜索结果、百度视频等场景。
保姆级实操
步骤 1:给文章建立视频字段。 用自定义字段存视频信息,比从正文正则提取可靠得多。建议字段:_video_page_url(播放页)、_video_thumbnail(封面图)、_video_duration(时长秒数)、_video_publish_date。
步骤 2:生成视频 sitemap。 用重写规则暴露一个地址,不落到磁盘上,避免与缓存插件冲突:
// functions.php:输出 /video-sitemap.xml
add_action( 'init', function () {
add_rewrite_rule( '^video-sitemap\.xml$', 'index.php?video_sitemap=1', 'top' );
} );
add_filter( 'query_vars', function ( $vars ) {
$vars[] = 'video_sitemap';
return $vars;
} );
add_action( 'template_redirect', function () {
if ( ! get_query_var( 'video_sitemap' ) ) {
return;
}
header( 'Content-Type: application/xml; charset=utf-8' );
$q = new WP_Query( array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => 500,
'meta_key' => '_video_page_url',
'meta_compare' => 'EXISTS',
) );
$xml = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
$xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" ' .
'xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">' . "\n";
foreach ( $q->posts as $p ) {
$page = get_post_meta( $p->ID, '_video_page_url', true );
$thumb = get_post_meta( $p->ID, '_video_thumbnail', true );
$dur = (int) get_post_meta( $p->ID, '_video_duration', true );
if ( ! $page || ! $thumb ) {
continue;
}
$xml .= '<url><loc>' . esc_url( get_permalink( $p ) ) . '</loc>';
$xml .= '<video:video>';
$xml .= '<video:thumbnail_loc>' . esc_url( $thumb ) . '</video:thumbnail_loc>';
$xml .= '<video:title>' . esc_xml( get_the_title( $p ) ) . '</video:title>';
$xml .= '<video:description>' . esc_xml( wp_trim_words( $p->post_content, 40, '' ) ) . '</video:description>';
$xml .= '<video:player_loc>' . esc_url( $page ) . '</video:player_loc>';
$xml .= '<video:duration>' . $dur . '</video:duration>';
$xml .= '<video:publication_date>' . get_the_date( 'c', $p ) . '</video:publication_date>';
$xml .= '</video:video></url>' . "\n";
}
$xml .= '</urlset>';
echo $xml;
exit;
} );
步骤 3:刷新重写规则并验证。 保存后到后台「设置 – 固定链接」点一次保存,然后访问 /video-sitemap.xml 确认能输出 XML(普通 XML 地图的做法见 WordPress 站点地图提交)。若装了缓存插件,把这个地址加入缓存排除规则。
步骤 4:提交到百度。 登录百度搜索资源平台,进入「资源提交 – 视频提交」,按提示添加视频 sitemap 地址。提交后可在同一模块查看处理状态与视频收录量。
步骤 5:同时输出 VideoObject 标记。 视频页的 head 里补一段 JSON-LD,字段与 sitemap 保持一致:
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "WordPress 视频 sitemap 配置演示",
"description": "演示如何为 WordPress 站点生成并提交视频 sitemap。",
"thumbnailUrl": ["https://mimangfei.com/wp-content/uploads/2026/10/video-cover.jpg"],
"uploadDate": "2026-10-11T09:00:00+08:00",
"duration": "PT8M30S",
"contentUrl": "https://mimangfei.com/video/wp-video-sitemap/"
}
步骤 6:封面图与可播放性检查。 封面图必须是能公开访问的静态图片地址,不能用登录才能看的图床;播放页要在不登录、不执行复杂 JS 的情况下能拿到视频信息,否则即使提交了也会被判为无效资源。
常见踩坑
- 用 iframe 嵌入第三方播放器,播放页 URL 填的是第三方域名,百度无法确认归属。
- 封面图用了防盗链,百度抓取时返回 403。
- sitemap 里 duration 填成”08:30″这种格式,不符合秒数规范。
- 视频页面本身是
noindex,自己把入口堵死了。 - 生成 sitemap 的查询没有排除未发布草稿,把测试视频提交出去。
- 案例: 某站用缓存插件把
/video-sitemap.xml缓存成了 HTML 错误页,百度连续三周抓取失败,视频提交状态一直是「处理中」。排查时用curl -I才发现 Content-Type 是 text/html,最后把该路径加入缓存排除才恢复。 - 只提交 sitemap,不在页面做任何标记,导致视频与页面关联弱。
- 一次性提交上万条但视频质量低,反而拉低整站视频的处理优先级。
总结
视频提交的顺序是:先把字段结构化存起来 → 生成可公开访问的 sitemap → 提交到搜索资源平台 → 页面补 VideoObject 标记 → 检查封面图和播放页可访问性。这五步里最容易出问题的是缓存插件把 XML 变成 HTML,以及封面图防盗链。做完这些再谈展现形式,别急着追问为什么还没出视频卡片。可配合 百度搜索富媒体展现 一起排查。
