Add a JSON-LD Product block with required properties: 'name', 'image', 'description', 'sku' or 'mpn' or 'gtin', 'offers' containing 'price', 'priceCurrency', 'availability', and 'condition'
Set 'availability' to a schema.org value such as 'https://schema.org/InStock' and 'condition' to 'https://schema.org/NewCondition' — use full URIs, not short strings
Add 'priceValidUntil' to the Offer when the price has an expiry; omit it only if the price is indefinite, since stale priceValidUntil dates suppress rich results
Include 'aggregateRating' with 'ratingValue' and 'reviewCount' to qualify for review star display alongside the merchant listing
Validate the markup using the Rich Results Test and check the 'Shopping' tab in Search Console's Rich Results report for coverage and error counts
Keep the on-page visible price in sync with the structured data price — mismatch between visible content and markup causes manual actions
Known gotchas
Using short-form availability strings like 'InStock' instead of the full URI 'https://schema.org/InStock' may still be parsed by Google but is not spec-compliant and can trigger warnings
Product markup on pages that are not genuine product detail pages (e.g., category pages listing multiple products) does not qualify for rich results and may be ignored or trigger quality issues
Price data in structured data must match the price visible to the user on the page; discrepancies discovered by Google's crawlers can result in the rich result being suppressed
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp