这类问题我又碰上了一次。视频页的 VideoObject 里 duration 写的是 90,富媒体测试提示时长格式无效,同一批页面里写 PT1M30S 的能通过,写纯数字的全部报错。

第一反应是「超过一小时的视频没写小时位,解析失败」,验证下来不成立。

原因不止一个,得分开看。duration 要求 ISO 8601 时长格式,纯秒数不被接受;写成 1:30 这种冒号格式同样不合法;duration 与 contentDuration 字段混用。

动手时先看页面里 duration 的写法

curl -s https://www.example.com/v/1 | grep -o 'duration[^,]*'

然后换算成 ISO 8601 格式

python -c "print('PT%dM%dS' % (90//60, 90%60))"

随后在模板里统一输出

grep -rn 'duration' templates/video.html

复查富媒体状态

curl -s 'https://search.google.com/test/rich-results?url=https://www.example.com/v/1' | grep -c 'VideoObject'

改之前我把相关日志按时间截了一段存着,事后对时间线用得上。

中途换过一次思路,把范围缩到最小的那一层,反而快了。

中间停过一次,把已经改的东西回滚干净,再重新来一遍。

恢复的判定其实很直接。duration 输出 PT1M30S,视频类富媒体错误清零,搜索结果里出现带时长的视频缩略。

ISO 8601 时长只写需要的位,90 秒写成 PT1M30S,别写成带零小时的多余形式。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189