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