recipe结构化数据必须用recipe类型,且name、recipeingredient、recipeinstructions为强制字段:name须为非空字符串,recipeingredient须为字符串数组,recipeinstructions须为字符串或howtostep对象数组;image需绝对url且支持cors,nutrition字段名须严格匹配schema.org定义。

Recipe结构化数据必须用Recipe类型,且至少包含name、recipeIngredient、recipeInstructions三个字段,否则Google Rich Results Test会直接报“Missing field”,富摘要不会触发。
Recipe必需字段怎么填才不被忽略
Google对Recipe的校验非常严格:缺任意一个标*的必填项,整个标记就失效。不是“建议填”,是“不填=没用”。
-
name:必须是字符串,不能是空或仅空格;常见错误是动态渲染时变量为空导致"name": "" -
recipeIngredient:必须是字符串数组(不是单个字符串),每项是一条原料,如["2个鸡蛋", "100g面粉"];写成对象或带HTML标签会解析失败 -
recipeInstructions:必须是HowToStep对象数组或字符串数组;若用字符串数组,每项应为完整步骤句(如"将蛋液倒入平底锅");若用HowToStep,每个对象必须含text字段 - 日期类字段(如
datePublished)虽非强制,但漏掉会影响富摘要稳定性;建议统一用ISO 8601格式:"2026-05-08"或"2026-05-08T09:00:00+08:00"
图片和营养信息怎么加才生效
image和nutrition属于高价值可选字段,加对了能显著提升富摘要点击率,但错一点就白费。
-
image必须是绝对URL,返回HTTP 200且支持CORS;相对路径(如"./img/pancake.jpg")或本地file://地址无效 - 推荐提供多个尺寸图片,用数组形式:
["https://example.com/pancake-400w.jpg", "https://example.com/pancake-800w.jpg"] -
nutrition必须是对象,且内部字段名要完全匹配schema.org定义:用calories(不是calorie)、proteinContent(不是protein)、fatContent等;单位必须带空格和字母,如"250 kcal"、"8 g" - 如果后端用PHP生成JSON,务必用
json_encode()序列化nutrition对象,别手拼字符串——"\"calories\": \"250 kcal\""这种容易引号错乱
JSON-LD写在哪?动态页面特别注意什么
必须放在内,且<script type="application/ld+json"></script>不能嵌套在其他<script></script>中,也不能由JS动态创建并appendChild。
- React/Vue项目里,别在
useEffect或mounted钩子里生成并插入script标签——爬虫只读首屏HTML,看不到JS运行后的结果 - 服务端渲染(SSR)或静态站点生成(SSG)时,确保该script块在初始HTML响应中就存在;Next.js可用
Head组件,Nuxt可用head()配置 - 避免把多个Schema塞进一个
<script></script>里还用逗号分隔;正确做法是用JSON数组包多个对象,或拆成多个独立<script></script>块 - 测试前先用Google URL Inspection Tool粘贴完整HTML源码,而不是只测JS渲染后的DOM——后者根本没意义
最容易被忽略的是recipeIngredient和recipeInstructions的数据结构类型:它们看起来像随便填的列表,实则必须严格符合JSON数组语法,且内容不能含未转义的双引号或换行符——模板引擎里直接插变量时,这点一崩全崩。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











