How to get your store recommended by AI shopping assistants
2026-07-31
VisibilityMost advice on how to get recommended by AI shopping assistants starts from search habits: keywords, rankings, content volume. That framing is wrong, and it is why the advice rarely works. An assistant helping someone choose a pair of running shoes is not ranking a list of pages. It is building a comparison table in memory, one row per candidate product, one column per thing the shopper cares about: price, availability, rating, delivery time, return window. Then it fills that table from whatever each merchant publishes.
Which leads to the fact that governs everything else in this post. Every cell the assistant cannot fill for you is a reason to prefer a merchant it can fill it for. Missing data is not neutral. It is a soft disqualification. The assistant does not report that your return policy was unreadable, it just recommends the store whose return policy was a field.
Absence is a decision, not a gap
When a person compares two products and one listing omits the delivery cost, they might click through and find out. An assistant working across ten candidates will not do that ten times. It works with what it has, and the merchant with the blank column is the easy one to drop.
This is the practical difference between the old model and the current one, which I have written about at more length in the switch was flipped. Search rewarded being findable. Agentic commerce rewards being comparable. If you are still wondering why your products never surface in the first place, that is a related but earlier problem: this post assumes you are reachable and asks what happens once you are in the candidate set.
The four fields that answer a buyer's real questions
AI shopping agents select merchants partly on structured data completeness, in particular AggregateRating, MerchantReturnPolicy, OfferShippingDetails and FAQPage. That list is not arbitrary. Each one maps to a question a buyer asks before spending money.
- AggregateRating: is it any good. Without it the assistant has no quality signal except your own marketing copy, which it discounts.
- MerchantReturnPolicy: what happens if I need to send it back. Return window, who pays return postage, which countries.
- OfferShippingDetails: when does it arrive and what does delivery cost. Handling time plus transit time, and the shipping rate as a number with a currency.
- FAQPage: the specific questions your category generates. Sizing, compatibility, care, warranty. This is where a niche product wins or loses.
Sextant checks these as product.aggregate_rating, merchant.return_policy, merchant.shipping_details and merchant.faq_schema. A fuller breakdown of the properties involved is in the schema fields AI agents read.
Identity is what makes you a competing offer
Before an assistant can compare your product to another merchant's, it has to know they are the same object. That is what GTIN, MPN and SKU do. A GTIN is the manufacturer barcode. An MPN is the manufacturer's part number. A SKU is your internal code, useful for disambiguation but not shared across merchants.
Publish none of them and you are not a cheaper option, you are an unmatched item sitting outside the comparison. The checks are product.sku and product.gtin.
Being selectable, not just visible
Three things separate a page an agent can read from an offer an agent can act on. Availability as https://schema.org/InStock rather than a green badge in your theme. Price as a number with an explicit priceCurrency. Policies expressed as fields rather than prose on a separate page, because "30 day returns, see our policy page" is not parseable and a merchantReturnDays value is.
Here is what a reasonably complete offer looks like:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Cedar Handled Garden Trowel",
"sku": "GT-1180",
"mpn": "GT1180",
"gtin13": "5012345678900",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "212"
},
"offers": {
"@type": "Offer",
"price": "24.00",
"priceCurrency": "GBP",
"availability": "https://schema.org/InStock",
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "GB",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnFees": "https://schema.org/FreeReturn"
},
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": "3.95",
"currency": "GBP"
},
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "GB"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": 0,
"maxValue": 1,
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": 1,
"maxValue": 3,
"unitCode": "DAY"
}
}
}
}
}
Every value there is a cell an assistant would otherwise leave blank.
Fix it in this order
Cheapest and highest leverage first.
-
Unblock the crawlers. Check robots.txt for a blanket disallow and for named blocks on GPTBot, ClaudeBot, OAI-SearchBot, PerplexityBot and Google-Extended. This is
crawl.blanket_disallowplus the five per-crawler checks such ascrawl.gptbot. Editing one file undoes everything below it if you skip this. -
Confirm Product JSON-LD exists at all. This is
product.jsonld. On Shopify most themes emit it. WooCommerce core emits no Product schema without a plugin, so a stock Woo store fails this and every schema check under it. -
Fill the offer. Price with currency and availability, which are
product.offer_priceandproduct.availability. These are usually already in your product data and just need mapping into the markup. -
Add identity. SKU on every product, GTIN or MPN wherever you legitimately have one.
-
Add merchant data. Return policy and shipping details as fields on the offer. This is the most commonly empty area and the one where a small edit changes the most columns.
-
Add ratings, then FAQPage. Ratings need real reviews, so this is slower. FAQPage you can write today from the questions your support inbox already answers.
-
Expose product URLs in your sitemap.
discovery.sitemap_products. A sitemap with only your category pages hides the exact URLs that carry all the work above.
None of this promises placement. It removes the reasons an assistant has to pass over you, which is the only part of the decision you control. If the whole concept is new, start with what agent readiness actually means.
If you want to see which of these columns your store currently leaves blank, run a free scan. It reads public pages only and takes under a minute.