"Invalid value for category [price]": why a Shopify product reaches Google with a price of zero

Short answer. Google rejects the item because the price it received is zero, and a price of zero is not a purchasable offer. On Shopify the zero comes from one of two places: a variant that genuinely has no price set, or a correct admin price that the theme's markup fails to read and outputs as 0. The Rich Results Test tells you which, because it shows the price Google actually sees rather than the one you typed.

Google's guidance on this issue is short and leaves no room for interpretation. The Merchant Center help page states that the issue "occurs when you've entered 0 for the price [price] attribute", and documents exactly one exception: "if the product is a mobile device, sold as a part of a contract or promotion. During this promotion for mobile devices, the price [price] attribute value can be 0."

Unless you sell phones on contract, a zero price is simply not an offer, and Google treats it accordingly.

The part that makes this hard to catch

A zero price is a loud failure with a quiet distribution. It rarely affects a whole catalog. It affects a handful of products inside a catalog that otherwise looks perfectly healthy, which is precisely why nobody notices until an item stops selling or a disapproval appears.

In our own scans, reading entire catalogs rather than a sample, across more than 90,000 Shopify product pages, roughly one store in five had at least one product page declaring a price of zero in its structured data. That figure counts a store as affected if a single page is affected β€” and in the typical case, the affected pages are a small fraction of the catalog. Two facts that only make sense together: the problem is widespread across stores, and nearly invisible within any one store.

That combination is the whole reason it survives. Spot-checking a few products in the admin will almost never land on the one that is broken.

Want to know whether any of your product pages declare a price of zero? We read the structured data on your live catalog and flag them β€” read-only, no app to install, about 2 minutes. β†’ free scan

Two causes, and they need different fixes

The price is genuinely missing

Someone created the product as a draft with a placeholder price and never filled it in, or added a variant later and left its price blank. The admin is telling the truth, and the markup is faithfully reporting it. This is the ordinary case, it takes a minute to fix, and it needs no developer.

The detail that catches people out is that it is usually one variant, not the product. A product whose first variant is priced correctly looks entirely normal at a glance, while a later variant sits at zero and drags the item into a disapproval.

The theme is reading the wrong variable

Here the admin price is correct and the markup still says zero. The theme's JSON-LD snippet is reading a field that can be empty instead of the one that always resolves to the displayed variant. The value to check is product.selected_or_first_available_variant.price.

This version is worse than the first, because it is not a data-entry mistake on one product β€” it is a snippet that applies to every product page on the store. It also survives every correction made in the admin, which is what makes it so frustrating to diagnose: the merchant fixes the price, the price is right, and Google keeps rejecting the item.

Why it costs more than one disapproved listing

The Merchant Center rejection is the visible half. The other half happens in organic search, where a rich result that displays a price of zero is worse than no price at all: it is misleading at exactly the moment the shopper decides whether to click, and it damages trust in the listing before anyone reaches the page.

This is a close relative of the mismatch failure covered in the price mismatch article, where the page and the markup disagree about a real price. Here they may well agree β€” on a number that cannot be right. And it is distinct again from the stale price problem, where the price is valid but out of date. Three different failures, one shared consequence: what Google shows is not what you sell for.

How to check your own store

  1. Run a product URL through the Rich Results Test and read the price field of the detected Product. This is the number Google receives, which is the only one that matters here.
  2. Open the same product in Shopify Admin β†’ Product β†’ Pricing and check every variant, not just the first.
  3. If a variant has no price, set it. That is the whole fix.
  4. If the admin prices are all correct and the markup still shows 0, the theme snippet is at fault: confirm it reads product.selected_or_first_available_variant.price. This one usually needs a developer, and it is worth fixing properly because it affects the entire catalog.
  5. Revalidate with the Rich Results Test, then let the feed refresh or reupload the corrected data in Merchant Center. In Merchant Center, the affected items are listed under the Needs attention tab.

One caveat worth stating plainly: Merchant Center only shows you the products that reached a feed. A product that never made it into one can carry a zero price in its markup indefinitely without ever appearing in a diagnostics report. If you want the real count, the structured data served on your live product pages is the source of truth, not the feed.

Next in this cluster

Not sure whether any of your products declare a price of zero?

Scan my store for free