Troubleshooting for SEO rich snippets
Updated over a week ago

Upgrade your rich snippets to the latest version

If you installed before March 2017, you might still be using outdated rich snippets. In such cases, you will encounter the following notice: "You are using an old Rich Snippets version: data-vocabulary." To update your rich snippets to the latest version, simply click the "Upgrade" button, which will lead you to

Link all your product snippets via @id (Optional)

By default,'s Product snippets are not linked to your theme's Product snippets. To ensure that Google understands that all Product snippets belong together, we recommend linking these snippets.

Here's how to achieve this:

  • Check Your Theme: Ensure that your theme incorporates JSON-LD snippets within the product.liquid template. Confirm that these JSON-LD snippets do not already include an @id attribute. If you're uncertain, consult your theme developer for clarification.

  • Add @id Attribute: If your theme meets the criteria, insert the following @id line into your theme's JSON-LD Product snippets:

"@id": {{ canonical_url | append: '#product' | json }},

Typically, you'll locate these JSON-LD snippets as part of a script within your product.liquid template. Below, we provide an example of a complete script tag that encompasses your theme's JSON-LD Product snippets, with the @id line integrated just below @type:

{% capture jsonld_brand_url %}https://{{ shop.domain }}{{ product.vendor | url_for_vendor }}{% endcapture %}
<script type="application/ld+json">
"@context": "",
"@type": "Product",

"@id": {{ canonical_url | append: '#product' | json }},

"brand": {
"@type": "Brand",
"name": {{ product.vendor | json }},
"url": {{ jsonld_brand_url | json }}
"sku": {{ product.selected_or_first_available_variant.sku | json }},
"description": {{ product.description | strip_html | json }},
"url": {{ canonical_url | json }},
"name": {{ product.title | json }},
{% if product.featured_image %}
"image": "https:{{ product.featured_image | product_img_url: 'grande' }}",
{% endif %}
"offers": [{% for variant in product.variants %}{
"@type": "Offer",
"price": "{{ variant.price | divided_by: 100.0 }}",
"priceCurrency": "{{ shop.currency }}",{% unless shop.metafields.jsonld.itemCondition == blank %}
"itemCondition": "{{ shop.metafields.jsonld.itemCondition }}",{% endunless %}
"availability": "{% if variant.available %}InStock{% else %}OutOfStock{% endif %}"
}{% unless forloop.last %},{% endunless %}{% endfor %}]

  • Re-crawl with Google: Following these snippet updates, it's advisable to request Google to re-crawl your product pages. For more details on how to initiate a re-crawl with Google, refer to this resource.

By following these steps, you'll achieve the desired result where the two Product snippets ('s and your theme's) merge into a single Product snippet. This integration occurs because they now share the same @id attribute, which corresponds to the product URL.

Using microdata snippets

If your online store does not use JSON-LD snippets, there's no need to worry. We also support Microdata snippets, which are commonly integrated into the majority of themes, with only a few very outdated themes still relying on data-vocabulary.

However, when using Microdata snippets, it's important to ensure that our AggregateRating is correctly linked to your existing Microdata product snippets. This linkage is achieved by placing our widget within the <div> element that contains itemscope itemtype="".

It's crucial to note that if you position the widget outside of this specific <div>, the AggregateRating may not establish a connection with the Product rich snippets, and Google may potentially disregard it.

To verify if the widget is correctly positioned within the itemscope, follow these steps:

  1. Inspect our widget on your webpage.

  2. Locate the <div> element with the product itemscope attribute.

  3. Hover over this highlighted section, and ensure that our widget is encompassed within it, as depicted in the image below:

Deactivating JSON-LD snippets

While it's not the recommended approach, if your preference is solely for microdata (HTML) snippets, you have the option to disable's JSON-LD (Javascript) snippets. You can achieve this by including the following code at the end of your product.liquid file:

// Disable JSON-LD snippets
judgemeOpts = window.judgemeOpts || {};
judgemeOpts.jldDisable = true;

Please be aware that this approach is not encouraged, as JSON-LD snippets offer enhanced functionality and compatibility with modern SEO practices.

Disabling microdata snippets

The Microdata standard doesn't support multiple markups within the same Product rich snippet. Therefore, if you have a specific reason to display two or more Review Widgets on a single page, only one of them should contain the microdata AggregateRating snippet.

To deactivate the microdata snippet, follow these steps:

{% capture review_widget %}
{% render 'judgeme_widgets', widget_type: 'judgeme_review_widget', concierge_install: true, product: product %}
{% endcapture %}
{{ review_widget | replace: "itemprop", 'duplicated-itemprop' | replace: "itemscope", 'duplicated-itemscope' }}

Keep in mind that disabling microdata snippets should be done with caution, as it may impact the structured data and how search engines interpret your content.

Eliminating duplicate AggregateRating in WooCommerce

Occasionally, WooCommerce-generated markup can lead to the presence of duplicated AggregateRating data on product pages. We've provided a solution for this issue, which is contributed by

Option 1: Adding Code to functions.php

You can resolve this issue by adding the following code snippet to your theme's functions.php file:

* Remove WooCommerce Product Schema markup for `aggregateRating`.
function prefix_remove_woocommerce_aggregate_rating_markup( $markup, $product ) {
unset( $markup['aggregateRating'] );
return $markup;
// IMPORTANT: This code should run before the YoastSEO WooCommerce filter with a priority of 10
add_filter( 'woocommerce_structured_data_product', 'prefix_remove_woocommerce_aggregate_rating_markup', 5, 2 );

Please note that it's crucial for this code to execute before the YoastSEO WooCommerce filter with a priority of 10.

Option 2: Using the plugin

Alternatively, you can resolve this conflict by installing and using a dedicated plugin. You can download it from here.

Plugin Details:

  • Plugin Name: WooCommerce Schema Fix

  • Plugin URI:

  • Description: This plugin addresses conflicts between WooCommerce and's product schema data related to aggregateRating.

  • Text Domain: wpseo-woocommerce-gutenberg-fix

  • Version: 1.0.0

  • Author:

  • License: GPLv2

This plugin ensures the proper handling of schema data for aggregateRating within WooCommerce.

If you need help troubleshooting for SEO rich snippets, contact our team at [email protected]. We're available to help 24/7!

Did this answer your question?