微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 JavaScript 生成结构化数据

如何解决使用 JavaScript 生成结构化数据

我们需要编写一个脚本来为 JSP 中的一个组件的结构化数据创建一个 JSON-LD 脚本,比如说 FAQ 组件,我们已经编写了一个脚本来为结构化数据生成 JSON LD,

常见问题.jsp:

<script type="application/ld+json">
{
    "@context": "https://schema.org","type": "FAQPage","mainEntity": [
    <c:forEach var='questionItem' items='${faq.faqQuestionList}' varStatus='itemsLoopSchema'>
    {
    <c:set var="trimmedAnswer" value="${fn:trim(questionItem.answer)}" />
    "@type": "Question","name": "${questionItem.question}","acceptedAnswer": {
    "@type": "Answer","text": "${fn:escapeXml(trimmedAnswer)}"
    }
    <c:choose>
        <c:when test="${itemsLoopSchema.last}">
            }
        </c:when>
        <c:otherwise>
            },</c:otherwise>
    </c:choose>
</c:forEach>
    ]
}
</script>

现在当这个 JSP 组件包含多次时,脚本将多次运行并创建多个 JSON

相反,我想加载所有多个 FAQ 组件,然后创建 JSON(或只运行一次脚本)。 单个 JSON LD,其中包含多个 faq.jsp 的所有详细信息

*限制脚本运行一次并在JSP中出于SEO目的以JSON获取所有页面DOM的数据

解决方法

我知道这可能不是您要找的答案,但在同一页面上有多个 json+ld 块是完全有效的,即使它们是相同的类型。

此外,我建议将结构化数据内联到您使用微格式(使用 vers="2.7.0" sed -i "\$a\$config['version'] = \"v$vers\";" configfile itemscopeitemprop 属性)输出的 FAQ 标记中。

,

一些想法:

  1. 在页面的头部添加一个 Sling 模型。查询所有 FAQ 组件并生成 JSON+LD 数据。 Sling Model 只输出字符串

  2. 创建一个常见问题容器,您可以在其中放置每个常见问题组件。 FAQWrapper Sling Model 生成 JSON+LD 同上

另外,一些建议:

  1. 在 Java 中生成 JSON,而不是在 JSP 本身中。
  2. 找一个为你生成schema的java库,否则很容易出错,生成无效数据。我们基于 Lombok SuperBuilder、Delegate 和 Jackson 实施了我们自己的解决方案,而且工作量很大
  3. 虽然 google 建议使用 JSON+LD,但我已经看到网站使用微格式并且运行良好,因此请考虑 Raphael 的建议。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。