Shopify combined listings product schema: rich snippets and canonical safety

shopify combined listings product schema rich snippets

The person is a merchant based in Stockholm who emailed me about a week ago. She had published the dress in 12 colors and had made each colour a separate product to help her Search Engine Optimisation. For the navy shade Google was showing up a rich snippet with details such as the price, number of customer reviews and their average rating. The other 11 shades showed up but no snippet was displayed. No price. No rating. Just a plain blue link to the page.

Your suspicion about combined listings was off the mark. The problem was that your prior app would put one shared Product schema block for the group of 11 items, which Google treats as near-duplicates of the blue item at the top, the navy item in this case.

The Shopify combined listings product schema never crosses the mind of most Shopify merchants until a rich snippet goes missing. In this post, we’ll explore what the schema.org Product markup code looks like for grouped products, why having duplicate schema markup on your product pages reduces your chances of getting the rich results you want, and how the Rubik Combined Listings app ensures each of the individual linked products has their own clean schema.org markup.

In this post

Product schema in 60 seconds

Product schema is a JSON-LD block that tells Google what the page is about. You can include name, image, price, availability, rating, SKU and brand information within the block. If Google likes what it reads, it’ll paint a rich snippet into the search results containing the price, stars, “In stock” message and even a product image. Rich snippets significantly increase the CTR of your store and all Shopify themes already support them.

Structural semantically defined in organized blocks , specifically, the Product schema block. Each product page should have exactly one such block, and it should describe that page alone.

The duplicate schema trap

Rubik Combined Listings group products as variants with swatches

Combined listings apps can screw up in this way. Rather than populating a second Product schema block with the information for each combined listing, they just throw all of the information in a second Product block, resulting in duplicate category nav (here: dresses) and a mess of listings on the individual product pages. On this page, for example, you see information about the navy dress as you would if you were viewing the page for that listing alone, followed by the information about the red, green and yellow dresses. This is wrong. The correct page would show the navy dress first, followed by the red, green and yellow dresses.

Google say that having two Product content blocks on the same page is ambiguous and Google may ignore one of both of them. The rich snippets also seem to have vanished from this page. Both the Rich Snippet validator on the Google web site flag this as a warning, and I have seen the page drop in ranking for this very change.

Gaffes: some products have 12 related products that are linked in the schema; and in some cases some of these related products are assigned the same price with additional links to the costlier silk version of the product. Google will distrust all the prices in the block due to the inconsistent data.

How Rubik Combined Listings handles schema

Rubik does not touch your Product schema. Full stop.

Each linked product will have its own Product schema generated by the theme, so Navy will have navy’s schema, Red will have red’s schema, etc. What Rubik does add to the page though is the swatch UI, but it is rendered inside a shadow DOM and therefore the swatches themselves are not included in the schema graph. This swatch UI is presented as a row of visible UI elements, but Google’s parsers treat these as UI elements not as additional product listings.

This means:

  • Each color URL has its own unique Product schema block.
  • Each color URL has its own price, stock, SKU, and reviews.
  • Each color URL competes independently in Google’s index.
  • Rich snippets render for every linked product, not just one.

Canonical URL safety

Canonical tags are used to tell Google that two or more URLs contain virtually the same content and that only one of the URLs is the “canonical” or the “real deal”. Many apps make the error of assigning a canonical tag to each of the grouped product pages which then all point to the master or parent product. So every single page for the Classic Tie in various colours would say something like: “Hey Google this is the same content as /products/classic-tee-navy”. The result of this would be that Google would index the /products/classic-tee-navy page and de-index all the other 11 colour variations thus removing them from the long-tail traffic opportunity.

Rubik doesn’t change canonical tags on the index. So your theme will still render the canonical tag to the index that Shopify uses by default. But each color product is canonical to itself which is what you want if you index is based on color and you’re trying to rank each color to appear in search results separately using products.

What rich snippets you actually get

Rich snippet elementShopify theme defaultSurvives Rubik install
PriceYesYes
Availability (In stock / Out of stock)YesYes
Aggregate rating (stars)Depends on review appYes if review app populates it
BrandYesYes
SKUYesYes
ImageYesYes

No asterisks. This code doesn’t have any asterisks. It doesn’t say “works only on Plus” like the previous code did. Every linked product gets a rich snippet payload just like the theme already generates.

Testing with Rich Results Test

– Open Google’s Rich Results Test – Paste the URL of any linked product in your group and hit Test. You should see 1 Product block marked as valid with all fields filled out. If you see two Product blocks or a warning about “duplicate schema on page” – something else is probably injecting extra JSON-LD into your site. Check other apps. (not Rubik).

Test on a handful of products at a time. Colors can drift. Also, if the navy page validates but the red page shows warnings, it’s because the red product has a theme-level issue (likely missing SKU or broken reviews) that is completely unrelated to combined listings.

For a more in-depth discussion on how Shopify’s structured data will affect your overall SEO see the Shopify structured data guide on Craftshift. If you are also displaying combined listings and using variant image filtering, see variant images SEO post on Rubik Variant Images for Shopift product page related information.

See the live demo store, watch the tutorial video, or read the getting started guide.

https://www.youtube.com/watch?v=ZbfywqX4jRA

Frequently asked questions

Does Rubik Combined Listings modify my Product schema?

+Note Rubik does not modify your theme’s Product schema. Products will each have a schema block provided by the theme, including the price, SKU, availability and image., but+

Will I get rich snippets for every color in the group?

Google will index each colour as a separate ranking and display price or stars for each one, as each linked product has its own URL, schema and rich snippet.

Does combined listings cause duplicate content issues?

Only if the canonical URLs are incorrect. If every colour is self-canonical (which is the default in Shopify) and the content is different (i.e. different images, different descriptions, different SKUs) then Google will index the colours as separate pages.

Should I use a single schema block for the whole group?

Make sure that you only include 1 No Product schema per URL and that you do not consolidate the information from related products for the same website. From what we have researched Google can drop a rich result entirely if there are duplicate versions of a schema within the same site and then select the Watered Down Version to show in search results.

How do I check if my linked products have valid schema?

use Google’s Rich Results Test tool to see if we’re getting a Product result and that all the fields are valid and visible. Test a couple of colours to make sure the test result isn’t just displaying data for one colour. Also, check that there’s only one Product block displayed.

Does Rubik set canonical tags?

Setting the canonical tag to a canonical tag already exists. Having each product page canonicalized to itself allows for different ranking on the various colors of a single item.

What if my review app adds its own schema block?

Most review apps add an aggregate rating to the current Product schema instead of creating a new Richmond-based block. If you create a second block, please fix and support. Rubik does not conflict either way.