播放器用 MediaSource 把 m3u8 拼成 blob: 地址塞给 video 标签,用户能正常看,视频搜索里一条都没有,VideoObject 也一直报缺 contentUrl。
一开始怀疑是「VideoObject 里的 contentUrl 填了 blob 串,被判无效」,查了一圈,方向不对。
排查方向其实有限,先把可能性排一排。blob 地址只在当前会话有效,蜘蛛解析不到真实文件。还有一种是播放列表和分片地址没有写进页面,抓取时无从发现。
还有一种情况,视频页没有独立可访问的 mp4 或 m3u8 兜底地址。
第一件事是确认页面里的视频地址形态
curl -s https://www.example.com/video/1/ | grep -Eo '(blob:|https?://[^" ]+m3u8)'
直接请求分片清单看是否公开
curl -sI https://cdn.example.com/video/1/index.m3u8
接着在 VideoObject 里写真实文件地址
SELECT ID FROM wp_posts WHERE post_type='video';
给播放器加 noscript 兜底链接
curl -s https://www.example.com/video/1/ | grep -c '<video'
这类改动我都写进变更记录,过两周再出问题时能对上号。
改完先别撤,确认这几项。视频页源码里出现可访问的 m3u8 与 mp4 地址,GSC 的视频索引从零涨到两百多条,视频 tab 开始有展现。
blob 只是浏览器的内存视图,不是资源地址,结构化数据里必须给蜘蛛一个能直接下载的文件。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
