XooCode(){

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.

Highlight legend:Required by GoogleRecommendedOptional
schema.org/OfferShippingDetails
<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.

schema.org/OfferShippingDetails (minimal)
<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.

  • Merchant listing shippingDetails badgeprimary
    Google docs

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.

  1. 01

    deliveryTime as a plain number

    Wrong
    "deliveryTime": 3
    Right
    deliveryTime: ShippingDeliveryTime with handlingTime + transitTime QuantitativeValue nodes

    Google needs the split to compute the estimated delivery date window. A single scalar loses the handling / transit distinction.

  2. 02

    shippingDestination as a string

    Wrong
    "shippingDestination": "US"
    Right
    DefinedRegion with addressCountry: "US"

    DefinedRegion is the structured shape; plain strings are ignored by the rich result.

  3. 03

    Free shipping without an eligibleTransactionVolume

    Wrong
    shippingRate 0 on every order
    Right
    shippingRate 0 + eligibleTransactionVolume: { minPrice: 50, priceCurrency: "USD" }

    Free-over-threshold requires the minimum-subtotal gate, otherwise Google treats all orders as free-shipping.

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...

Leave a comment