Missing shippingDetails medium
Merchant listings: "Missing field 'shippingDetails'"
The Offer has no shipping object, so Google can't display shipping cost or delivery estimates in the merchant listing.
What you see
Missing field "shippingDetails" (in "offers") This item is invalid for merchant listing experiences. This item does not meet all requirements for Merchant listings.
What’s actually happening
Search Console's Merchant listings report and the Rich Results Test flag this as a warning on Product pages. The listing still qualifies for the basic product result, but shipping cost and estimated delivery won't appear in the enhanced merchant listing. It commonly pairs with the missing-return-policy warning since both belong to the merchant-listing feature.
Common causes
- The Offer markup was written before shipping fields existed and never added OfferShippingDetails.
- shippingDetails sits on the Product rather than nested inside the Offer.
- shippingDestination.addressCountry is missing, so Google can't tell which region the rate applies to.
- shippingRate has no value or no currency, leaving the cost ambiguous.
- Shipping is configured in Google Merchant Center but the page markup is tested standalone, so the field still reads as absent.
How to fix it
- Nest shippingDetails under the OfferInside the Offer add "shippingDetails": { "@type": "OfferShippingDetails", "shippingRate": { "@type": "MonetaryAmount", "value": "5.99", "currency": "USD" }, "shippingDestination": { "@type": "DefinedRegion", "addressCountry": "US" } }.
- Add delivery time with handling and transitInclude "deliveryTime": { "@type": "ShippingDeliveryTime", "handlingTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "DAY" }, "transitTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 5, "unitCode": "DAY" } } so Google can show an arrival estimate.
- Represent free shipping explicitlyFor free delivery set shippingRate value to "0.00" with the right currency. Don't omit shippingRate — a missing rate reads as unknown, not free.
- Prefer a global shipping policy on Organization or in Merchant CenterIf rates are uniform across the catalog, declare shipping once under Organization markup or set it in Merchant Center instead of repeating OfferShippingDetails on every product. Keep markup and Merchant Center values consistent.
- Re-validate the live URLRun the Rich Results Test after deploy. If the warning sticks, check that the object is inside offers and that addressCountry and shippingRate are both populated.
Stop it recurring
Put OfferShippingDetails (or an Organization-level shipping policy) in your product template so the field ships with every new product instead of being added one page at a time.
Related errors