JSON-LD Article 标记怎么写:字段清单、代码模板与验证方法 — 答流 AIGeoFlow · GEO 实战指南
JSON-LD Article 标记写在文章页 HTML 的 <script type="application/ld+json"> 中,用 Article、BlogPosting 或 NewsArticle 类型声明 headline、image、datePublished、dateModified、author 五个必填字段,取值须与页面可见内容一致;写完用 Rich Results Test 验证,再以 Search Console 文章报告确认生效。
Article 标记的作用与类型选择
JSON-LD 是 schema.org 词表的一种序列化方式,通过 <script type="application/ld+json"> 标签把页面实体写成内嵌 JSON。对文章页来说,它把标题、作者、时间、配图这些散落在 HTML 各处的信息,收敛成机器可无歧义读取的键值结构。Google、Bing 以及各家 AI 爬虫抓取页面时,解析这段 JSON 的成本远低于从自由文本里猜测。
选型先看继承链:Article 继承自 CreativeWork,NewsArticle 与 BlogPosting 又继承自 Article。Google 文章富结果同时接受这三个类型。实际规则很直接:新闻站或时政内容用 NewsArticle,这是 Google News 与 Top Stories 场景的约定类型;普通博客、企业内容页用 BlogPosting;拿不准就用父类型 Article 兜底——子类型语义缺失时,解析器会向上继承处理,不会因此丧失富结果资格。
要管理好预期:Google 从未把结构化数据列为直接排名因素。它的价值是让引擎更准确地抽取标题、作者与时间,从而稳定搜索结果里展示的文章名、发布日期与缩略图,解决的是「被正确理解」而非「排名靠前」。判断标记是否生效的唯一权威标准是 Search Console「增强功能」报告出现文章项且状态为有效,而不是肉眼猜测或第三方工具打分。若同站同时存在多种内容形态,按内容逐页选类型,不必全站统一。
必填字段与推荐字段逐项核对
对照 Google 文章结构化数据文档,以下字段为必填,缺失任意一个都会导致富结果判定不合格:
- headline:文章标题。与 <title>、H1 保持一致或高度相关;Google 曾在文档中要求控制在 110 个字符以内,超长可能被截断展示。
- image:图片 URL,可传数组。官方建议提供高分辨率多比例图,宽×高乘积不少于 50,000 像素,覆盖 16:9、4:3、1:1 三种比例,且 URL 必须是可被抓取的绝对地址。
- datePublished 与 dateModified:ISO 8601 格式,必须带时区偏移,例如 2026-09-15T09:30:00+08:00。
- author:至少含 name。个人署名用 @type 为 Person,机构署名用 Organization。
推荐补充这些字段:
- author.url:指向作者介绍页的完整 URL,帮助引擎关联作者实体。
- mainEntityOfPage:用 @id 指向本页 canonical URL,声明这个页面的主体就是这篇文章。
- description:摘要文本。
- inLanguage:中文站点填 zh-CN。
- publisher:含 name 与 logo(ImageObject),新闻场景与 AMP 时代曾是硬性要求,普通页面建议保留。
- isAccessibleForFree、articleSection、wordCount:合法属性,不影响富结果判定,按需添加。
一个高频坑:所有 URL——页面地址、图片、作者页、logo——都必须是带协议的绝对地址。相对路径如 /images/cover.jpg 在部分解析器里会被直接丢弃且不报错,只能靠富结果测试的警告或人工 view-source 发现。
完整可复制的 Article 代码模板
以下模板覆盖上文全部必填与推荐字段,替换成真实值后可直接粘贴到文章页 HTML 的 <head> 内(放在 body 里也能解析,位置不影响结果):
{
"@context": "https://schema.org",
"@type": "Article",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://www.example.com/blog/json-ld-guide"
},
"headline": "JSON-LD Article 标记完整指南",
"description": "本文讲解 Article 结构化数据的字段选择、代码写法与验证方法。",
"image": [
"https://www.example.com/images/cover-16x9-1200.jpg",
"https://www.example.com/images/cover-4x3.jpg",
"https://www.example.com/images/cover-1x1.jpg"
],
"datePublished": "2026-09-15T09:30:00+08:00",
"dateModified": "2026-09-18T14:20:00+08:00",
"author": {
"@type": "Person",
"name": "张伟",
"url": "https://www.example.com/authors/zhangwei"
},
"publisher": {
"@type": "Organization",
"name": "Example 出品",
"logo": {
"@type": "ImageObject",
"url": "https://www.example.com/logo.png"
}
},
"inLanguage": "zh-CN",
"articleSection": "技术 SEO",
"isAccessibleForFree": true
}
嵌入页面的最小写法:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "示例文章标题",
"datePublished": "2026-09-15T09:30:00+08:00"
}
</script>
三点注意:第一,datePublished 与 dateModified 的时区偏移要与站点真实时区一致,中文站通常写 +08:00。第二,headline 面向用户展示优先于面向爬虫,不要写成关键词堆砌版本。第三,WordPress 用户先用浏览器 view-source 搜索 ld+json,确认主题或 SEO 插件是否已输出过一套 Article 标记;两套并存不一定报错,但字段值冲突时解析结果不可控,保留一套即可。
日期与作者字段的高频错误
这两个字段贡献了大多数无效标记,逐条排查:
日期类错误:
- 缺时区。写成 2026-09-15T09:30:00 而没有 +08:00,不同解析器会按 UTC 或服务器本地时间处理,搜索结果里的日期可能整体偏移一天。正确写法是 2026-09-15T09:30:00+08:00。
- 未来时间。datePublished 晚于当前时间会被判定异常,常见于定时发布插件把计划发布时间当成已发布时间输出。
- dateModified 早于 datePublished。逻辑矛盾,直接触发警告。
- 每天自动刷新 dateModified。Google 明确提醒该字段应反映实质性内容修改,无实质改动却每天更新属于时间操纵信号。原则:更新数据、结论或大段正文才改 dateModified,改错别字可改可不改,并在页面可见位置同步标注。
作者类错误:
- author 写成纯字符串。schema.org 允许 Text 类型,但富结果测试要求 name 挂在对象里,正确结构是 @type 加 name。
- author.url 用相对路径或指向首页,应指向稳定、可访问的作者介绍页。
- 页面可见署名与 JSON-LD 不一致,例如页面署名「本站编辑」而标记里写具体人名。
多作者场景用数组,顺序即展示顺序:
"author": [
{ "@type": "Person", "name": "张伟", "url": "https://www.example.com/authors/zhangwei" },
{ "@type": "Person", "name": "李娜" }
]
修复后回到 Rich Results Test 重跑一次,确认错误清零;Search Console 的文章报告通常需要数天到两周才反映变更,期间不要反复改结构。
验证流程:三个工具加一条命令
上线前和上线后各验一次,流程固定:
1. Rich Results Test(search.google.com/test/rich-results)。粘贴 URL 或直接粘贴 JSON 代码,看两层数据:顶部是否检测到文章富结果;下方逐字段列出 error 与 warning。error 意味着不合格、拿不到富结果;warning 意味着可上线但缺推荐项。优先清 error,warning 逐步补齐。 2. Schema Markup Validator(validator.schema.org)。它只校验 schema.org 语法,不管富结果资格,能查出类型嵌套错误、非法属性名这类 Rich Results Test 不报的问题。 3. Search Console「增强功能 → 文章」报告。看有效、有效但有警告、无效三档数量趋势,这是唯一反映 Google 真实抓取后判定结果的工具,数据有数天延迟。
本地或 CI 里先做语法层校验,把明显错误挡在上游:
# 校验 JSON 语法,非法会直接报错并指出行号
jq . article.json > /dev/null && echo "JSON OK"
# 快速核对关键字段是否齐全
jq '{headline, datePublished, dateModified, author}' article.json
# 确认线上页面确实输出了 JSON-LD(返回值应 ≥ 1)
curl -s https://www.example.com/blog/json-ld-guide | grep -c 'application/ld+json'
最后一个动作别省:浏览器打开 view-source,确认 JSON-LD 存在于原始 HTML,而不是靠前端 JS 动态注入。Google 会执行渲染,但不少爬虫不跑 JS,注入式标记对它们等于不存在。
常见失败模式与排查清单
按出现频率从高到低:
- JSON 解析失败。三大元凶:多余的尾逗号、字符串内未转义的双引号、从 Word 粘贴带入的中文引号。Rich Results Test 会直接标 JSON parse error 并给出行号,jq 也能在本地复现定位。
- 图片 404 或被 robots.txt 屏蔽。标记里的图片 URL 同样要能被抓取,用 curl -I 图片地址 确认返回 200 且未被 Disallow。
- 两套标记并存。主题输出 microdata、插件再输出 JSON-LD,字段值不一致时解析结果不可控。view-source 里分别搜 ld+json 和 itemprop 各查一遍。
- 边缘层拦截爬虫。这一步与标记本身无关但最隐蔽:我们实测,Cloudflare 对新接入站点默认启用 Block AI bots,会在边缘直接拒绝 GPTBot、ClaudeBot、Bytespider 等,且与 robots.txt 无关。排查方法是查服务器或 CDN 日志里这些 UA 的请求是否返回 403。
- 标记合格但迟迟不收录。我们实测,一个新域名上线 13 天、发布 53 篇内容,Bing 与 Google 的 site: 查询仍为零结果,索引建立明显滞后于抓取。JSON-LD 不解决收录问题,收录取决于抓取预算与外链。
- 用前台统计判断爬虫。我们实测,伪装成浏览器 UA 的爬虫约占原始「人类」访问的 96%,加装 JS 信标后才能分离真实访客。评估爬虫是否来过,一律以服务器日志为准。
排查顺序建议固定:语法、字段完整性、资源可达性、边缘拦截、日志确认,五步走完,绝大多数无效标记都能定位到具体环节。
结构化数据对 AI 搜索引擎意味着什么
JSON-LD 最初的消费方是搜索引擎富结果,现在多了一层:AI 搜索引擎的爬虫。我们自己站点的实测能说明它们的节奏:GPTBot 在站点上线后第 4 天完成全站 24 页抓取,此后每日 17:20–17:40 固定巡检 sitemap;Meta-ExternalAgent 会在新文章发布当天抓取,最快间隔约 2 小时。爬虫来得快,意味着标记错误也会被快速固化成机器对站点的理解。
需要诚实说明:OpenAI、Perplexity 等官方从未公布其管道是否直接消费 JSON-LD,这一点无法验证,只能通过引用结果反推。但结构化数据的工程逻辑是普适的——它把标题、作者、日期、事实以三元组形式写死在 HTML 里,任何抽取器的容错成本都低于解析自由文本。对希望被 AI 引用为答案来源的内容,这是边际成本最低的一项改造。
主动发现层面,向 IndexNow 推送 URL 有可观测效果:我们实测推送 43 个 URL 后返回 HTTP 202,次日 YandexBot 首次到访。IndexNow 对 Bing 与 Yandex 生效,对 Google 无效。
如果不想自建诊断、接入、监测这一整条链路,答流 AIGeoFlow 提供从 AI 可见性诊断、零改造技术接入到内容矩阵与引用监测的全栈交付,附技术就绪度与内容就绪度双维度免费评分——不承诺保证被 AI 推荐,只承诺可验证的硬指标。
常见问题
- BlogPosting、NewsArticle 和 Article 应该选哪个?
- 看内容性质。新闻站或时政内容选 NewsArticle,这是 Google News 与 Top Stories 场景的约定类型;普通博客与企业内容选 BlogPosting;拿不准就用父类型 Article。三者都在 Google 文章富结果接受范围内,子类型缺失的属性会向上继承,不会因用父类型而丧失资格。
- headline 超过 110 个字符会怎样?
- Google 曾在文档中要求 headline 不超过 110 个字符,超出时富结果里的标题可能被截断,但不会直接判定无效。中文一个汉字计一个字符,写标题时把核心信息放在前 110 字符内即可。headline 应与页面 H1 一致或高度相关,不要写成关键词堆砌版本。
- dateModified 每天自动更新会更好吗?
- 不会,反而有风险。Google 明确表示该字段应反映实质性内容修改,无实质改动却每天刷新属于时间操纵信号。原则是:更新数据、结论或大段正文时才改 dateModified,并同步在页面可见位置标注更新时间,保持标记与页面信息一致。
- 一个页面可以放多段 JSON-LD 吗?
- 可以。多段 <script type="application/ld+json"> 会被视为同一数据图合并,也可以用 @graph 把 Article、BreadcrumbList、Organization 写进一段脚本。前提是各段字段不冲突——同一页面出现两个不同的 datePublished 值时,解析结果不可控。
- JSON-LD 能提升排名或加快收录吗?
- 都不能直接实现。Google 从未把结构化数据列为排名因素,其作用是让标题、作者、时间被准确抽取并稳定展示;收录取决于抓取与索引机制。我们实测新域名 13 天发布 53 篇内容、标记全部合格,site: 查询仍为零结果,索引明显滞后于抓取。