Learn · How-To
How to Add Product and Offer Schema to Sale Pages
A sale page that states its price, currency, stock and conditions in structured data removes guesswork for search engines and for any assistant that reads the page. Google documents Product and Offer markup for its shopping features and expects it to match what shoppers can see. This guide takes you from a plain sale page to validated markup, including what to do when the sale ends.
- 1
Decide which Google feature the page is for
Google separates merchant listings, for pages where a shopper can buy the product from you, from product snippets, for editorial or aggregator pages that do not sell it. A sale page where the customer can add to cart is a merchant listing page, so mark it up as one. Merchant listings need an Offer, not an AggregateOffer, because the merchant must be the seller, and the price must be above zero.
- 2
Put the facts in the visible page first
Before writing any code, check the page itself states the product name, current price, any previous price, stock status, delivery timeframe and returns terms in plain text. Google's structured data guidelines say markup must reflect what visitors can see and that marking up hidden content is not allowed. If the information is not on the page, add it to the page before you add it to the markup.
- 3
Add the required Product properties
Use JSON-LD in a script tag. At minimum a merchant listing Product carries a name, one or more crawlable image URLs and a nested Offer. Add description, brand and an identifier such as a GTIN where you have one, because Google lists them as recommended and they help the product be matched. Keep each product's markup on that product's own page or card.
- 4
Build the Offer with price, currency and availability
Inside the Offer, give the active price and its currency as a three-letter code, which is ZAR for rand. Price and currency are the required Offer properties. Add availability, such as the schema.org InStock or OutOfStock value, along with itemCondition and the product url, which Google lists as recommended. The price must be the number a shopper sees at the till, without the currency symbol and without thousands separators.
- 5
Show the sale price and the dates correctly
For a discount, keep the active price as the price and describe the previous price as a strikethrough price using a priceSpecification with a priceType of StrikethroughPrice. The active price itself should not carry a priceType. Use validFrom for the start of the sale and priceValidUntil, or validThrough, for the end, and make sure the start is never later than the end. Be aware that Google notes a listing with a priceValidUntil in the past may not display.
- 6
Add shipping and returns
Google recommends shippingDetails and hasMerchantReturnPolicy. For most stores the cleanest approach is to state a site-wide shipping and returns policy once, in Organization markup, and use Offer-level versions only for products that differ. Make sure the delivery times and return window in the markup are the same ones written on the page.
- 7
Validate before you publish
Paste the live page address, or the code, into Google's Rich Results Test and fix every critical error. Warnings are optional but worth clearing where you can. Then read the page and the markup side by side and confirm that the price, currency, availability and dates match exactly. After deploying, use URL Inspection in Search Console to confirm Google can fetch the page and see the markup, with no robots.txt rule, noindex tag or login blocking it.
- 8
Update or retire the markup when the sale ends
Put the sale end in your calendar as a task, not a hope. When the sale ends, change the price to the regular price, update or remove the sale dates and the strikethrough price, and refresh availability. A page that still advertises a price it no longer honours is a mismatch between markup and reality.
Pro tips
- Generate the markup from the same data that renders the visible price, so the two cannot drift apart.
- Nobody has published a measurement showing that this markup changes how AI shopping agents choose a retailer. Treat it as accuracy hygiene that Google documents for its own features, not a recommendation lever.
- Mark up a product only on the page where it can actually be bought.
Related reading
Want help putting this into practice?
Take our 2-minute quiz to see where your business stands, or talk to a specialist about getting this done for you.