AgenticWebScore
Scan

Commerce Protocols · Essential · Critical impact

Product/catalog schema

Product data is the most valuable and the least machine-readable: price, availability and returns are usually rendered for a person to read and never declared for a machine to parse.

  • Essential
  • Critical impact
  • Adopted standard
Product/catalog schema — Property, Value
Property Value
Check idproduct-schema
DimensionCommerce Protocols (15%)
TierEssential — pool 80 pts
Weight inside tier3
ImpactCritical
MaturityAdopted — A ratified standard with real deployment.
ConditionalYes — scored only on commercial sites
Publishing skillproduct-schema
Standardsschema.org/Product

What is measured

Conditional: reported n/a and excluded from the score unless the scanner has already seen a commercial signal on the site (Product/Offer/AggregateOffer JSON-LD, an add-to-cart or buy-now action, or a cart/checkout link); this check itself never creates the signal. It then flattens the JSON-LD it holds for the homepage and, when reachable, the /products, /shop and /store paths, and passes on any "@type": "Product", "Offer" or "AggregateOffer" — a partial (0.7) when that markup exists only on a product or collection page, and a fail when no such type is found anywhere.

Reproduce it yourself

You do not have to take our word for any of this. Run the same measurement against your own domain:

              DOMAIN=shop.example.com
for p in / /products /shop; do printf '%s: ' "$p"; curl -sL "https://$DOMAIN$p" | grep -Eo '"@type"[[:space:]]*:[[:space:]]*"(Product|Offer|AggregateOffer)"' | sort -u | tr '\n' ' '; echo; done
            

The fix

This is the artifact to ship. It is the complete change, not a description of one.

              <!-- /products/aurora-desk-lamp : the product itself -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Aurora Desk Lamp",
  "sku": "ADL-100-BLK",
  "description": "Dimmable LED desk lamp, 2700-5000K, USB-C.",
  "brand": { "@type": "Brand", "name": "Aurora" },
  "offers": {
    "@type": "Offer",
    "url": "https://shop.example.com/products/aurora-desk-lamp",
    "price": "1299.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}
</script>
<!-- Homepage / : the same Offer inside an ItemList, so the catalogue is readable from the root -->
<script type="application/ld+json">
{ "@context": "https://schema.org", "@type": "ItemList", "itemListElement": [
  { "@type": "Offer", "url": "https://shop.example.com/products/aurora-desk-lamp", "price": "1299.00", "priceCurrency": "USD", "availability": "https://schema.org/InStock" }
] }
</script>
            

Standards referenced

  • schema.org/Product

Related checks

Related checks — Check, Tier, Impact, Same skill
Check Tier Impact Same skill
payment-protocols — Agent payment standard support (AP2/ACP/x402/UCP)RecommendedHigh—
agent-purchase — Agent purchase policyRecommendedHigh—
ucp-manifest — UCP manifest (/.well-known/ucp)EmergingMedium—
returns — Return and shipping terms machine-readableRecommendedMedium—
agent-analytics — Agent traffic measurementEmergingLow—
inventory-freshness — Inventory and price freshnessRecommendedHigh—
seller-identity — Seller identity declaredRecommendedMedium—
shipping-costs — Shipping cost and delivery declaredRecommendedHigh—