Case 1: No JSON ld included in your theme.
We have prepared an easy-to-use default JSON ld snippet for you. Paste the ID snippet into your product.liquid Shopify template. You can ask us for help via live chat in the bottom right corner of the Opinew Dashboard if required.
<script>
var metafield = String.raw`{{ product.metafields.opinew_metafields['product_plugin'] }}`.replace(/(\r\n|\n|\r)/gm, "");
var txt = document.createElement("textarea");
txt.innerHTML = metafield;
if (metafield){
metafield = JSON.parse(txt.value);
}
var opinewJson = {
"@context": "http://schema.org/",
"@type": "Product",
"name": {{ product.title | json }},
"url": {{ shop.url | append: product.url | json }},
{% if product.first_available_variant.barcode.size == 13 %}
"gtin13":"{{ product.variants.first.barcode }}",
{% elsif product.first_available_variant.barcode.size == 12 %}
"gtin12":"{{ product.variants.first.barcode }}",
{% elsif product.first_available_variant.barcode.size == 8 %}
"gtin8":"{{ product.variants.first.barcode }}",
{% endif %}
{%- if product.featured_image -%}
{%- assign image_size = product.featured_image.width | append: 'x' -%}
"image": [
{{ product.featured_image.src | img_url: image_size | prepend: "https:" | json }}
],
{%- endif -%}
"description": {{ product.description | strip_html | json }},
{%- if product.selected_or_first_available_variant.sku != blank -%}
"sku": {{ product.selected_or_first_available_variant.sku | json }},
{%- else -%}
{% if product.variants.first.sku != blank %}
"sku": "{{ product.variants.first.sku }}",
{% else %}
"sku": "{{ product.variants.first.id }}",
{% endif %}
{%- endif -%}
"brand": {
"@type": "Brand",
"name": {{ product.vendor | json }}
},
{%- if product.metafields.opinew_metafields.reviews_count and product.metafields.opinew_metafields.reviews_count != "0" -%}
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": {{ product.metafields.opinew_metafields.reviews_average }},
"ratingCount": {{ product.metafields.opinew_metafields.reviews_count }}
},
"review": {
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": metafield["reviews"]["recent"][0]["star_rating"]
},
"author": {
"@type": "Person",
"name": metafield["reviews"]["recent"][0]["user_name"]
},
"reviewBody": metafield["reviews"]["recent"][0]["body"]
},
{%- endif -%}
"offers": [
{%- for variant in product.variants -%}
{
"@type" : "Offer",
{%- if variant.sku != blank -%}
"sku": {{ variant.sku | json }},
{%- endif -%}
"availability" : "http://schema.org/{% if product.available %}InStock{% else %}OutOfStock{% endif %}",
"priceValidUntil" : "{{ 'now' | date: '%s' | plus: 31536000 | date: '%Y-%m-%d' | url_encode | replace:'+','%20' }}",
"price" : {{ variant.price | divided_by: 100.00 | json }},
"priceCurrency" : {{ cart.currency.iso_code | json }},
"url" : {{ shop.url | append: variant.url | json }}
}{% unless forloop.last %},{% endunless %}
{%- endfor -%}
]
}
var el = document.createElement('script');
el.type = 'application/ld+json';
el.text = JSON.stringify(opinewJson);
document.querySelector('body').appendChild(el);
</script>
Case 2: You already have a JSON ld snippet included in your Shopify theme.
You can add this ID snippet code to make our reviews data work with your existing JSON ld
{% if product.metafields.opinew_metafields.reviews_count and product.metafields.opinew_metafields.reviews_count != "0" %}
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": {{ product.metafields.opinew_metafields.reviews_average }},
"ratingCount": {{ product.metafields.opinew_metafields.reviews_count }}
},
{% endif %}
Case 3: You’re using a JSON ld app
So far those are the Shopify apps that support Opinew:
- JSON‑LD for SEO by Little Stream Software. Check out our help center article to integrate both apps
- SEO All-In-One
- Yoast SEO
- SEO Booster
If your app doesn’t support Opinew yet, please get in touch with their support. Integrating with Opinew is very easy and should be quick for them to implement!
Own a Shopify SEO app and want to integrate?
If you own a Shopify SEO app and would like to integrate with Opinew, please refer to our integration instructions.