同一页出现两段结构化数据,多数情况下不是 bug,但你需要先分清是哪一种情况,因为处理方式完全不同。一页里有多段不同类型的标记是官方认可的组合,一页里有两段同类型标记才是要清理的对象。而这两种情况在后台界面上看起来一模一样,都只是"head 里有几段 JSON"。
先分清三种情况,只有一种要修
WordPress 插件开发手册对钩子机制的说明里,钩子是一个插件与 WordPress 交互的方式;WordPress 主题开发手册里,经典主题靠 PHP 函数、钩子和过滤器输出,区块主题由区块加主题配置文件组成。两边都往同一处挂钩子,于是同一段头部内容可能被多方追加——这是机制决定的,不是谁的错。
要区分的是这三类:
- 要修:同类型重复。同一页出现两个
Article,或两个WebSite描述同一件事。官方在站点名称那页给出的处理方式很明确:已有WebSite标记时,把站点名称属性嵌在同一个节点里,尽量不要再另起一个WebSite块。同理,别让主题和插件各写一个Article。 - 不用修:不同类型共存。一个商品页同时有
Product、BreadcrumbList、VideoObject,是结构化数据总则里"一页多内容"的正常形态。总则要求的是:把反映页面主用途的主类型标出来,其余可作为独立块并存;块之间有关联时用@id把它们连起来,说明谁关于谁。 - 先别动:本来就只有一段。如果源码里只有一段标记,就不是重复问题,往下看字段对不对、可见内容有没有,而不是继续找"第二份"。
四种重复输出的典型形态
- 主题输出 + SEO 类插件输出。最常见的一类,两边都提供了结构化数据开关。
- 主题输出 + 商店组件输出。商品页上主题模板与商店组件各写一段
Product,字段集合还不一样。 - 两个主题都挂上。父主题与子主题、或换过的旧主题残留文件仍被加载。
- 同一来源在不同模板不一致。文章页有标记、分类页没有,或者文章页写了
headline而分页页漏了日期。站内 WordPress SEO 与性能优化的 10 款工具那篇讲过,这类重叠最常见的后果就是同一段标记输出两遍。
排查顺序:五步定位到具体来源
第一步,固定变量。选一个真实 URL,固定一个身份(未登录),固定一个页面类型(先看文章页,再看分类页与商品页)。每次只改一个东西,否则你无法归因。
第二步,数段落、看类型。打开渲染后的页面源码,数 application/ld+json 段数,逐段看 @type。数量对不上是重复,类型分布是组合——这两件事要分开看。
第三步,从最容易关的开始停。先停插件、后改主题设置,最后才动代码文件,顺序反了会让你在主题改动上白花时间。停一个、看一次、记一次。
第四步,按输出特征认人。不同来源的字段组合、@id 写法、@graph 嵌套习惯都不一样。主题与插件各自的设置项里通常也有"结构化数据"开关,那是最快的确认方式——先读官方文档确认功能名,不要凭印象猜开关在哪。
第五步,定一个唯一负责方。剩下的那个来源承担全部输出,另一个关掉。同类型只留一份,不同类型按总则的方式并存,需要关联时用 @id。改动前先备份,主题改动要放到子主题里;具体分工尺度可以看站内 WordPress 为什么便于做 SEO:5 项优势及使用条件。

哪些重复不用管
- 同页多种不同类型。官方在总则里专门讲了这一点:一页可以有配方、视频与面包屑等多种内容,标记全部标上能让系统更完整地理解这一页。判断标准是主类型是否明确,其余是否为独立块。
- 用
@id关联的嵌套与并列。总则说明,当页面上的项目彼此相关(例如一个配方和它的视频)时,用@id在多个块里指定关联,否则系统可能看不出它们指向同一件事。 - 重复页上同样的标记。总则建议同一内容的每个重复页都放上相同标记,而不是只放在规范页上——这种"看起来重复"是要保留的。
怎么验证:改完和改之前都要看数据
改完先在工具层核对:富媒体结果测试工具能抓出大部分技术性错误,关键错误必须修掉。但要清楚它查不出指南类问题——总则明确说标记在工具查不出的细节上不准确也是不采用的原因之一,所以你只能用它排除语法与必填项,不能用它证明标记是对的。
再看 Search Console 里的状态报告趋势,官方给的判断口径是:有效项上升、无效项不上升。清理重复输出之后,理想情况是无效项不变、有效项不变或略升;如果你关掉一个来源之后有效项反而掉了,说明那个来源原本在补某个必需的字段——回去看被关掉的那段,补齐再关。
把改前改后的页面源码各存一份对比,比只看工具输出更可靠。改完之后用 URL 检查工具看 Google 眼里的版本,确认可抓取、无 noindex,再请求重新抓取,并给系统留出处理时间;官方提醒过这类改动可能需要几天到几周才在报告上体现出来,WordPress 站内搜索页被收录:先查 noindex 有没有真正输出那篇讲的也是这个次序——先确认输出,再讨论数据。