搜索全站
Google SEO 13 分钟阅读

FAQ 结构化数据还能用吗?现状梳理与合规标注写法

Google 已把 FAQ 富媒体结果收缩到政府与医疗类站点,普通网站还要不要标 FAQPage?本文讲清政策变化的真实含义、结构化数据的通用合规底线,以及 WordPress 上只输出一次、且页面必须可见的 FAQPage JSON-LD 写法。

U
UFO_PF 2020-02-01 · 阅读 13 分钟
FA GOOGLE SEO
阅读提示
本文约 4,965 字,预计阅读 13 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:标记全绿,搜索结果却没有任何变化

不少站长最近都遇到同一个落差:页面按照 schema.org 的写法加上了 FAQPage,Rich Results Test 里结构校验一路绿灯,可上线三个月,Google 搜索结果里什么富媒体形态都没出现,Search Console 也看不到任何 FAQ 相关的展示数据。于是有人判断”插件坏了”,有人换插件重标一遍,还有人干脆把标记删掉——这三种反应其实都源于同一个误解:把”结构化数据能被解析”和”Google 会展示对应富媒体结果”当成了同一件事。事实是,自 2023 年 8 月 Google 公开调整政策后,FAQ 富媒体结果的展示范围被大幅收窄,绝大多数网站即使标注完全正确,也不会再拿到 FAQ 的折叠展开形态。但这不等于 FAQPage 标记失去了全部意义,也不等于你可以随便标注。真正需要理清楚的是三件事:政策到底改了什么、标注的合规底线在哪里、以及在 WordPress 上怎么既不多输出又不虚标。

原理分析:展示政策与标记规范是两条独立的线

Google 对结构化数据的处理分两层。第一层是”抓取与理解”:只要你在页面里提供了符合 schema.org 词汇表的 JSON-LD,爬虫就会解析它,用来辅助理解页面实体与段落语义。第二层是”富媒体结果资格”:在某个类型是否配得上一个 UI 形态这件事上,Google 保留完全的政策裁量权,可以随时收紧或下线某一类展示。FAQ 的变化发生在第二层,而不是第一层。

维度 结构化数据标记 富媒体结果展示
决定方 站点自己 Google 政策
是否必须 否 否
变化频率 跟随 schema.org 词汇表,很慢 可单方面公告调整,很快
FAQ 当前状态 可正常标注并被解析 仅限少量权威政府与医疗健康站点展示
出错后果 不影响排名 可能被发手动处罚或在 GSC 报表报错

所以正确的预期管理是:把 FAQPage 当成”给机器补语义”的长期投资,而不是”换一段折叠 UI”的短线手段。而只要你决定保留它,就必须遵守 Google 的通用结构化数据规范,其中与 FAQ 直接相关的三条是:一是被标记的内容必须真实出现在页面上并对用户可见,不能把答案藏在 <details> 折叠区以外的地方或脚本里;二是只能标记自家内容,不能替第三方聚合问答;三是不得用 FAQPage 包装促销文案、虚假评价或与当前页面无关的热门问题——这类做法过去被不少站点当成”蹭富媒体”的手段,现在虽然没有展示收益,却依然可能触发”结构化数据不符合准则”的人工处理措施。明白了这条边界,就可以谈具体写法了。配套的清理顺序可以参考避免结构化数据重复输出的方案。

保姆级实操

第一步:先确认这个页面真的配得上 FAQPage

打开页面,肉眼检查是否存在成段的问答对照:有没有用户真实会问的问题、答案是不是在同一页面上就能读到。如果答案需要跳转、需要点击”查看更多”才从接口拉回来,那就不该标。FAQPage 的主实体是若干 Question,每个 Question 的 acceptedAnswer 文本必须能在页面 DOM 里找到对应文字。

第二步:盘点当前页面已经输出了几个 JSON-LD

很多站点不是没有标记,而是有太多重复标记。用命令行直接抓 HTML 数一下:

curl -sL "https://mimangfei.com/sample-post/" | grep -o 'application/ld+json' | wc -l
curl -sL "https://mimangfei.com/sample-post/" | python -c "import sys,re;print(re.findall(r'\"@type\"\s*:\s*\"(\w+)\"',sys.stdin.read()))"

如果同一个页面里出现了两个 FAQPage(比如 Yoast 生成一份、主题 functions.php 又注入一份),需要先做去重,否则 GSC 会报重复字段冲突。

第三步:写一份合身的 FAQPage JSON-LD

