Skip to content

EVAL-001Compare

Shipping cost and terms machine-readable

Checks whether an AI agent can read what shipping costs, and on what terms, from your product pages or your shipping policy.

What we check

We look for shipping terms in three places: OfferShippingDetails in the Product JSON-LD, a sentence on a product page that mentions shipping and states an amount or free delivery, and your shipping policy page, which must be HTML text rather than a PDF, an image or a wrapper around an embedded document.

Why it matters

Delivery cost is part of the total an agent compares and quotes. If it sits in a PDF, a screenshot or only appears at checkout, the agent cannot include it and may quote an incomplete total.

How we check

We read up to 3 product pages and the shipping policy page (from the crawl, or fetched once if only its link was found). PASS: OfferShippingDetails is present; or the HTML policy states an amount with a currency (symbol or ISO code, including local tokens such as zł, Kč and Ft) or commits to free delivery; or a product page states the cost. WARN: JSON-LD says shipping is free (rate 0) while the policy states a cost; the rates carry no currency; or only a delivery time is stated. FAIL: the policy is a PDF, an image, or an embedded document with under 200 characters of text beside it; it returns 404/410; it defers cost ("calculated at checkout"); or nothing is found. Text in closed accordions and image alt text count. SKIPPED when nothing relevant was captured, or when the policy page was blocked or refused to our crawler and no other source answered.

How to fix it

  1. Add offers.shippingDetails to your Product JSON-LD: an OfferShippingDetails with shippingRate, shippingDestination and deliveryTime.
  2. Publish the shipping policy as an HTML page, not a PDF or screenshot, stating cost per destination with an explicit currency, and the delivery time.
  3. Replace "calculated at checkout" with actual rates; if delivery is free, say so in words.
  4. Do not mark shipping free in JSON-LD if the policy charges for it.
  5. Link the policy from your footer with the word "Shipping" (or "Versand", "Dostawa" and so on).

What good looks like

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Linen shirt",
  "offers": {
    "@type": "Offer",
    "price": "49.00",
    "priceCurrency": "EUR",
    "shippingDetails": {
      "@type": "OfferShippingDetails",
      "shippingRate": { "@type": "MonetaryAmount", "value": "4.90", "currency": "EUR" },
      "shippingDestination": { "@type": "DefinedRegion", "addressCountry": "DE" },
      "deliveryTime": {
        "@type": "ShippingDeliveryTime",
        "transitTime": { "@type": "QuantitativeValue", "minValue": 2, "maxValue": 4, "unitCode": "DAY" }
      }
    }
  }
}
</script>

Shipping policy page (HTML text):
Germany: €4.90, 2-4 working days. Free delivery on orders over €60.

Sources