OfferShippingDetails
OfferShippingDetails is the canonical node Google's Merchant Listings rich result reads to show shipping rate and delivery estimate badges in Product results. It lives under Offer.shippingDetails and pulls together shipping rate, shipping destination, delivery time, and the product's dimensions for rate quoting.
Full example of schema.org/OfferShippingDetails json-ld markup
The markup is verified as valid with Rich Results Test from Google.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Offer",
"itemOffered": { "@type": "Product", "name": "XooTee Classic" },
"price": 22.00,
"priceCurrency": "USD",
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": 4.99,
"currency": "USD"
},
"shippingOrigin": {
"@type": "DefinedRegion",
"addressCountry": "US",
"postalCode": "18512"
},
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "US"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": 0,
"maxValue": 1,
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": 2,
"maxValue": 4,
"unitCode": "DAY"
},
"cutoffTime": "14:00-05:00",
"businessDays": {
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
}
},
"weight": {
"@type": "QuantitativeValue",
"value": 0.22,
"unitCode": "KGM"
}
}
}
</script>Direct properties (11)
shippingRate: a MonetaryAmount or ShippingRateSettings describing the fee (or a reference to a published rate table).shippingDestination: one or more DefinedRegion blocks (country / postal-code / region tuples).shippingOrigin: DefinedRegion for where the shipment leaves from.deliveryTime: a ShippingDeliveryTime with handlingTime + transitTime + cutoffTime + businessDays.hasShippingService: ShippingService node for named carrier services.doesNotShip: Boolean flag when the destination is not serviced.width/height/depth: QuantitativeValue | Distance for carton dimensions (feeds dimensional weight).weight: QuantitativeValue | Mass (required by carriers that rate by weight).validForMemberTier: member-tier gated shipping offers.
Why it matters
Google's Merchant Listing and Product rich results show shipping cost and estimated delivery date badges directly in search results when OfferShippingDetails is present. Missing shippingDestination or deliveryTime causes Google to suppress the badge — the Offer still ranks, but loses the visual advantage.
Minimal valid version
The smallest markup that still produces a valid OfferShippingDetails entity. Use it as the floor. Reach for the advanced example above when you want search engines and AI agents to understand more about your content.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "OfferShippingDetails",
"shippingRate": { "@type": "MonetaryAmount", "value": 4.99, "currency": "USD" },
"shippingDestination": { "@type": "DefinedRegion", "addressCountry": "US" }
}
</script>Google rich results this unlocks
Markup matching this example makes your page eligible for the following Google Search rich results. The primary target drives the required / recommended property classification in the advanced code block above.
- Google docsMerchant listing shippingDetails badgeprimary
Common OfferShippingDetails mistakes
Mistakes that pass validation but silently fail to earn rich results or mislead consumers walking the graph. Avoid these and your markup will be ahead of most sites in the wild.
- 01
deliveryTime as a plain number
Wrong"deliveryTime": 3RightdeliveryTime: ShippingDeliveryTime with handlingTime + transitTime QuantitativeValue nodesGoogle needs the split to compute the estimated delivery date window. A single scalar loses the handling / transit distinction.
- 02
shippingDestination as a string
Wrong"shippingDestination": "US"RightDefinedRegion with addressCountry: "US"DefinedRegion is the structured shape; plain strings are ignored by the rich result.
- 03
Free shipping without an eligibleTransactionVolume
WrongshippingRate 0 on every orderRightshippingRate 0 + eligibleTransactionVolume: { minPrice: 50, priceCurrency: "USD" }Free-over-threshold requires the minimum-subtotal gate, otherwise Google treats all orders as free-shipping.
Schema properties in this example
Also mentioned in 6 other examples
OfferShippingDetails also appears in DefinedRegion, DeliveryChargeSpecification, DietarySupplement, Offer, Product, and StructuredValue. See the full OfferShippingDetails schema page for every reference.
About the example data
XooTee Classic shipped from Dunmore, PA: $4.99 US standard parcel shipping, handled same-day if ordered before 2pm ET on weekdays, 2–4 day transit by UPS Ground.
Comments
Loading comments...