Product Schema That Earns Listings
Valid schema and eligible schema are different things. Product markup only earns a rich listing when the required fields are present, consistent with what the page visibly shows, and the identifiers resolve. Most implementations pass validation while missing the fields that actually trigger the enhancement, or contradict the rendered page in a way that suppresses it silently.
Use when product pages are valid in the rich results test but show no price, rating, or availability in the search listing.
The skill file
What you need first
- the rendered DOM of a product page, not the source HTML
- your GTIN, MPN, and brand data coverage across the catalog
- Search Console merchant listings and product snippet reports
Method
- 01 Validate against the rendered page, since a lot of ecommerce templates inject price and stock client-side and the crawler may see a different value than your JSON-LD claims.
- 02 Ship offers with price, priceCurrency, availability, and priceValidUntil. A missing currency alone is enough to suppress the price in the listing while still validating.
- 03 Populate gtin where you have it and mpn plus brand where you do not. Identifier coverage is what separates merchant listing eligibility from a plain product snippet.
- 04 For variant products use a single product with an offer for each variant, or aggregateOffer with lowPrice and highPrice. Do not emit one Product object per variant on one URL.
- 05 Only mark up aggregateRating where the reviews are genuinely on that page and visible. Aggregating site-wide ratings onto every product is the most common cause of a structured data manual action.
- 06 Track the Search Console merchant listings report weekly rather than retesting single URLs - it shows which items are eligible at scale and which are being filtered out.
What this produces
Product JSON-LD that passes the merchant listing eligibility bar, not just the validator, verified against the rendered page.
Where this goes wrong
- JSON-LD price drifting from the displayed price because one is cached and the other is not, which suppresses the enhancement silently
- reusing one site-wide review score as aggregateRating on every product page
- omitting priceCurrency or shipping details and assuming a valid test result means the listing will show
Use this skill in your own AI
The download is a plain markdown file with the name and trigger in its frontmatter. Where an assistant supports skills it can load itself, that frontmatter is what it reads to decide this one applies.
Questions about this skill
When do I need this rather than another pass through the rich results test?
When product pages validate cleanly and still show no price, rating or availability in the listing. Retesting single URLs until the validator is green cannot help, because valid and eligible are different bars. Use this when the gap sits between what the markup claims and what the rendered page and your identifier coverage actually support.
What do I need before touching the product markup?
The rendered DOM of a product page rather than view source, your GTIN, MPN and brand coverage across the catalogue, and the Search Console merchant listings and product snippet reports. Many ecommerce templates inject price and stock client side, so testing the source tells you nothing about what the crawler resolved. Without coverage figures you cannot separate a markup fault from a data gap.
What does the corrected markup look like, and which part decides eligibility?
Product JSON-LD verified against the rendered page, with offers carrying price, priceCurrency, availability and priceValidUntil, and identifiers populated where you hold them. Identifier coverage is the part that decides outcomes, since it separates merchant listing eligibility from a plain product snippet. The weekly merchant listings report is how you then read eligibility at catalogue scale.
Which mistake here risks the whole catalogue?
Reusing one site wide review score as aggregateRating on every product page. It is the most common cause of a structured data manual action, and an action removes enhancements across the whole catalogue rather than on the pages at fault. Mark up ratings only where the reviews sit on that page and are visible to a reader.
More in Ecommerce SEO
Faceted Navigation Crawl Control
Use when a category with a few hundred products has generated tens of thousands of crawlable fil...
Category Page Copy That Ranks
Use when category pages sit in positions 8 to 20 for their head term and the page is a bare grid...
Product Descriptions At Scale
Use when you have thousands of SKUs on manufacturer-supplied copy and product pages get impressi...
Out Of Stock And Discontinued Products
Use when products go out of stock or get discontinued and you need to decide what happens to the...