JSON-LD 可以异步部署吗?

Posted

技术标签:

【中文标题】JSON-LD 可以异步部署吗?【英文标题】:Can JSON-LD be deployed asynchronously? 【发布时间】:2019-08-12 13:18:43 【问题描述】:

我将 JSON-LD 异步部署到脚本标签中:

var jsonLD = document.createElement('script');
jsonLD.type = 'application/ld+json';
jsonLD.innerhtml = JSON.stringify(
  "@context": "https://json-ld.org/contexts/person.jsonld",
  "@id": "http://dbpedia.org/resource/John_Lennon",
  "name": "John Lennon",
  "born": "1940-10-09",
  "spouse": "http://dbpedia.org/resource/Cynthia_Lennon"
);
document.head.appendChild(jsonLD);

Google's testing tool 在检查 URL 时无法识别任何 JSON-LD。它是否仍会被索引,或者 Google(和其他机器人)是否对异步加载的 JSON-LD 视而不见?

【问题讨论】:

你指的是什么google测试工具?通常没有索引机器人会在他们抓取的网站上执行任何 javascript - 这将包括您在上面使用的脚本 search.google.com/structured-data/testing-tool 【参考方案1】:

测试工具不评估任何 Javascript。相反,您必须将 JSON-LD 硬编码到 HTML 中。这是一个示例 sn-p,该工具可以很好地解析它:

<!DOCTYPE html>
<html>
<head>
  <title></title>
</head>
<body>
  <script type="application/ld+json">
  	
      "@type": "person",
      "@context": "https://json-ld.org/contexts/person.jsonld",
      "@id": "http://dbpedia.org/resource/John_Lennon",
      "name": "John Lennon",
      "born": "1940-10-09",
      "spouse": "http://dbpedia.org/resource/Cynthia_Lennon"
    
  </script>
</body>
</html>

【讨论】:

那么接下来的问题是,测试工具是否表现得像实际的爬虫? JS 注入适用于常规浏览器客户端,因为它已加载,但我不确定爬虫。 大部分机器人不执行JS,但我相信google现在处理一些JS。见this answer for details【参考方案2】:

结构化数据测试工具的渲染能力有限,看起来无法处理您的示例。

Googlebot 使用常青版本的 Chrome 呈现。即它渲染得很好。

一种测试方法是在 Chrome 中查看页面并将其呈现的 HTML 复制到结构化数据测试工具中。然后您可能会看到您的数据。

请注意,大多数机器人此时不会渲染。因此,以这种方式生成 SD 将限制可以查看数据的系统数量。

【讨论】:

以上是关于JSON-LD 可以异步部署吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以删除Yoast添加到我的WordPress网站的JSON-LD架构吗?

用python做web开发,tornado 如何部署,都是用nginx+supervisor吗

是否必须嵌入 JSON-LD?

如何使用Ajax动态更新JSON-LD脚本?

rocketmq集群部署(多master多slave异步)

Azure 存储表访问出现无法解释的异步/等待问题 - 可以使用 ConfigureAwait(false) 解决吗?可能不是