如果使用 JavaScript 动态构建标记,Schema.org 标记是否有效?
Does Schema.org markup work if markup is dynamically built with JavaScript?
我有一个页面,其中一些事件是通过读取一些 JSON 和 JavaScript 来动态加载的。我使用 Event
Schema.org 标记为每个事件构建一个 div
。
Google 的测试工具不读取此标记。是因为标记错误,还是因为动态加载?
一个Event
的HTML代码是:
<div class="evento well" itemscope itemtype="http://schema.org/Event">
<meta itemprop="startDate" content="2015-03-20T20:00:00.000Z">
<meta itemprop="endDate" content="2015-01-21T20:00:00.000Z">
<div class="dataEvento">
<div class="dayWeekEvento">venerdì</div>
<div class="dayNumEvento">20</div>
<div class="monthEvento">Marzo</div>
</div>
<div class="datiEvento">
<div class="oraEvento">ore 21:00</div>
<div class="titoloEvento"><span itemprop="name">Titolo evento</span></div>
<div class="luogoEvento" itemprop="address" itemscope="" itemtype="http://schema.org/PostalAddress"><a href="https://www.google.it/maps/place/Milano" target="_blank"><span class=" glyphicon glyphicon-map-marker" aria-hidden="true"></span> <span itemprop="addressLocality">Milano</span></a></div>
</div>
</div>
Google’s documentation 只提到如果使用语法 JSON-LD,它们可以使用动态添加的结构化数据:
Also, Google can read JSON-LD data even when it is dynamically injected into the page's contents, such as by Javascript code or embedded "widgets".
这并不一定意味着他们无法阅读其他语法(如 Microdata 或 RDFa),但至少他们没有记录它。
他们的 testing tool 不读它可能意味着也可能不意味着什么(它 可能 是该工具不处理这个但他们的内部系统可以).但是,您的实际标记应该没有问题,因为您可以通过粘贴标记而不是输入 URL.
来轻松地自行测试它
这取决于它是什么类型的标记。来自 Google:
JSON-LD is supported for all Knowledge Graph features, sitelink search boxes, Event Rich Snippets, and Recipe Rich Snippets; Google recommends the use of JSON-LD for those features. For the remaining Rich Snippets types and breadcrumbs, Google recommends the use of microdata or RDFa.
它应该可以工作,但我知道有人报告了测试工具的问题。
如果您在使用 Google 测试工具验证架构标记时遇到问题,您可以使用 JS 创建 json-ld 代码段,如果需要,它还允许您操作数据,例如:
<script>
(function(){
var data = {
"@context": "http://www.schema.org",
...
}
var script = document.createElement('script');
script.type = "application/ld+json";
script.innerHTML = JSON.stringify(data);
document.getElementsByTagName('head')[0].appendChild(script);
})(document);
</script>
我有一个页面,其中一些事件是通过读取一些 JSON 和 JavaScript 来动态加载的。我使用 Event
Schema.org 标记为每个事件构建一个 div
。
Google 的测试工具不读取此标记。是因为标记错误,还是因为动态加载?
一个Event
的HTML代码是:
<div class="evento well" itemscope itemtype="http://schema.org/Event">
<meta itemprop="startDate" content="2015-03-20T20:00:00.000Z">
<meta itemprop="endDate" content="2015-01-21T20:00:00.000Z">
<div class="dataEvento">
<div class="dayWeekEvento">venerdì</div>
<div class="dayNumEvento">20</div>
<div class="monthEvento">Marzo</div>
</div>
<div class="datiEvento">
<div class="oraEvento">ore 21:00</div>
<div class="titoloEvento"><span itemprop="name">Titolo evento</span></div>
<div class="luogoEvento" itemprop="address" itemscope="" itemtype="http://schema.org/PostalAddress"><a href="https://www.google.it/maps/place/Milano" target="_blank"><span class=" glyphicon glyphicon-map-marker" aria-hidden="true"></span> <span itemprop="addressLocality">Milano</span></a></div>
</div>
</div>
Google’s documentation 只提到如果使用语法 JSON-LD,它们可以使用动态添加的结构化数据:
Also, Google can read JSON-LD data even when it is dynamically injected into the page's contents, such as by Javascript code or embedded "widgets".
这并不一定意味着他们无法阅读其他语法(如 Microdata 或 RDFa),但至少他们没有记录它。
他们的 testing tool 不读它可能意味着也可能不意味着什么(它 可能 是该工具不处理这个但他们的内部系统可以).但是,您的实际标记应该没有问题,因为您可以通过粘贴标记而不是输入 URL.
来轻松地自行测试它这取决于它是什么类型的标记。来自 Google:
JSON-LD is supported for all Knowledge Graph features, sitelink search boxes, Event Rich Snippets, and Recipe Rich Snippets; Google recommends the use of JSON-LD for those features. For the remaining Rich Snippets types and breadcrumbs, Google recommends the use of microdata or RDFa.
它应该可以工作,但我知道有人报告了测试工具的问题。
如果您在使用 Google 测试工具验证架构标记时遇到问题,您可以使用 JS 创建 json-ld 代码段,如果需要,它还允许您操作数据,例如:
<script>
(function(){
var data = {
"@context": "http://www.schema.org",
...
}
var script = document.createElement('script');
script.type = "application/ld+json";
script.innerHTML = JSON.stringify(data);
document.getElementsByTagName('head')[0].appendChild(script);
})(document);
</script>