注意几个被忽略的细节:acceptedAnswer 的 text 允许包含有限的 HTML 标签,mainEntity 是数组,@URL 要用绝对地址。

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "@id": "https://mimangfei.com/sample-post/#faq",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "WordPress 站点可以同时使用多个 SEO 插件吗?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "不建议。多个 SEO 插件会在同一个页面重复输出 Organization、WebSite、FAQPage 等 JSON-LD,造成字段冲突与解析歧义。",
        "url": "https://mimangfei.com/sample-post/#faq-1"
      }
    },
    {
      "@type": "Question",
      "name": "FAQPage 标记会影响页面排名吗?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "它帮助 Google 理解页面问答结构,2023 年后不再为普通站点带来折叠式富媒体展示,也不构成直接排名因子。"
      }
    }
  ]
}

第四步:在 WordPress 里按条件输出

不要全站铺开。FAQ 标记只应该出现在确实有问答区的文章页,用 is_singular + 自定义字段做闸门,并用 wp_json_encode 统一转义,避免手写字符串拼接导致的引号炸裂。

add_action( 'wp_head', function () {
    if ( ! is_singular( 'post' ) ) {
        return;
    }
    $faq = get_post_meta( get_the_ID(), '_mimangfei_faq_items', true );
    if ( empty( $faq ) || ! is_array( $faq ) ) {
        return;
    }
    $url = get_permalink() . '#faq';
    $entities = [];
    foreach ( $faq as $i => $row ) {
        $entities[] = [
            '@type'          => 'Question',
            'name'           => wp_strip_all_tags( $row['q'] ),
            'acceptedAnswer' => [
                '@type' => 'Answer',
                'text'  => wp_kses_post( $row['a'] ),
            ],
        ];
    }
    $graph = [
        '@context'   => 'https://schema.org',
        '@type'      => 'FAQPage',
        '@id'        => $url,
        'mainEntity' => $entities,
    ];
    echo '<script type="application/ld+json">' . wp_json_encode( $graph, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES ) . '</script>';
}, 20 );

第五步:校验与长期观测

把 URL 丢进 Rich Results Test,重点不是看有没有”预览窗格”,而是看”检测到的结构化数据类型”里 FAQPage 是否被正确识别、Warnings 里是否出现字段缺失。随后在 Search Console 的富媒体结果区域观察一周,若出现”缺少字段 acceptedAnswer”之类的错误,说明题面与答案至少一个为空。

常见踩坑

  1. 把整个栏目页标成 FAQPage:栏目页主体是文章列表,标 FAQPage 属于”标记内容与页面主旨不符”,是最容易被判违规的一类。
  2. 答案内容与页面可见文字不一致:常见的情形是页面上只写”详见下载文档”,JSON-LD 里却塞了 500 字答案,Google 明确要求两者一致。
  3. 同一个页面堆叠多个 FAQPage:插件和主题双份输出时,Google 可能挑任意一份,甚至因为字段冲突全部忽略。
  4. 翻译站点只标了英文版:多语言站点必须在每个版本各自标注对应语言的问与答,只标一份会被视为内容与语言不匹配。
  5. 为了凑结构把评论区内容当 FAQ:评论区是用户生成内容,质量不可控,且常常不是问答结构,不建议标记。
  6. 案例:某外贸独立站原本给产品页批量挂了 12 条 FAQ,其中 5 条是从竞争对手站点抄来的通用行业问答,页面上压根没有对应文字。调整政策后它没有拿到任何 FAQ 展示,反而在 Search Console 收到”含有违规结构化数据”的通知,要求修正。整改方案是把无关的 5 条删掉,只保留页面本身”如何安装””多久发货”的真问答,两周后该页面的富媒体提醒消失。教训是:政策收紧并不代表监管放松。
  7. 用 rel=canonical 指向别的页面还标 FAQ:被 canonical 排除的页面,其结构化数据一并不被采用,白标。

总结

判断标准很简单:页面上有真实、可见、与本页主题一致的问答区,才考虑 FAQPage;页面上没有,就一个字都别标。至于要不要投入时间去做,取决于你的目的是什么——想拿折叠 UI 的,现在基本可以放弃;想让搜索引擎和 AI 抓取更好地理解页面语义的,值得做,且成本不过几十行 PHP。行动清单:盘点 JSON-LD 输出份数 → 删掉不合主题的问答 → 用 wp_json_encode 单点输出 → Rich Results Test 校验字段 → GSC 观察错误收敛。后续还想扩展富媒体收益,可以转向Product / Offer 结构化数据配置或BreadcrumbList 结构化数据实现这类仍有稳定展示的类型。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。