最佳JSON-LD实践:使用多个<script>元素?

时间:2015-06-09 05:18:37

标签: html5 seo schema.org json-ld

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

&#xA;&#xA;

如果我有一个包含文章的页面我还想在我的页面上定义 WebSite ,我会这样:

&#xA;&#xA;
 &lt; script type = “应用程序/ LD + JSON” &GT;&#XA; {&#XA; “@context”:“http://schema.org”,&#xA; “@type”:“网站”,&#xA; “url”:“http://www.example.com/”,&#xA; “potentialAction”:{&#xA; “@type”:“SearchAction”,&#xA; “target”:“http://www.example.com/search?&q={query}",
 “query-input”:“required”&#xA; }&#xA;}&#xA;&lt; / script&gt;&#xA;&#xA;&lt;! -  ...  - &gt;&#xA;&#xA;&lt; script type =“application / ld + JSON“&GT;&#XA; {&#XA; “@context”:“http://schema.org”,&#xA; “@type”:“文章”,&#xA; “作者”:“John Doe”,&#xA; “interactionCount”:[&#xA; “UserTweets:1203”,&#XA; “UserComments:78” &#XA; ],&#XA; “名称”:“如何打结礁结”&#xA;}&#xA;&lt; / script&gt;&#xA;  
&#xA;&#xA;

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

&#xA;

2 个答案:

答案 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元素可能带来的好处:它可以让您更轻松地建立多个项目之间的关系(例如,如果您决定使用hasPartmainEntity)必须嵌套物品。
但是,当使用单独的数据块时,通过使用@graphthanks, @ 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。)