Missing field "shippingDetails" and "hasMerchantReturnPolicy": optional fields in merchant listings

"Missing field 'shippingDetails' (in 'offers')" and "Missing field 'hasMerchantReturnPolicy' (in 'offers')" are non-critical issues in Search Console's Merchant listings report. Your products remain eligible. The notices mean Google has no structured shipping cost, delivery time or returns information to show beside the price. Add the fields if those details would help a shopper choose you.

Search Console separates critical issues, which block the feature, from non-critical ones, which limit enhancements. These two are in the second group, and many stores see them on every product from the day the report appears.

What the two fields describe

shippingDetails holds one or more OfferShippingDetails objects: where you ship to, what it costs and how long it takes. hasMerchantReturnPolicy holds a MerchantReturnPolicy: which countries it applies to, how many days a customer has, how items are returned and who pays.

With them in place, Google can show information such as delivery cost or a returns window in product results. Without them, the listing shows price and availability only.

Both must describe your real policies. If shipping cost depends on basket size or location in ways the markup cannot express, describe the most common case accurately or leave the field out; do not publish a flattering number.

Three ways to supply the information

  1. In each product's Offer markup. The most direct method, and what the report message refers to. Suited to stores where shipping or returns differ by product.
  2. Once, at organisation level. Google also reads a returns policy from hasMerchantReturnPolicy on your Organization markup and applies it across your products. A sensible choice when one policy covers the whole catalogue. Our merchant return policy reference shows the properties.
  3. In Google Merchant Center, if you have an account. Shipping and returns settings there serve the same purpose for your product listings, and Google's documentation notes that account-level settings take precedence over markup on the page.

Choose one and keep it consistent. If Merchant Center already holds accurate settings, the Search Console notices can simply be left.

JSON-LD for the offer

Add both properties inside the existing Offer. Adapt every value.

json
"offers": {
  "@type": "Offer",
  "price": "18.00",
  "priceCurrency": "GBP",
  "availability": "https://schema.org/InStock",
  "shippingDetails": {
    "@type": "OfferShippingDetails",
    "shippingRate": { "@type": "MonetaryAmount", "value": "3.95", "currency": "GBP" },
    "shippingDestination": { "@type": "DefinedRegion", "addressCountry": "GB" },
    "deliveryTime": {
      "@type": "ShippingDeliveryTime",
      "handlingTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "DAY" },
      "transitTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 3, "unitCode": "DAY" }
    }
  },
  "hasMerchantReturnPolicy": {
    "@type": "MerchantReturnPolicy",
    "applicableCountry": "GB",
    "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
    "merchantReturnDays": 30,
    "returnMethod": "https://schema.org/ReturnByMail",
    "returnFees": "https://schema.org/FreeReturn"
  }
}

Points that commonly trip validation:

  • addressCountry and applicableCountry take two-letter ISO 3166-1 codes.
  • unitCode is DAY, and times are whole days.
  • Free shipping is a shippingRate with value of 0, not an omitted rate.
  • For several destinations, make shippingDetails an array with one object per region.
  • If returns are not accepted, use https://schema.org/MerchantReturnNotPermitted as the category and drop the day count.

Adding it on a WooCommerce site

WooCommerce's built-in Product markup covers price and availability; it does not add shipping or returns details. You have three practical routes:

  • A schema or SEO plugin that exposes these fields. Check its Product settings.
  • A code snippet that extends WooCommerce's structured data. WooCommerce passes its product markup through the woocommerce_structured_data_product filter before printing, so a small function can add the two properties to offers from values you define once.
  • Organisation-level markup for returns, added once to the site-wide Organization block, plus Merchant Center for shipping.

Hydrogen SEO's Product type covers name, description, price, currency and availability, as listed in the schema types reference. For shipping and returns, use one of the routes above alongside it, taking care that only one component outputs the Product block for each page.

Whichever route you take, paste the resulting block into our JSON-LD validator first. A misplaced brace in a nested object this deep is easy to make and turns the whole block into unparsable structured data.

Decide whether it is worth doing

Do it when you have a simple, competitive policy to state: free delivery, fast dispatch, long returns. Those are the details that can make a listing more attractive. It is lower priority when shipping is quoted per order, when you sell services or digital goods labelled as products, or when you are not targeting Google's shopping surfaces at all. The products remain valid without these fields.

Put critical issues ahead of these. A missing price, availability or image blocks merchant listings entirely, and Either 'offers', 'review', or 'aggregateRating' should be specified blocks product snippets.

Validate

Test a product URL in the Rich Results Test and expand Merchant listings: the two notices should be gone, and no new errors should appear in their place. In Search Console, open the Merchant listings report, select the issue and click Validate fix. Counts fall as products are recrawled, which on large catalogues takes weeks.

Common questions

Will my products be removed from Google if I ignore these?

No. They are optional enhancements. Products stay eligible for merchant listings and product snippets.

Do I need both fields?

No. Each is independent. Add whichever you can state accurately.

I set shipping in Merchant Center. Why does Search Console still show the notice?

The report describes the markup on your pages. Settings in Merchant Center are applied separately, so the notice can remain while your listings still show the information.

Can I describe free shipping over a certain order value?

The offer-level markup describes shipping for that product. If the rule depends on basket total, state the standard rate, or manage shipping through Merchant Center where thresholds can be configured.