Why Shopify Store Owners need this
You installed a review app last month, and your theme already printed its own Product markup. Now every product page may carry two Product blocks that disagree about price, rating or availability, and nothing in the Shopify admin tells you. Theme edits and apps can also quietly remove things you assumed were default, and the same goes for markup. Searching for shopify seo apps gives you many options, but few explain what they actually add to the page source. The Structured Data (Schema) Checker answers that for a single URL. It fetches the page as served, reads every JSON-LD block and every Microdata itemtype, and lists the types it finds, so you can see whether a product URL carries one Product entry, two, or none. It also prints each valid JSON-LD block so you can read the values your store really declares. It does not run JavaScript, does not read RDFa, and does not judge whether Google will show a rich result. Treat it as a quick look at what your theme and apps print, run once per page type after every change.
Shopify Store Owners specific guidance
Which URLs to check first
Start with one product URL, for example https://yourstore.com/products/linen-shirt, and one collection URL such as https://yourstore.com/collections/shirts. The tool reads one URL per run and does not crawl your store, so run the home page, a product, a collection and a blog article once each, right after any theme update or app install. In the Shopify admin, open Online Store, then Themes, and note the date of the last edit so you know which change to blame. A clean result on one product page does not prove every product renders the same, since variants, sale states and app blocks can differ.
Reading the overview and the JSON-LD source
Look at the cards first: Schema types, JSON-LD items and Microdata items. A chip such as JSON-LD: Product ×2 on a product URL is your duplicate signal. Then scroll to JSON-LD Source and compare the blocks: price, availability and name should match what the page shows. Many themes print JSON-LD while a review app adds Microdata, so a Microdata: Product chip beside a JSON-LD one also means two sources. If you see Invalid JSON-LD block detected, a trailing comma or smart quotes in a pasted snippet is the usual cause. Two entries do not prove a lost listing; they only show conflicting sources. The Rich Result Eligibility table is a type lookup and does not check required properties, so confirm in Google's Rich Results Test.
What to fix, and in which order
Fix empty pages before duplicates. If a product URL returns the message that no JSON-LD or Microdata was found, open Online Store, Themes, Actions, Edit code and check that the product template still renders its structured data snippet. Then deal with duplicates: open the review app's settings and switch off its own product markup if your theme already prints it, or the reverse, and keep one source. Duplicate your theme first so you can roll back. Re-run the same URL afterwards; the chip should read Product once. If an app injects markup with JavaScript or a tag manager, this check will not see it, and a passing result still says nothing about indexing or rankings.
Example scenarios
1. Review app on top of a theme that already prints Product
- Situation
- Illustrative example: A store with 140 products installs a review app in its first month. The theme already prints a Product block, and the app adds a second one with star ratings.
- Input
https://yourstore.com/products/linen-shirt- Reading the result
- You would typically see Schema types at 1 or 2, JSON-LD items at 2 or 3, and a chip reading JSON-LD: Product ×2. In JSON-LD Source the first block might declare a price of 49.00 and no rating, while the app block declares 49 and 37 reviews. Pick one source, switch off the other in its settings, and re-run until Product appears once.
2. Product template that lost its markup
- Situation
- Illustrative example: An owner pastes 12 lines of custom code into the theme to add a tracking script and, while cleaning up, deletes the line that renders the structured data snippet in the product template.
- Input
https://yourstore.com/products/walnut-desk- Reading the result
- The result would read that no JSON-LD or Microdata structured data was found on this page. That points to a missing template include rather than a bad value. Compare against your unedited theme copy in Edit code, restore the snippet, and test again. Run a second product too, since one template usually serves them all.
3. Hand-pasted snippet with a trailing comma
- Situation
- Illustrative example: A store owner adds a custom Product snippet to one product page for a pre-order item, and a comma remains after the last property on line 18.
- Input
https://yourstore.com/products/ceramic-mug- Reading the result
- Expect the message Invalid JSON-LD block detected in place of that block, while any other valid blocks are still printed. Fix the comma, check for curly quotes, and run the URL again. A valid block listed afterwards means the page declares it; it does not mean Google will show a rich result.
Common mistakes
- Testing only the home page. The home page rarely carries Product markup, so a quiet result there tells you nothing about your product pages. Run one product and one collection URL as well.
- Assuming an SEO app replaces the theme markup. Many apps add their own block next to what the theme already prints instead of swapping it. Always re-run a product URL after installing one and look for a doubled Product chip.
- Expecting late-loading review stars to appear. The tool reads the HTML as served and runs no JavaScript, so widgets that inject markup after load will not show up. Compare with your browser's view-source before concluding the app is broken.
- Treating Rich Result Eligibility as approval. That table only maps a type to what it may enable and checks no required properties or values. Confirm the page in Google's Rich Results Test and never read it as a promise of stars or price snippets.
- Editing the live theme without a copy. Removing a snippet or app block in Edit code on the published theme can break the product page layout too. Duplicate the theme from Online Store, Themes first, so you can roll back.
Frequently asked questions
Why does my Shopify product page show Product schema twice?
Usually two things print it: your theme's structured data snippet and a review or SEO app that adds its own block, as JSON-LD or as Microdata. The checker shows this as a chip such as JSON-LD: Product ×2 or an extra Microdata: Product chip. Open JSON-LD Source and compare the values. Then turn off the markup option in the app or the theme, keep one source, and run the same URL again to confirm a single entry.
Does the checker see schema that a Shopify app adds with JavaScript?
No. It reads the HTML as the server returns it and runs no JavaScript, so markup injected after load by a script or tag manager does not appear. Markup that the theme or app prints into the page source does appear. If a review widget loads late, you may see nothing from it here even though it works in a browser. Use view-source in your browser to compare, and check the app's own help pages for how it outputs markup.
Will fixing schema fix my Shopify store not showing on Google?
Not by itself. The checker only reports which structured data types a page prints; it cannot say whether a page is indexed, how it ranks or whether a rich result appears. If your store is missing from Google, look at indexing first in Google Search Console and at the sitemap Shopify generates at /sitemap.xml. Schema comes later, once pages are indexed, and valid markup only makes a page eligible, never guaranteed.
How many pages of my Shopify store should I check?
One URL per run, so test one of each page type: the home page, a product, a collection, and a blog article if you publish them. Pages built on the same template normally print the same kind of markup, so one product usually represents the others. Add a second product if some use apps or metafields that others do not, such as a bundle or a pre-order item. The tool does not crawl, so it will not list pages that lack markup.
What does Invalid JSON-LD block detected mean on my Shopify page?
It means a script of type application/ld+json on the page could not be parsed as JSON, so the block is not shown. Typical causes are a trailing comma, curly quotes copied from a document, a missing bracket, or two objects pasted one after the other without an array. If you added the snippet to a theme file by hand, fix it in Edit code, check it in a JSON validator, then re-run the URL.
Reference: Search Engine Journal's Shopify SEO guide points out that Shopify collection pages cannot be nested, which is why your collection URLs stay flat and deserve their own check next to a product URL.