Skip to content

Missing field "shippingDetails" (in "offers"): optional, and how to add it

This is a non-critical issue in the Merchant listings report, so your products can still show with their prices. Add shipping details if you want Google to show your shipping cost and delivery time too.

In Search Console
  • Missing field "shippingDetails" (in "offers")

    Shopping > Merchant listings

    Non-critical

Non-critical: the item can still show as a rich result.

By Bruno Amorim · ·

Google's merchant listing docs mark shippingDetails as recommended, not required. It usually shows up next to Missing field "hasMerchantReturnPolicy", because both come from the same gap: product markup with no shipping or return details.

Pick where Google gets your shipping details

Google reads shipping from several places. When they disagree, it uses this order, strongest first: product feeds in Merchant Center, the Content API for Shopping, settings in Merchant Center or Search Console, product markup, and last, Organization markup.

  • Search Console, no code: open Settings > Shopping > Shipping and returns. On the Shipping tab, click Add shipping policy. Pick a country, the minimum and maximum delivery days, and the cost. Google approves shipping details on its own. You need to be an owner or full user of the property.
  • Organization markup, once for the whole store: a ShippingService nested under Organization with hasShippingService. Google recommends this for a standard policy.
  • Offer markup, on each product: shippingDetails inside offers. Use it for products that ship differently, or to clear this warning.

Google doesn't say whether a Search Console or Organization-level policy clears this warning. Store owners on Shopify's forum report that it can stay. If you want it gone, add shippingDetails to the offer.

The JSON-LD fix

Add one OfferShippingDetails to the offer. Google requires three parts inside it: shippingRate, shippingDestination, and deliveryTime.

Before
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Canvas Weekender Bag",
  "image": "https://example.com/photos/weekender-bag.jpg",
  "offers": {
    "@type": "Offer",
    "price": 89,
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}
</script>
After: $4.95 shipping to the US, 1 day to pack, 2 to 5 days in transit
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Canvas Weekender Bag",
  "image": "https://example.com/photos/weekender-bag.jpg",
  "offers": {
    "@type": "Offer",
    "price": 89,
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "shippingDetails": {
      "@type": "OfferShippingDetails",
      "shippingRate": {
        "@type": "MonetaryAmount",
        "value": 4.95,
        "currency": "USD"
      },
      "shippingDestination": {
        "@type": "DefinedRegion",
        "addressCountry": "US"
      },
      "deliveryTime": {
        "@type": "ShippingDeliveryTime",
        "handlingTime": {
          "@type": "QuantitativeValue",
          "minValue": 0,
          "maxValue": 1,
          "unitCode": "DAY"
        },
        "transitTime": {
          "@type": "QuantitativeValue",
          "minValue": 2,
          "maxValue": 5,
          "unitCode": "DAY"
        }
      }
    }
  }
}
</script>
  • shippingRate.currency must match the offer's priceCurrency.
  • For free shipping, set shippingRate.value to 0.
  • handlingTime is order to dispatch. transitTime is dispatch to door. Each needs minValue, maxValue, and unitCode DAY.
  • One rate per OfferShippingDetails. For standard and express, add two shippingDetails entries.
  • addressCountry is a two-letter code, such as US or GB.

Already describe your shipping policy once with Organization markup on another page? The offer can point to it by its @id instead of repeating it.

Offer that points to a store-wide shipping policy
{
  "@type": "Offer",
  "price": 89,
  "priceCurrency": "USD",
  "shippingDetails": {
    "@type": "OfferShippingDetails",
    "hasShippingService": {
      "@id": "https://example.com/shipping#policy"
    }
  }
}

Where the fix goes

Shopify

Dawn prints product markup with {{ product | structured_data }} near the end of sections/main-product.liquid. Horizon does it at the top of sections/product-information.liquid. That filter writes the product, brand, and offers, with no shipping. Liquid can't read your shipping zones, so the rates go in by hand: replace that line with your own JSON-LD block, or use a structured data app. The no-code route is Search Console's Shipping and returns settings.

WooCommerce

WooCommerce's own product markup has no shipping details. Rank Math documents a code filter, rank_math/snippet/rich_snippet_product_entity, that adds shippingDetails to each offer from your theme's rank-math.php file.

Wix

Go to SEO & GEO > Tools and settings > SEO Settings > Products, and click Edit next to Structured data markup. Click Convert to custom markup on the Product preset, then add shippingDetails to its offer. Wix allows 5 markups per page type, the preset included.

Squarespace

Squarespace writes Product markup for you, and its help says you can't edit or remove it. Use Search Console's Shipping and returns settings instead.

BigCommerce

In the Cornerstone theme, product markup lives in templates/components/products/schema.html. Its offers block has no shipping. Add shippingDetails there and upload the theme.

Confirm it worked

  1. Run a product address through the Rich Results Test. Under Merchant listings, the shipping warning should be gone.
  2. In Search Console, open Shopping > Merchant listings, click Missing field "shippingDetails" (in "offers"), and click Validate fix.

Questions

Is "Missing field shippingDetails" optional?

Yes. Google lists shippingDetails as recommended, and Search Console shows it as a non-critical issue. Your products can show as merchant listings without it.

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

The Merchant listings report checks the markup on the page. Google's docs don't say a Merchant Center or Search Console policy clears the warning. Google still uses those settings for your listings, and they rank above page markup.

Do I need shippingDetails on every product?

No. For one store-wide policy, Google recommends Organization markup or the Search Console setting. Add shippingDetails to offers that ship differently, or where you want the warning gone.

Sources

Checked on October 8, 2026. Vendors change their tools and docs, so check the source if something looks different.

See which of your pages Google left out

Prices, stars, and breadcrumbs only show for pages in Google's index. CrawlCoach shows which of your pages Google left out, and the fix for each.

Get my free report

Free for up to 500 pages. No card needed. Sign in with the Google account you use for Search Console.

More structured data fixes

Related guides