如何解决使用 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
、itemscope
和 itemprop
属性)输出的 FAQ 标记中。
一些想法:
-
在页面的头部添加一个 Sling 模型。查询所有 FAQ 组件并生成 JSON+LD 数据。 Sling Model 只输出字符串
-
创建一个常见问题容器,您可以在其中放置每个常见问题组件。 FAQWrapper Sling Model 生成 JSON+LD 同上
另外,一些建议:
- 在 Java 中生成 JSON,而不是在 JSP 本身中。
- 找一个为你生成schema的java库,否则很容易出错,生成无效数据。我们基于 Lombok SuperBuilder、Delegate 和 Jackson 实施了我们自己的解决方案,而且工作量很大
- 虽然 google 建议使用 JSON+LD,但我已经看到网站使用微格式并且运行良好,因此请考虑 Raphael 的建议。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。