报错是这么冒出来的。工具站给下载页加了 SoftwareApplication,测试工具报 Missing field operatingSystem,但源码里写着 operatingSystem 为 Windows 加 macOS,两个平台用逗号拼在一个字符串里。试过拆成两个字段,重复键被后者覆盖。

中间走过弯路,把「offers 里没有 price,应用实体被认为不可用」当成主因,改完现象没变。

排查方向其实有限,先把可能性排一排。这个字段接受字符串或数组,逗号拼接仍被当成单个值而判缺失。也可能是标了子类型却漏掉父类型的必填字段,整块实体不完整。

不容易想到的是,主题的压缩插件改写了引号,JSON-LD 解析直接失败。

第一件事是看线上字段原样

curl -s https://tools.example.com/app | grep -o '"operatingSystem":[^,}]*'

然后改成数组写法

"operatingSystem": ["Windows 11", "macOS 14"]

补一个免费的 offers

"offers":{"@type":"Offer","price":"0","priceCurrency":"CNY"}

整段取出来做语法校验

curl -s https://tools.example.com/app | sed -n '/application\/ld+json/,/<\/script>/p' | tail -n +2 | head -n -1 | python -m json.tool

恢复的判定其实很直接。测试工具不再报缺字段,应用实体能带价格和评分展示,增强功能里的有效项从零变成全量。

这里还有个坑。免费应用的 price 要写 0 而不是省略,省略之后 offers 整块都会被判无效。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189