本文约 1,540 字,预计阅读 4 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:同一个页面输出两份 Article 标记
站长常遇到:页面源码里出现两段 application/ld+json,一段来自 Yoast,一段来自主题。Google 不一定报错,但会浪费抓取预算,严重时因字段冲突丢失富媒体。根因是 schema 数据源不唯一。
原理分析:三种来源各自怎么工作
SEO 插件(Yoast、Rank Math、All in One SEO)在 wp_head 钩子里输出完整图谱,覆盖 Article、Breadcrumb、Organization 等;块主题(如 Twenty Twenty-Four)通过 block-template 与 theme.json 配合,在 HTML 里用微数据或自带 JSON-LD;手写方式则是你在 functions.php 用 wp_head 或 wp_footer 钩子 echo 一段 JSON。三者若同时启用,就会叠加。
保姆级实操
方案一,纯插件(推荐新手):装 Rank Math 或 Yoast,后台逐项开启需要的类型,不要再用主题自带的 schema 模块。
// 若主题自带 schema 与插件冲突,可在子主题 functions.php 关闭主题的输出
remove_action( 'wp_head', 'mytheme_output_schema', 10 );
方案二,纯手写(适合定制强需求):禁用插件与主题的 schema,自己输出。
add_action( 'wp_head', function () {
if ( ! is_singular() ) return;
$data = [
'@context' => 'https://schema.org',
'@type' => 'Article',
'headline' => get_the_title(),
'author' => [ '@type' => 'Person', 'name' => get_the_author() ],
];
echo '<script type="application/ld+json">' . wp_json_encode( $data ) . '</script>';
} );
方案三,主题内置:块主题站用 Site Editor 的”模板”里加”文章信息”块,让主题管理 schema,此时关掉插件对应模块。
常见踩坑
- 插件和主题同时开,产生两份标记,GSC 出现”重复字段”警告。
- 手写时忘记
wp_json_encode,直接拼接字符串导致引号转义出错、JSON 非法。 - 案例:某外贸站同时用 Rank Math 和主题自带 Product schema,Google 有时取插件版、有时取主题版,价格时而显示时而消失。最终决定以 Rank Math 为准,子主题里
remove_action掉主题输出,GSC 富媒体报错归零。 - 在
wp_footer输出导致主题脚本已渲染,部分主题解析顺序问题。 - 硬编码作者名,换作者后 JSON 不更新,建议用
get_the_author()动态取。
总结
判断标准:新手用插件、强定制用手写、块主题优先用主题内置,但三者只能留一个数据源。行动清单:先查页面源码有几段 ld+json → 定位多余来源 → remove_action 或后台关闭 → 保留唯一数据源 → GSC 验证。详见避免结构化数据重复输出的方案。
