这类问题我又碰上了一次。视频页的 VideoObject 里 contentUrl 填的是 /hls/index.m3u8,富媒体提示格式不符,测试工具能读到 thumbnailUrl 却拿不到视频,换 embedUrl 也没用。
第一反应是「embedUrl 与 contentUrl 写成了同一个地址」,验证下来不成立。
原因不止一个,得分开看。contentUrl 要指向可直接下载的视频文件,m3u8 只是播放列表;站点只有 HLS 分片,没有保留 mp4 源;duration 缺失,整段视频实体被判不完整。
动手时先看视频字段的取值
curl -s https://www.example.com/video/1/ | Select-String "contentUrl|embedUrl"
随后把 mp4 源填进 contentUrl
echo '<meta itemprop="contentUrl" content="https://www.example.com/v/1.mp4">';
embedUrl 指向播放页
echo '<meta itemprop="embedUrl" content="https://www.example.com/video/1/">';
补齐 duration 后复核
curl -s "https://search.google.com/test/rich-results?url=https://www.example.com/video/1/" -o /dev/null -w "%{http_code}"
中途换过一次思路,把范围缩到最小的那一层,反而快了。
中间停过一次,把已经改的东西回滚干净,再重新来一遍。
同样的操作我在测试机上先走了一遍,线上只做验证过的部分。
怎么算真的好了,看的是同一批现象。contentUrl 指向可访问的 mp4,embedUrl 指向播放页,富媒体测试显示视频项有效。
提醒一点。m3u8 只能用于播放,不能当 contentUrl,视频至少要保留一份 mp4 源。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
