Как я могу использовать инструмент тестирования структурированных данных Google для правильной оценки "ratingValue", "reviewCount", "price" и "Product Name"? - PullRequest
0 голосов
/ 29 января 2019

Я использую Инструмент тестирования структурированных данных Google для проверки моей схемы.Эта страница является хорошим примером: https://www.bigmazda.com/new-mazda-cx-9-longwood-fl.html.

Я использую Google Tag Manager на вышеуказанном сайте.В 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}}

ПРИМЕЧАНИЕ : я получаю остальные четыре переменные нормально, и они проверяются с помощью инструмента тестирования структурированных данных.

Для каждого пункта выше, вот какЯ использую пользовательскую переменную JavaScript в GTM, чтобы получить каждое значение:

  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}} являются typeof целыми числами.Когда дело доходит до {{schemaName}}, я не уверен, почему это не отображается, потому что это простая строка.

ПРИМЕЧАНИЕ: {{schemaPrice}} не показывает ошибку, НО показывает 0, он должен отображать 33335, основываясь на снимке экрана инспектора.

1 Ответ

0 голосов
/ 12 февраля 2019

Решением моих проблем, описанных выше, является метод, с помощью которого я прошел 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]");

Чтобы получить целые числа, я преобразовал Объект, используяthis:

var schemaPriceModelXpathNumber = schemaPriceModelXpathText.replace(/[$,]+/g, '');
var schemaPriceModel = parseFloat(schemaPriceModelXpathNumberPrice);
return schemaPriceModel;

Чтобы получить строки, я преобразовал Объект, используя это:

var schemaNameModelXpathText = schemaNameModelXpath.textContent
return schemaNameModelXpathText;

Используя метод выше, я смог получить значения для моих четырех переменных, перечисленных выше.

Последним этапом была проверка этого метода с использованием инструмента тестирования структурированных данных Google

Вот снимок экрана: Проверка схемы с использованием инструмента тестирования структурированных данных Google

...