如何获得Google的结构化数据测试工具,以正确评估“ ratingValue”,“ reviewCount”,“ price”和“ Product Name”?

时间:2019-01-29 20:18:18

标签: javascript google-tag-manager schema.org json-ld

我正在使用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变量,但以下四个给我带来麻烦:

  1. {{schemaRatingValue}}
  2. {{schemaReviewCount}}
  3. {{schemaPrice}}
  4. {{schemaName}}

注意:我对其他四个变量都很好,它们正在使用结构化数据测试工具进行验证。

对于上述每个项目,这就是我在GTM中使用自定义JavaScript变量来获取每个值的方式:

  1. function(){
      var schemaRatingValue = Number(document.getElementsByClassName('model-review')[0].innerText.split(" ")[1]);
      return schemaRatingValue;
    }
    
  2. function(){
      var review = document.getElementsByClassName('model-review')[0].innerText.split(" ")[2].replace(/[{()}]/g, '');
      var schemaReviewCount = Number(review);
      return schemaReviewCount;
    }
    
  3. function(){
      var schemaPrice = Number(document.getElementsByClassName('mrPriceRange')[0].innerText.split(" ")[0].replace(/[$,]+/g, ''));
      return schemaPrice;
    }
    
  4. function() {
      var schemaName = document.getElementsByTagName('h1')[0].getElementsByTagName('span')[0].innerText;
      return schemaName;
    }
    

使用GTM的预览模式时,我会看到预期的架构:

Inspector View of Product Schema using Chrome in the head section

但是,当使用结构化数据测试工具时,我会看到以下信息:

Structured Data Testing Tool Product Schema preview with errors

注意::我使用控制台验证了{{schemaRatingValue}}{{schemaReviewCount}}{{schemaPrice}}是整数类型。对于{{schemaName}},我不确定为什么它不显示,因为它是一个简单的字符串。

注意:{{schemaPrice}}并未显示错误,但根据检查器的屏幕截图,它显示0,但应显示33335。

1 个答案:

答案 0 :(得分:0)

上述问题的解决方案是遍历DOM的方法。

要获取以下值:

  1. {{schemaRatingValue}}
  2. {{schemaReviewCount}}
  3. {{schemaPrice}}
  4. {{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