What OfferShippingDetails is
Per Schema.org v30.0, OfferShippingDetails 'represents information about shipping destinations.' Multiple OfferShippingDetails objects can attach to one Offer to represent different rates, costs, and delivery times across destinations. Inheritance: Thing > Intangible > StructuredValue > OfferShippingDetails. Key properties: shippingRate (MonetaryAmount or ShippingRateSettings), shippingDestination (DefinedRegion), deliveryTime (ShippingDeliveryTime), doesNotShip (Boolean), shippingOrigin (DefinedRegion).
The AI Overviews claim — [UNVERIFIED]
Same caveat as hasMerchantReturnPolicy: industry SEO publications throughout Jan–May 2026 repeatedly state Google AI Overviews now demands shippingDetails on Product schema for AI shopping visibility. The claim is not confirmed in Shopify's primary docs or in Google Search Central's AI Overviews policy statements at our verification window. We mark [UNVERIFIED — third-party only] and recommend the field anyway for the reasons in the install rationale below.
OfferShippingDetails fields
The properties Google's documentation strongly recommends and Schema.org defines: shippingRate (a MonetaryAmount with value and currency, OR a ShippingRateSettings reference for stores with rate sets), shippingDestination (a DefinedRegion with addressCountry — ISO 3166-1 alpha-2 — and optionally addressRegion or postalCode ranges), deliveryTime (a ShippingDeliveryTime with handlingTime QuantitativeValue and transitTime QuantitativeValue, both expressed in days).
JSON-LD example — OfferShippingDetails inside Offer
The block below shows shippingDetails inside the Offer sub-object of a Shopify Product block. Hard-coded US-only with $0 shipping and 0–1 day handling + 2–5 day transit. Adjust per the merchant's actual Shopify shipping zone configuration.
Mapping Shopify shipping zones to OfferShippingDetails
Shopify exposes shipping configuration at Settings > Shipping and delivery > Shipping (Shipping zones, with countries per zone and rates per zone). For accurate schema, each zone should map to one OfferShippingDetails sub-object — one for US, one for Canada, one for International. The shippingRate per OfferShippingDetails comes from the cheapest standard rate per zone (the rate most relevant for the structured data). Flat-rate stores can hard-code; multi-zone stores benefit from a Liquid loop over shipping_zone metafields or a custom-built ShippingRateSettings reference.
Validation
Rich Results Test against a PDP with shippingDetails should report Product detected, Offer parsed, OfferShippingDetails parsed, zero errors. Common warnings: 'deliveryTime is recommended' (clears when you add handlingTime + transitTime), 'shippingDestination should include addressCountry' (clears with ISO 3166-1 alpha-2). For Merchant Center, the JSON-LD shippingDetails must agree with the feed's shipping attributes.
Shopify gotchas on shippingDetails
Four gotchas. First: hard-coding shippingRate value '0' on a store with paid shipping — the markup is structurally valid but misrepresents the actual cost, which Merchant Center catches. Use the merchant's real rate. Second: emitting shippingDestination as a single country on a multi-country store, leaving other regions unrepresented. Third: omitting deliveryTime, which makes the OfferShippingDetails structurally minimal but less useful to AI engines deciding which products to recommend. Fourth: using floats for handlingTime / transitTime (handlingTime minValue: 0.5) — Schema.org accepts numbers, but Google's parser sometimes prefers integers.