← Guides

Shipping and returns AI agents can read

Why shipping and returns matter to an AI agent

When a shopper asks ChatGPT or Perplexity "where can I buy these sneakers in Chișinău", the assistant doesn't just hand over a link — it tries to answer the human's very next questions right away: how much is shipping, when does it arrive, and can I return it. Delivery and returns aren't fine print at the bottom of a product page; they're part of the buying decision. An agent that recommends your product effectively becomes a sales assistant: it needs to be able to say "arrives in 1–3 days across Moldova, free over 500 lei, 14-day returns". It reads that off your site — but only if the data is there in a machine-readable form.

If the terms are missing or hidden, the agent either stays silent about delivery — and the shopper moves on to a clearer competitor — or guesses the timeline and misleads the buyer. Logistics is its own category in the Botmetria AI-readiness audit, worth 15% of the 0–100 score. In our rating of 63 MD/RO stores the median score is just 38 out of 100, and logistics sags almost everywhere.

Give shipping and returns their own readable pages

Rule one: delivery and returns deserve their own pages with clean URLs, such as /shipping and /returns. Don't bury the terms:

Keep the copy plain and human: regions, delivery time in days, cost in your currency, the free-shipping threshold, the return window, and who pays for the return leg. In Romania that also means the mandatory 14-day EU right of withdrawal — spell it out. The more concrete the page, the less room a model has to invent. Not sure it's agent-readable? See the guide on clean Markdown for agents.

Mark it up inside the schema.org Offer

Copy for humans is only half the job. To let the agent take the data without errors, mirror it in JSON-LD inside your product Offer, next to price and availability. Two properties do the work: shippingDetails (delivery) and hasMerchantReturnPolicy (returns).

shippingDetails — time and cost

"shippingDetails": {
  "@type": "OfferShippingDetails",
  "shippingRate": { "@type": "MonetaryAmount", "value": "0", "currency": "MDL" },
  "shippingDestination": { "@type": "DefinedRegion", "addressCountry": "MD" },
  "deliveryTime": {
    "@type": "ShippingDeliveryTime",
    "handlingTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "DAY" },
    "transitTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 3, "unitCode": "DAY" }
  }
}

handlingTime is how long you take to pack the order, transitTime is how long the courier is on the road. Together they give the agent an honest "arrives in 1–4 days" range.

hasMerchantReturnPolicy — return terms

"hasMerchantReturnPolicy": {
  "@type": "MerchantReturnPolicy",
  "applicableCountry": "MD",
  "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
  "merchantReturnDays": 14,
  "returnMethod": "https://schema.org/ReturnByMail",
  "returnFees": "https://schema.org/FreeReturn"
}

Swap in your own values: if the customer covers return postage, use https://schema.org/ReturnShippingFees instead of FreeReturn. In short, here's what the agent reads out of the markup:

schema.org propertyWhat the agent learns
shippingRateshipping cost
deliveryTimehow many days to wait
shippingDestinationwhere you deliver
merchantReturnDaysreturn window in days
returnFeeswho pays for the return

WooCommerce stores running the Botmetria plugin don't have to hand-build this — it serves the Offer with price, availability and logistics automatically.

List the pages in llms.txt

llms.txt is a curated site map for language models. Add direct links to your shipping and returns pages so the agent finds them immediately instead of hunting through a menu:

## Store policies
- [Shipping](/shipping): 1–3 days across Moldova, free over 500 MDL
- [Returns](/returns): 14 days, we cover return postage

For the file itself, see the llms.txt for stores guide.

How to check

Common mistakes

FAQ

Do I need shippingDetails markup if the terms are already in plain text?

Text helps people, but an agent pulls data more reliably from JSON-LD. Markup removes any mismatch between the page and the product data, and lifts your score in the Logistics category (15% of the score).

What value goes in returnFees?

FreeReturn if you pay for return shipping; ReturnShippingFees if the customer does. It must match what your returns page states in plain text, or the agent will get contradictory signals.

Does shipping really affect the Botmetria AI score?

Yes. Logistics is a dedicated category worth 15% of the 0–100 score. Clear shipping and returns pages plus shippingDetails and hasMerchantReturnPolicy markup pull this block out of the red band.

Check your store for free

A 60-second audit shows how ready your store is for AI agents — and exactly what to fix first.

Run the free audit