Product Structured Data for Price and Availability
Product structured data is markup that describes what you sell: the name, the price, whether it is in stock. Google says there are two classes. Product snippets are for pages where someone cannot buy the product directly. Merchant listings are for pages where they can, and those carry the extra detail such as size, shipping, and returns [1]. Adding the merchant-listing properties can also make the page eligible for snippets. Neither one is guaranteed to appear [1].
What can show, if Google uses it?
Google’s examples include ratings, pros and cons, shipping, availability, a price drop, and returns. It says those enhancements are at the discretion of each experience and can change. A price drop is computed by Google from price changes over time. It is not guaranteed to be shown, and it is not a badge you switch on [1]. Availability is there so a shopper can see stock. It has to match the page.
Do variants change which markup you need?
Both snippets and merchant listings can describe variants. Google recommends ProductGroup, with variesBy, hasVariant, and a productGroupID, so it can tell that sizes and colors are one parent product [1] [2]. Each variant needs a unique sku or gtin. Each group needs its own ID. A single-page product needs one canonical URL for the group, usually the URL with nothing preselected [2].
Does each variant need a URL?
Yes. Google says you must be able to preselect each variant with its own URL, so the crawler sees the right image, price, and availability [2]. If the price only changes after a click and the address does not, that price is not a separate crawlable fact. Shopify’s side of the same idea: once variants exist, price and inventory live on the variant, not on one field for the whole product [3].
Should the markup be in the first HTML?
Google recommends Product markup in the initial HTML for merchants who want shopping results. JavaScript-generated product markup can make shopping crawls less frequent and less reliable, which matters for price and stock that change quickly [2]. If a script paints the price after load, do not assume the crawler priced the variant.
What has to be true of any structured data, including this?
It describes visible content. Google says not to mark up invisible text or empty pages, and that fewer complete properties beat a long incomplete list [4]. A price in the script that is not on the page is the case to avoid. JSON-LD is the recommended format. It does not make a rich result certain, and the case studies in that introduction are Google’s reports about large sites, not a promise for a small catalog [4].
Can you add your own star rating to the product?
Only if the reviews follow the review-snippet rules. Ratings have to come from users, the markup has to match review text on the page, and you do not mark up fake or undisclosed incentivized reviews [5]. A LocalBusiness or Organization marking up its own reviews is not eligible for stars, including a widget of its own reviews [5]. Product variant docs point aggregateRating back at those same rules [2].
What if the page is blocked or the file is wrong?
Google says to check that the product URL is not blocked by robots.txt, noindex, or a login, then to wait. A recrawl can take days [2]. A sitemap tells Google the URL changed. It does not guarantee a crawl [6]. The image of the product still needs an img src if you want that picture indexed. A CSS background does not count [7].
- Merchant listing — the page where someone can buy, with price and availability.
- Snippet — a page about a product they cannot buy there.
- Variant URL — each size and color preselected, with that price and stock.
- Initial HTML — not only a script that runs later.
- No invented stars — reviews come from customers and match the page.
Where does this sit in the store?
On the product template, as part of the store and, on Shopify, as part of how the product is built. A price that does not match the page is one way a store loses the sale after the click. What the build costs should say whether product markup is in the first release.
What about a feed as well as the page?
Google says you can mark up the page, upload a Merchant Center feed, or both. Using both can make more experiences possible, and some experiences will take a price from the feed when the page markup does not include it [1]. The page the shopper opens still has to show the same price. Markup and a feed do not replace the number on the screen [4].
What should you compare on one product?
The price and the stock on the screen, then the same two facts in the markup [4]. Open one variant URL and confirm those facts changed with the color or size [2]. Run the Rich Results Test for critical errors [2]. Then stop. A price-drop badge is not something you turn on [1].
Sources & references
- Google Search Central: Intro to Product structured data.
- Google Search Central: Product variant structured data.
- Shopify Help Center: Product details.
- Google Search Central: Intro to structured data.
- Google Search Central: Review snippet structured data.
- Google Search Central: Learn about sitemaps.
- Google Search Central: Google image SEO best practices.
Product markup rules are on the linked Google pages. Check the current page before you add price markup to a live catalog.
If the price in search does not match the price on the page, we can see whether the markup is on the HTML Google fetches.
Talk to us arrow_right_alt