我正在使用Google's Structured Data Testing Tool验证我的架构。此页面是一个很好的示例:https://www.bigmazda.com/new-mazda-cx-9-longwood-fl.html。
我正在上述网站上使用Google跟踪代码管理器。在GTM中,我创建了一个自定义HTML标记,并放置了以下代码:
<script>
(function(){
var schemaData = {
"@context": "http://schema.org/",
"@type": "Product",
"name": "{{schemaName}}",
"image": "{{schemaImage}}",
"description": "{{schemaDescription}}",
"brand": {
"@type": "Thing",
"name": "{{schemaBrandName}}"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "{{schemaRatingValue}}",
"reviewCount": "{{schemaReviewCount}}",
},
"offers": {
"@type": "Offer",
"priceCurrency": "USD",
"price": "{{schemaPrice}}",
"itemCondition": "http://schema.org/NewCondition",
"availability": "http://schema.org/InStock",
"seller": {
"@type": "Organization",
"name": "{{schemaSellerName}}"
}
}
}
var script = document.createElement('script');
script.type = "application/ld+json";
script.innerHTML = JSON.stringify(schemaData);
document.getElementsByTagName('head')[0].appendChild(script);
})(document);
</script>
我还在相同的自定义HTML中启用了“ Support document.write”。
上面的代码具有八个GTM变量,但以下四个给我带来麻烦:
{{schemaRatingValue}}
{{schemaReviewCount}}
{{schemaPrice}}
{{schemaName}}
注意:我对其他四个变量都很好,它们正在使用结构化数据测试工具进行验证。
对于上述每个项目,这就是我在GTM中使用自定义JavaScript变量来获取每个值的方式:
function(){
var schemaRatingValue = Number(document.getElementsByClassName('model-review')[0].innerText.split(" ")[1]);
return schemaRatingValue;
}
function(){
var review = document.getElementsByClassName('model-review')[0].innerText.split(" ")[2].replace(/[{()}]/g, '');
var schemaReviewCount = Number(review);
return schemaReviewCount;
}
function(){
var schemaPrice = Number(document.getElementsByClassName('mrPriceRange')[0].innerText.split(" ")[0].replace(/[$,]+/g, ''));
return schemaPrice;
}
function() {
var schemaName = document.getElementsByTagName('h1')[0].getElementsByTagName('span')[0].innerText;
return schemaName;
}
使用GTM的预览模式时,我会看到预期的架构:
但是,当使用结构化数据测试工具时,我会看到以下信息:
注意::我使用控制台验证了{{schemaRatingValue}}
,{{schemaReviewCount}}
和{{schemaPrice}}
是整数类型。对于{{schemaName}}
,我不确定为什么它不显示,因为它是一个简单的字符串。
注意::{{schemaPrice}}
并未显示错误,但根据检查器的屏幕截图,它显示0,但应显示33335。
答案 0 :(得分:0)
上述问题的解决方案是遍历DOM的方法。
要获取以下值:
{{schemaRatingValue}}
{{schemaReviewCount}}
{{schemaPrice}}
{{schemaName}}
事实证明,使用XPath是答案。该代码用于设置解析XPath:
function getElementByXpath(path) {
return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}
然后使用此代码定位我从DOM需要的特定对象:
var schemaPriceModelXpath = getElementByXpath("//*[@id=\"cBlock1\"]/div[2]/div[2]/div/div[1]/div[1]/h4/span[1]");
要获取整数,我使用以下方法转换了对象:
var schemaPriceModelXpathNumber = schemaPriceModelXpathText.replace(/[$,]+/g, '');
var schemaPriceModel = parseFloat(schemaPriceModelXpathNumberPrice);
return schemaPriceModel;
要获取字符串,我使用以下方法转换了对象:
var schemaNameModelXpathText = schemaNameModelXpath.textContent
return schemaNameModelXpathText;
使用上面的方法,我能够获取上面列出的四个变量的值。
最后一步是使用Google's Structured Data Testing Tool
验证此方法以下是屏幕截图: Schema Validation using Google Structured Data Testing Tool