问题出现得很突然,日志倒是留得挺全。食谱页的 cookTime 写成 30 分钟,结构化数据测试提示时长格式不符,Recipe 富媒体在搜索里一直不出现,改成 30M 也不行。
刚开始盯着「prepTime 和 cookTime 用了同一段自由文本」,折腾了半个多小时,排掉了。
把日志和配置对完,能解释这个现象的基本就这几处。cookTime 要用 ISO 8601 时长格式,例如 PT30M。也可能是中文单位不在支持范围。
还有一种情况,totalTime 与两者互相冲突,整段被忽略。
第一件事是看当前输出的时长字段
curl -s https://www.example.com/recipe/1/ | Select-String cookTime
随后改成 ISO 8601 时长
echo '<meta itemprop="cookTime" content="PT30M">';
补齐 prepTime 和 totalTime
echo '<meta itemprop="totalTime" content="PT45M">';
复核富媒体状态
curl -s "https://search.google.com/test/rich-results?url=https://www.example.com/recipe/1/" -o /dev/null -w "%{http_code}"
同样的操作我在测试机上先走了一遍,线上只做验证过的部分。
这台环境是别人交接的,不少默认值被动过,只能一项项核。
改完先别撤,确认这几项。三个时长字段都能被解析,富媒体测试通过,食谱页在移动端出现步骤富媒体。
这里还有个坑。时长只认 PnYnMnDTnHnMnS 这套写法,中文和纯数字都不行。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
