Policy
HIGHOffer JSON-LD carries shippingDetails (OfferShippingDetails)
Each PDP's Offer JSON-LD carries `shippingDetails: OfferShippingDetails`. Without shippingDetails, AI agents fall back to vague defaults — they can't quote your rates, destinations, or delivery windows in shopping cards.
What this check looks for
Without `shippingDetails` on Offer (or, defensively, on Product), Google's shipping-policy rich-result family has nothing to render and downstream sub-aspect checks (rate, destination, delivery-time) have nothing to evaluate. Coverage ≥ 85% across PDPs with Product JSON-LD passes; ≥ 50% partial; otherwise fail.
Which AI surfaces it affects
- Google AI Mode (UCP)90
- Microsoft Copilot60
- Meta AI50
- ChatGPT (ACP)40
- Perplexity30
Weighted against the live specs — ACP 2026-04-17, UCP 2026-04-08.
How to fix it
Emit shippingDetails (OfferShippingDetails) on Offer JSON-LD
Shopify
Developer- Settings → Shipping and delivery: configure shipping zones and rates per market.
- On Online Store 2.0 themes with merchant-listing schema enabled, Shopify emits `shippingDetails` automatically.
- On custom themes, inject the block in `sections/product.liquid` referencing your shop's primary shipping zone.
BigCommerce
Developer- Store Setup → Shipping: confirm zones and rates are configured.
- Edit `templates/components/products/product-view.html` to emit `shippingDetails` on the Offer JSON-LD block.
WooCommerce
Developer- WooCommerce → Settings → Shipping: configure zones and methods.
- Install/update Yoast SEO or AIOSEO with the merchant-listings add-on, which emits `shippingDetails` from your WooCommerce zone configuration.
Custom / headless
Developer- Inject `shippingDetails` on every Offer JSON-LD block.
- At minimum: shippingRate (MonetaryAmount), shippingDestination.addressCountry (ISO), deliveryTime.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Example Hat",
"offers": {
"@type": "Offer",
"price": "49.99",
"priceCurrency": "USD",
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": 5.99,
"currency": "USD"
},
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "US"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": 0,
"maxValue": 1,
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": 2,
"maxValue": 5,
"unitCode": "DAY"
}
}
}
}
}
</script>The spec it's pinned to
schema.org/OfferShippingDetails
schema.org/OfferShippingDetails is the canonical container for shipping rate, destination, and delivery-time fields on an Offer.
Google shipping-policy SD — entry-point field
Google's shipping-policy SD treats `shippingDetails` on Offer as the entry point for the entire shipping rich-result family; without it the rest of the family can't render.
Does your store pass this check?
Run the full audit — 82 checks across five AI shopping surfaces. Most tools only check whether you get mentioned; we check whether an agent can buy from you.