Black Friday is Nov 27. Shoppers will ask AI what to buy — is your catalog readable?Check yours free
GigaCommerce

Free · Instant · No email required

Return and shipping policy schema, ready to paste.

Shoppers ask AI assistants about returns and delivery before they buy, and Google shows both next to products. Fill in your policy once and get the structured data Google documents for it: MerchantReturnPolicy and ShippingService on your Organization, as Shopify Liquid or plain JSON-LD.

Returns
Return window
How customers return items
Item conditions you accept back
Shipping
Days you ship orders

Rates

One row per destination and order-value band. A rate of 0 is free shipping. Leave a bound empty for “no limit”.

Your markup

Paste into theme.liquid, just before </head>. Your store name and policy links fill themselves in, and it only renders on your refund and shipping policy pages.

{%- comment -%} Return and shipping policy structured data. Generated at gigacommerce.co/tools/policy-schema-generator {%- endcomment -%}
{%- if request.path contains '/policies/refund-policy' or request.path contains '/policies/shipping-policy' -%}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "{{ shop.secure_url }}/#organization",
  "name": {{ shop.name | json }},
  "url": "{{ shop.secure_url }}",
  "hasMerchantReturnPolicy": {
    "@type": "MerchantReturnPolicy",
    "applicableCountry": "US",
    "returnPolicyCountry": "US",
    "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
    "merchantReturnDays": 30,
    "returnMethod": "https://schema.org/ReturnByMail",
    "returnFees": "https://schema.org/FreeReturn",
    "refundType": "https://schema.org/FullRefund",
    "itemCondition": "https://schema.org/NewCondition",
    "returnLabelSource": "https://schema.org/ReturnLabelDownloadAndPrint",
    "merchantReturnLink": "{{ shop.secure_url }}{{ shop.refund_policy.url }}"
  },
  "hasShippingService": {
    "@type": "ShippingService",
    "name": "Standard shipping",
    "fulfillmentType": "https://schema.org/FulfillmentTypeDelivery",
    "handlingTime": {
      "@type": "ServicePeriod",
      "duration": {
        "@type": "QuantitativeValue",
        "minValue": 0,
        "maxValue": 1,
        "unitCode": "DAY"
      },
      "businessDays": [
        "https://schema.org/Monday",
        "https://schema.org/Tuesday",
        "https://schema.org/Wednesday",
        "https://schema.org/Thursday",
        "https://schema.org/Friday"
      ],
      "cutoffTime": "14:00:00-05:00"
    },
    "shippingConditions": [
      {
        "@type": "ShippingConditions",
        "shippingDestination": {
          "@type": "DefinedRegion",
          "addressCountry": "US"
        },
        "orderValue": {
          "@type": "MonetaryAmount",
          "currency": "USD",
          "maxValue": 49.99
        },
        "shippingRate": {
          "@type": "MonetaryAmount",
          "value": 5.99,
          "currency": "USD"
        },
        "transitTime": {
          "@type": "ServicePeriod",
          "duration": {
            "@type": "QuantitativeValue",
            "minValue": 3,
            "maxValue": 5,
            "unitCode": "DAY"
          }
        }
      },
      {
        "@type": "ShippingConditions",
        "shippingDestination": {
          "@type": "DefinedRegion",
          "addressCountry": "US"
        },
        "orderValue": {
          "@type": "MonetaryAmount",
          "currency": "USD",
          "minValue": 50
        },
        "shippingRate": {
          "@type": "MonetaryAmount",
          "value": 0,
          "currency": "USD"
        },
        "transitTime": {
          "@type": "ServicePeriod",
          "duration": {
            "@type": "QuantitativeValue",
            "minValue": 3,
            "maxValue": 5,
            "unitCode": "DAY"
          }
        }
      }
    ]
  }
}
</script>
{%- endif -%}

Then test the page in Google's Rich Results Test. Settings in Search Console or Merchant Center override this markup.

Method

Built from Google's own spec

Every property follows Google's return policy and shipping policy documentation, including its rules for ranges and free shipping. Policies are one part of the product data agents read; grade the rest with the Product Schema Grader.

You fill inSchema propertiesGoogle says
Return windowreturnPolicyCategory, merchantReturnDaysRequired, or a link to the policy page
CountriesapplicableCountry, returnPolicyCountryRequired with the window
Return method and feesreturnMethod, returnFees, returnShippingFeesAmountRecommended
Refund type, conditions, labelrefundType, itemCondition, returnLabelSourceRecommended
Handling time and cut-offhandlingTime (ServicePeriod: duration, businessDays, cutoffTime)Recommended
Rates by destination and order valueshippingConditions: shippingDestination, orderValue, shippingRateRequired for shipping
Transit timetransitTime (ServicePeriod: duration)Recommended

FAQ

Questions merchants ask

What is MerchantReturnPolicy structured data?

It's schema.org markup that states your return policy in a form machines read: which countries it covers, how many days customers have, how they return items, who pays for return shipping, and how you refund. Google can show it next to your products and in knowledge panels, and it's the same information an AI shopping assistant needs to answer "can I return this?"

Where does the markup go?

Google documents a site-wide policy as part of your Organization: the return policy under hasMerchantReturnPolicy and shipping under hasShippingService. It recommends putting it on the page that describes the policy. The Shopify version here renders only on your refund and shipping policy pages, and pulls your store name and policy links from Liquid.

Doesn't my Shopify theme already output this?

Not from Shopify's structured_data filter: its product output covers price, availability and the offer URL, with no return or shipping policy. Some themes and apps add their own, so check a policy page in Google's Rich Results Test first. If an Organization is already there, give this one the same @id so Google reads them as one entity.

What if I also set returns and shipping in Search Console or Merchant Center?

Those win. Google's order of precedence runs from the Content API, to Merchant Center or Search Console settings, to product-level markup, and organization-level markup last. If your policies are already set in Search Console, this markup is a backup for other crawlers and AI agents, and the two should say the same thing.

Can I have different rates for different order values or countries?

Yes. Add one rate row per destination and order-value band, such as $5.99 under $50 and free from $50. Google picks the lowest-cost condition that applies, and the fastest one on a tie. Product-specific shipping still belongs in each product's offer, which overrides the site-wide policy.

Is anything I type sent to GigaCommerce?

No. The code is built in your browser. If you ask for the email, only the settings travel (country codes, numbers and options), and the server rebuilds the code from them. The store name and URL never leave the page, which is why the emailed plain version has placeholders.

Policies are the easy part of product data.

The Readiness Score grades the rest of what AI shopping agents read: catalog depth, product schema, page structure and checkout.