我很好奇将JSON-LD应用到schema.org的网站上的最佳做法。


如果我有一个包含文章的页面
我还想在我的页面上定义 WebSite
,我会这样:
< script type = “应用程序/ LD + JSON” >
 {
 “@context”:“http://schema.org”,
 “@type”:“网站”,
 “url”:“http://www.example.com/”,
 “potentialAction”:{
 “@type”:“SearchAction”,
 “target”:“http://www.example.com/search?&q={query}",
“query-input”:“required”
 }
}
< / script>

<! - ... - >

< script type =“application / ld + JSON“>
 {
 “@context”:“http://schema.org”,
 “@type”:“文章”,
 “作者”:“John Doe”,
 “interactionCount”:[
 “UserTweets:1203”,
 “UserComments:78” 
 ],
 “名称”:“如何打结礁结”
}
< / script>



 是这是对还是错?是否有任何好处或需要将它们合并到相同的脚本或项目数组中?

答案 0 :(得分:45)
拥有单个或多个数据块没有任何好处,除了有关如何在您的网站中存储和管理架构数据的限制。
例如,如果您网站中的不同组件负责独立生成每个数据块,则可能需要将它们分开。或者,如果您的网站能够在一个地方管理一个页面的所有模式,则管理单个数据块并将其呈现为单个script
元素可能更简单。
您可以将每个架构列为一个数组,将它们组合成一个脚本:
<script type="application/ld+json">
[
{
"@context": "http://schema.org",
"@type": "WebSite",
"url": "http://www.example.com/",
"potentialAction": {
"@type": "SearchAction",
"target": "http://www.example.com/search?&q={query}",
"query-input": "required"
}
},
{
"@context": "http://schema.org",
"@type": "Article",
"author": "John Doe",
"interactionCount": [
"UserTweets:1203",
"UserComments:78"
],
"name": "How to Tie a Reef Knot"
}
]
</script>
答案 1 :(得分:41)
这是有效的。您可以拥有任意数量的数据块(= script
元素)。
仅使用一个@id
元素可能带来的好处:它可以让您更轻松地建立多个项目之间的关系(例如,如果您决定使用hasPart
或mainEntity
)必须嵌套物品。
但是,当使用单独的数据块时,通过使用@graph
(thanks, @ Gregg Kellogg)引用项目的URI,当然也可以建立这些关系。
(作为参考,<html>
<head>
<script type="text/javascript">
var xmlhttp = new Array;
var url = new Array;
// Create 3 instances.
for (var i = 0; i < 3; i++) {
xmlhttp[i] = new XMLHttpRequest;
}
var arr = ["ONE", "TWO", "THREE", "FOUR", "FIVE"];
// function which will run
// on button click.
function Run() {
var url1 = "test.php?w1=" + arr;
var url2 = "test1.php?w1=" + arr;
var url3 = "test2.php?w1=" + arr;
url = [url1, url2, url3];
for (var i = 0; i < 3; i++) {
xmlhttp[i].open("GET", url[i]);
xmlhttp[i].onreadystatechange = function() {
if (this.readyState == 4) {
document.write(this.responseText);
}
}
xmlhttp[i].send(null);
}
}
</script>
</head>
<body>
<input type="button" id="upload" value="RUN" onclick="Run();" />
<body>
</html>
可以使用adding two or more top-level items in a single script
。)