Skip to content
SEOScanShopify SEOStructured Data
High SeverityStructured Data

Shopify Product Schema Missing Required Offer Fields for Google Shopping

Search intent: fix · Updated February 2026

Direct Answer

Google's 2023-2024 Merchant Listings rich results require Product schema to include three Offer-level fields beyond basic price and availability: hasMerchantReturnPolicy (linking to a MerchantReturnPolicy entity describing your return terms), shippingDetails (a OfferShippingDetails entity with delivery time and cost), and priceValidUntil (an ISO 8601 date). Without all three, Google Search Console reports "Missing field hasMerchantReturnPolicy" warnings and the product is ineligible for the enhanced Merchant Listings appearance in Google Shopping and search results.

Quick Diagnostic Checklist

  • Check Google Search Console → Enhancements → Products for "Missing field" warnings
  • Paste product URL into Rich Results Test - expand Offer entity and check for three required fields
  • View Source on product page: search for "MerchantReturnPolicy" in JSON-LD
  • Check priceValidUntil date value - confirm it is a future date in YYYY-MM-DD format
  • Verify shippingDetails contains both shippingRate and deliveryTime sub-entities

Not sure if your store has this issue?

Run a free scan to detect structured data problems instantly.

Free Scan

What This Issue Means

Google's product rich results have two tiers. The basic tier shows a product box with name, price, and image. The enhanced Merchant Listings tier shows price comparison, shipping cost, return policy badge, and availability - a significantly richer display that dramatically increases CTR. Qualifying for the enhanced tier requires the full Offer schema including return policy and shipping details. Most Shopify themes output only the basic fields (price, availability, currency), leaving the store permanently ineligible for the enhanced display regardless of how competitive their actual prices or return policies are.

What Causes It (Shopify-Specific)

1

Shopify themes output minimal Offer schema by default

The standard Product schema in Shopify themes (including Dawn) includes price, priceCurrency, and availability within the Offer object. The hasMerchantReturnPolicy and shippingDetails fields were added to Google's requirements in 2023 and no default theme has been updated to include them.

2

Return policy and shipping data are not Liquid objects

Unlike product price ({{ product.price }}) or availability ({{ product.available }}), return policy terms and shipping rates are not native Shopify Liquid objects. They must be hardcoded or pulled from shop-level metafields, which requires custom implementation.

3

priceValidUntil requires a future date that must be maintained

Google requires priceValidUntil to be a future date in ISO 8601 format. Many merchants set this once and forget it, causing it to expire - at which point Google Search Console flags the field as invalid. It requires either a dynamic date calculation in Liquid or periodic manual updates.

4

Google Search Console warnings not acted upon

Google Search Console's Rich Results report shows "Missing field" warnings for these fields. Because the basic Product schema still validates without them, many merchants see the warnings but do not understand the enhanced rich results they are missing out on.

How to Detect It Manually

  1. 1In Google Search Console → Search appearance → Shopping tab → look for warnings referencing "hasMerchantReturnPolicy", "shippingDetails", or "priceValidUntil"
  2. 2Paste any product URL into Google's Rich Results Test (search.google.com/test/rich-results) - expand the Offer entity and check for the presence of hasMerchantReturnPolicy, shippingDetails, and priceValidUntil
  3. 3View Source on a product page and search for "MerchantReturnPolicy" - if absent, the field is missing from your schema
  4. 4Check Google Search Console → Enhancements → Products for items listed as "Valid with warnings" - these are pages missing the enhanced fields

How to Fix It (Step-by-Step)

1

Add hasMerchantReturnPolicy to your Offer schema

Locate your Product schema block (typically in sections/main-product.liquid or snippets/product-schema.liquid) and add the return policy entity inside the Offer object.

json
"hasMerchantReturnPolicy": {
  "@type": "MerchantReturnPolicy",
  "applicableCountry": "GB",
  "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
  "merchantReturnDays": 30,
  "returnMethod": "https://schema.org/ReturnByMail",
  "returnFees": "https://schema.org/FreeReturn"
},
2

Add shippingDetails to your Offer schema

Add OfferShippingDetails inside the Offer object. Replace the shippingRate values with your actual shipping cost. For free shipping, set value to 0.

json
"shippingDetails": {
  "@type": "OfferShippingDetails",
  "shippingRate": {
    "@type": "MonetaryAmount",
    "value": "0",
    "currency": {{ shop.currency | json }}
  },
  "shippingDestination": {
    "@type": "DefinedRegion",
    "addressCountry": "GB"
  },
  "deliveryTime": {
    "@type": "ShippingDeliveryTime",
    "handlingTime": {
      "@type": "QuantitativeValue",
      "minValue": 0,
      "maxValue": 1,
      "unitCode": "DAY"
    },
    "transitTime": {
      "@type": "QuantitativeValue",
      "minValue": 2,
      "maxValue": 5,
      "unitCode": "DAY"
    }
  }
},
3

