We will tell you the truth.
Even when it costs us the account.
← Home / / 6 min read / Glossary

What Is Product Schema?

Product schema is Schema.org markup that states a product's name, price, availability, condition and review data in a machine-readable block on the page. It is not a ranking mechanism.

Product schema is Schema.org markup that states a product’s name, price, availability, condition and review data in a machine-readable block on the page. It is not a ranking mechanism. Adding it does not move a product up the results; it makes the facts on your page legible to systems that would otherwise infer them from your HTML and get them wrong.

Why product markup is worth the effort

Without markup, every machine reading your product page is guessing. It has to work out which number on the page is the price when three are visible, whether the item is in stock, and whether the reviews belong to this product or the one in the carousel underneath.

Sometimes it guesses right. When it guesses wrong, the consequences are concrete rather than theoretical. Your price shows as the pre-discount figure in a shopping surface. An out-of-stock item stays listed and takes clicks you pay for in returns and support time. A language model summarising the category quotes a competitor’s price with confidence and yours not at all, because theirs was declared and yours had to be inferred. Product markup removes the guessing where you cannot afford it. If the underlying copy is the actual problem, no amount of markup rescues it, and it is usually cheaper to fix the page that is losing the sale first.

How the markup is read

Implementation is mechanical, and almost every failure happens in the gap between what the template outputs and what the shopper sees. A parser does not read your page the way a person does. It reads the declared block first, treats it as your statement of fact, and checks that statement against the rendered page. Everything below follows from that sequence, so work in this order.

  1. Use JSON-LD in the page source. Google states a preference for JSON-LD, which stands for JavaScript Object Notation for Linked Data. Injecting it client-side works but depends on rendering, so it fails silently more often.
  2. Declare one Product per product page. Name is the property Google requires. Everything else earns you eligibility for a specific treatment rather than admission.
  3. Nest an Offer inside it. Price, price currency and availability live in the Offer, not on the Product. Availability takes a Schema.org URL value such as https://schema.org/InStock, not the word in stock.
  4. Generate it from the same source as the visible page. If the template pulls the price from a different field than the one rendered on screen, the two will drift the first time a promotion runs. This is the fault that matters.
  5. Only mark up reviews shown on the page. An aggregate rating in the markup that a visitor cannot find in the HTML is a violation, not a shortcut.
  6. Validate, then monitor. The Rich Results Test checks one URL; Search Console reports across the site over time. Both are downstream of getting the underlying vocabulary right, which is where most implementations go wrong before a validator sees them.

The properties are not equally important. Below is what each one actually buys you.

What each property does

PropertyWhat it does, and what breaks without it
nameThe only property Google requires. Omit it and there is no valid Product.
offers.price and priceCurrencyDeclares the figure. Without it, a parser picks a number off the page, often the wrong one.
offers.availabilityStock state. Stale values here are the most common cause of a mismatch.
gtin or mpnIdentifies the product across sites, so your listing is understood as the same item.
aggregateRatingReview data. Valid only if those reviews are visible on the same page.
brandConnects the product to a manufacturer entity rather than a text string.

The blunt version

Most guides file schema errors under warnings. For price and availability, that framing is wrong in a way that costs money. Google’s structured data guidelines require the markup to describe content visible on the page, and markup that contradicts what the shopper sees is treated as spam. The penalty is a manual action against the site, which removes rich treatment across your product pages and lands in Search Console as a message rather than a chart. That is a different category of problem to a validator warning, and it is the one nobody tells you about while quoting for a schema implementation.

You are unlikely to cause it by lying. You are very likely to cause it by caching. The markup is rendered from one data source and the visible price from another, a sale starts, and for six hours the JSON-LD says one figure while the page says another. Multiply that across a catalogue and a promotional calendar and you have a site that misdescribes itself regularly, without anyone making a decision to do so.

So the test is not whether your schema validates. It is whether price and availability in the markup change in the same request as the visible page, every time. If your team cannot answer that, run a manual check on twenty products during your next promotion. The same discipline governs whether machines quote you accurately elsewhere, which is the substance of why product pages fail to get cited.

Example

Say a footwear retailer runs a weekend sale across 2,000 products. The visible price updates instantly from the pricing service. The JSON-LD is built during a nightly page rebuild, so it carries Friday’s full prices until the next rebuild runs. For roughly thirty hours, every product page declares a price higher than the one it charges. Nothing in the validator complains, because the markup is syntactically perfect. Search Console shows no errors. The mismatch is only visible to somebody who opens the page source and compares it to the screen, which is exactly the check that is never in the release process. The risk is not a warning. It is a manual action across the catalogue.

FAQ

Does product schema improve rankings?

Not directly. Structured data makes a page eligible for specific presentations in search results and gives machines a reliable reading of your facts. Neither is a ranking boost. Pages often perform better after implementation because the listing carries more information, which changes click behaviour rather than position.

What happens if my markup price is wrong?

Google requires structured data to reflect what is visible on the page. Markup that contradicts the visible price or stock state can attract a manual action, not merely a validation warning. That removes rich treatment across the affected pages until you fix the mismatch and request a review.

Can I mark up reviews collected on another site?

Only if those reviews are displayed on the page carrying the markup. Pulling an aggregate score from a third-party platform and declaring it in JSON-LD, while showing nothing to the visitor, breaks the visibility requirement. Display the reviews on the page, then mark up what is displayed.

Related terms

  • sameAs Property — how you connect a brand or product to the entity records that describe it elsewhere.
  • Link Reclamation — recovering the mentions of a product that were never linked back to it.
  • Structured Data — the wider vocabulary that product markup is one narrow application of.

A price mismatch between your markup and your page is not a warning. It is grounds for a manual action, and caching causes it far more often than dishonesty does. Check twenty products during your next sale, in the page source, against the screen.

Still here

Want this run on your actual traffic drop?

Send the domain and what you have been told. You get a straight answer. Including the one where we say do not hire us.