Add priceValidUntil with a rolling 1-year date

Calculate a date one year from today using Liquid's date filters to ensure the field never expires.

liquid
{%- assign price_valid_until = 'now' | date: '%s' | plus: 31536000 | date: '%Y-%m-%d' -%}
"priceValidUntil": {{ price_valid_until | json }},
4

Validate the updated schema in Rich Results Test

After deploying, paste your product URL into search.google.com/test/rich-results. Confirm the Offer entity now shows hasMerchantReturnPolicy, shippingDetails, and priceValidUntil without warnings. Then re-submit affected URLs via Google Search Console → URL Inspection → Request indexing.

How SEOScan Detects This Issue

SEOScan parses all JSON-LD Product schema blocks on product pages using a full JSON parser. For each Offer entity found, it checks for the presence of hasMerchantReturnPolicy, shippingDetails, and priceValidUntil. Missing fields are individually flagged. For priceValidUntil, it parses the date value and checks whether it is in the future - an expired date is flagged as a separate error. The tool cross-references Google Search Console's documented Merchant Listings requirements to classify each missing field as required vs. recommended.

Example Scan Result

Product Offer schema missing 3 required Merchant Listings fieldsHigh

Description

Product schema found on 47 product pages. All Offer entities are missing: hasMerchantReturnPolicy, shippingDetails, priceValidUntil. Basic price and availability are present. Google Search Console likely shows "Valid with warnings" for all affected products.

Impact

Products ineligible for Google's enhanced Merchant Listings rich results. Missing return policy and shipping badges reduce buyer confidence. Competitors with complete Offer schema receive visually richer product listings at the same ranking position.

Recommended Fix

Add MerchantReturnPolicy, OfferShippingDetails, and priceValidUntil entities to the Offer object in your Product schema. Edit sections/main-product.liquid and insert the required fields before the closing brace of the Offer object.

Why It Matters for SEO

Google Merchant Listings Eligibility

Google's Merchant Listings rich result (distinct from Google Shopping feed) shows pricing, shipping cost, return policy badge, and availability details directly in organic search results. This enhanced display is only available to products with complete Offer schema including the three required fields.

Buyer Trust Signals at Point of Discovery

Return policy and shipping information shown in the SERP before the customer clicks reduces purchase friction. Showing "Free returns · Ships in 2-5 days" directly in search results increases qualified click-through rates.

Search Console Warning Volume

Each product page missing these fields generates individual warnings in Google Search Console. Stores with hundreds of products can accumulate thousands of schema warnings, which depresses the overall Rich Results health score and may reduce crawl priority.

Competitive Disadvantage in Product Searches

Product searches are the most commercially competitive queries. Competitors who have implemented full Offer schema appear with richer, more trustworthy listings. Buyers scanning search results naturally gravitate toward listings that show shipping and return information.

Real-World Validation Signals

  • Google added hasMerchantReturnPolicy and shippingDetails as required fields for Merchant Listings in its 2023 structured data documentation update - stores that implemented schema before this date are systematically non-compliant.
  • Stores that add complete Offer schema with return policy and shipping details consistently see improvements in Google Search Console's Product rich results validation report within 2-4 weeks of deployment.
  • Google's Rich Results Test explicitly flags missing hasMerchantReturnPolicy as a required field warning, not just a recommended one, for Merchant Listings eligibility.
  • priceValidUntil is required by Google to confirm the listed price is current - expired or missing dates cause the product to fall back to the basic (non-enhanced) product result appearance.

Frequently Asked Questions

Q: Is hasMerchantReturnPolicy required or just recommended by Google?

Google's structured data documentation for Merchant Listings classifies hasMerchantReturnPolicy, shippingDetails, and priceValidUntil as required for the enhanced Merchant Listings appearance. They are recommended (not required) for the basic Product rich result, but required for the richer display that shows shipping and return badges.


Q: Do I need a Google Merchant Center account for Merchant Listings schema to work?

No. Merchant Listings rich results from structured data markup work independently of Google Merchant Center. They are populated from your on-page JSON-LD schema and appear in organic search results, not Shopping ads. You do not need a Merchant Center account for schema-driven rich results.


Q: My return policy varies by product - how do I handle hasMerchantReturnPolicy?

Define your standard return policy in the schema and use product metafields to override for non-standard products. For most Shopify stores, a single policy entity covering the default 30-day return window is accurate for 90%+ of products. Add a conditional in Liquid to use a different policy entity for products tagged with non-standard return terms.


Q: How often does priceValidUntil need to be updated?

Use the rolling Liquid date calculation shown in the fix above (now + 365 days) to generate the date dynamically at render time. This means it is always one year in the future and never needs manual updating.

Check Your Store for This Issue

SEOScan automatically detects shopify product schema missing required offer fields for google shopping and 4 related issues - with specific fixes for your store.

Run Free Scan

Related Issues