Readiness Playbook · 2026

The store says one price. The agent says another.

Shopify turned agentic storefronts on by default. AI agents now read your clients' pricing, stock and SKUs straight off the store and answer buyers with them — right or wrong. This is the 8-point check we run before anyone says the words “AI visibility.”

8 checks · 5 run in-browser~10 min for the front-end fiveNo sign-up · nothing leaves this page
Run the diagnostic
Live · one SKU, three systems
Trade price · SKU HE-4471
ERPowner£42.00
PIM£42.00
STOREFRONT£58.00
Agent quotesto a wholesale buyer£58.00

Nobody decided which system wins, so the agent states the storefront’s £58 as fact — to a buyer who was promised £42.

It's almost never crawlability — the agent reaches the page fine. It's context. When the ERP, the PIM and the storefront disagree on one field, nobody decided which system wins, so the agent states the contested value as fact.

Fix the source of truth first. Then carry it off-site — in that order. Checks 1–7 repair the record; check 8 is the only one you run afterward. Enrich and syndicate before the source is fixed and you just amplify the wrong value at scale.

The Mechanism

How an agent reads your store

Three systems write the record. One page publishes it. The agent reads that page and answers the buyer — it never sees the disagreement behind it, so a contested field is stated with total confidence. That's why the fix has an order.

Fig.1 — where the wrong number comes from
ERP£42 · owns pricePIMspecs · attributes3PL / stockqty · lead timewriteslast sync winswritesStorefront recordthe published page£42 ✕ £58 ?agent readsAI agentChatGPT · PerplexityBuyerhears £58states £58 as fact
The failure is context, not crawlability. The agent reaches the page fine — but the page carries a value no one reconciled, so the wrong number is passed downstream with confidence. Fix the record and the same pipeline carries the right one.
Fig.2 — why order matters: fix the record before you broadcast it
FIX THE RECORD — SOURCE OF TRUTH FIRST1234567coherent?pass8off-sitefeeds ·marketsbroadcast first → amplify the wrong value at scale
Checks 1–7 reconcile the record; the coherence gate is the point of no regret. Only a passing record earns check 8. Skip the gate — enrich and syndicate first — and every downstream surface repeats the error, farther and faster.

Agent Simulator

Watch the same store answer two ways

Pick a real buyer question, then flip the store between a contested record and a reconciled one. Same product, same agent — the answer, the source it cites, and the sale all change.

Store state
Buyer asks
What's the trade price of HE-4471?
AI agentWrong
It's £58.00.
read the storefront's retail field
Why: Quoted retail to a wholesale buyer promised £42 — check 1 & 2.

Method

How to score a store

Take one real, live store — ideally a B2B or wholesale client — and one representative product. Five checks run from any browser right now; three need admin access. This is a spot-check on one SKU, not a full catalog grade — a directional signal. Be honest: a crawler thinks a broken store looks perfect.

Step 01

Pick a store + one SKU

Real and live. A B2B or gated catalog is where the gaps hurt most and cost the most.

Step 02

Run the 5 in-browser checks

No login needed. Add the 3 backend checks when you have ERP or admin access.

Step 03

Read the band, start at #1

Score updates live below, and builds your fix-order punch-list. Source of truth first, off-site last.

The Diagnostic

The 8 checks

Source-of-truth first (1–7), off-site last (8). Expand any check for the 60-second test, the real-world failure, the engineer-grade fix with Shopify Plus and Magento 2 code, and exactly what the agent sees before and after. Tick a box only if the store genuinely passes.

01
Needs backend

Source-of-truth alignment

For one product, do the ERP, the PIM and the live storefront state the same price, stock and spec? When they disagree, the agent quotes whichever system won the last sync — not the value the client would choose.

Test it · 60s

Pick one SKU. Compare its price and stock in the ERP/admin, the PIM and the live page. Do all three match to the cent and the unit?

Real example

ERP holds a £42 trade price; the storefront renders £58 retail because the sync ran storefront-first. An agent quotes £58 to a wholesale buyer who was promised £42.

Engineer fix

Name one system as the owner of each field and reconcile the others to it before exposure. Render from a single source; decide deliberately which system wins on price and quantity.

{%- comment -%} price owner = ERP, mirrored to ONE metafield {%- endcomment -%}
{%- assign trade = product.metafields.erp.trade_price -%}
<span class="price" data-owner="erp">{{ trade | money }}</span>
Agent sees now"price": "58.00" // storefront won
After the fix"price": "42.00" // ERP owns it
Passesall three systems agree per field.
02
Front-endB2B

B2B / gated-catalog exposure

Is any tier price, contract price or restricted SKU readable by an unauthenticated agent? Default-on agentic storefronts can quietly publish pricing a B2B client never agreed to make public.

Test it · 60s

In a logged-out / incognito window, open a B2B product and ask an agent "what's the price of [SKU] at [store]?". If it returns tier or contract pricing without a login, it is exposed.

Real example

A wholesale catalog renders list price + MOQ publicly for SKUs the client only sells under NDA — now quotable by any agent, and by competitors.

Engineer fix

Gate pricing behind auth and serve agents only public fields. Decide deliberately what an unauthenticated agent may see.

{%- if shop.customer_accounts_enabled and customer -%}
  {{ product.price | money }}   {%- comment -%} tier price, gated {%- endcomment -%}
{%- else -%}
  <a href="/account/login">Log in for trade pricing</a>
{%- endif -%}
Agent sees now"offers":{"price":"42.00"} // NDA SKU, public
After the fix"offers":{"availability":"LoginRequired"}
Passesonly intended-public data is visible pre-auth.
03
Front-end

Agent answerability

Can an agent answer a real buyer question from the product data alone? If the answer lives in prose, a PDF, or a rep's head, the agent hedges or drops the SKU.

Test it · 60s

Ask ChatGPT or Perplexity a genuine buyer question about one SKU — "does [product] fit [use case]? lead time? MOQ?". Did it answer from the store, hedge, or move to a competitor?

Real example

Fit and compatibility live in a spec PDF, so the agent says "check with the seller" and recommends a rival that stated the same fact in plain attributes.

Engineer fix

Lift the top five buyer questions per category into structured, retrievable attributes — not description copy. If a human rep answers it daily, an agent should read it.

{%- comment -%} rep-answered facts as metafields, not body HTML {%- endcomment -%}
{{ product.metafields.spec.fitment }}
{{ product.metafields.spec.lead_time }}
{{ product.metafields.spec.moq }}
Agent sees nowfitment: "see the spec sheet (PDF)"
After the fixfitment: "fits 60cm openings" · moq: 12
Passesan agent answers real questions from the data.
04
Front-end

Schema legibility

Is the product data machine-parseable, or free-text and variant soup? Agents parse raw attributes, not marketing copy. Messy options get dropped from filtered recommendations.

Test it · 60s

Open one product's structured data / attributes. Are options clean typed values, or free text like "see notes", "call for size", "red-ish / large"?

Real example

Variant options entered as free text can't be mapped to a size or colour facet, so the SKU never surfaces when an agent filters "medium, blue, in stock."

Engineer fix

Normalize variants and custom options into typed attributes and valid product schema. Clean entity models in, parseable answers out.

// BEFORE — free-text soup
{ "@type":"Product", "name":"Chair",
  "description":"comes in red-ish / large, call for size" }
Agent sees now"description":"red-ish / large, call for size"
After the fix"additionalProperty":[{colour:"Oxblood"},{width_cm:58}]
Passesattributes are typed and parseable.
05
Needs backend

Stock & lead-time truthfulness

Is the stock and lead-time the agent reads actually current, or a stale 3PL/ERP sync? "Ships in 2 days" when it is really 9 doesn't just lose the order — it burns trust the client can't see happening.

Test it · 60s

For one in-stock and one backordered SKU, compare what an agent states about availability against the real ERP/3PL number right now.

Real example

The 3PL feed syncs nightly; a sold-out item still reads "in stock, ships in 2 days" for eighteen hours, and the agent keeps recommending it.

Engineer fix

Move to real-time availability, or expose an honest fallback range. Never let a stale value be stated as a confident fact.

{%- assign v = product.selected_or_first_available_variant -%}
{%- if v.inventory_management and v.inventory_quantity <= 0 -%}
  Backordered · {{ product.metafields.ops.lead_days }} day lead time
{%- else -%}In stock{%- endif -%}
Agent sees now"availability":"InStock","ships":"2 days" // stale
After the fix"availability":"BackOrder","leadTime":"9 days"
Passesavailability is current or honestly hedged.
06
Front-end

Cross-engine consistency

Do ChatGPT, Perplexity and Gemini describe the product consistently and correctly — or contradict each other and the store? Divergence is the tell that the underlying record is contested.

Test it · 60s

Ask all three engines the same factual question about one product. Do they agree with each other and with the store's own page?

Real example

Two engines cite an old spec from a cached marketplace listing, one cites the store — the buyer gets three different answers and trusts none.

Engineer fix

You can't patch this engine-by-engine. Strengthen the on-site record and its off-site echoes so the answers converge on the truth. Collapse duplicate URLs feeding stale specs.

{%- comment -%} one authoritative page; kill duplicate variant URLs {%- endcomment -%}
<link rel="canonical" href="{{ canonical_url }}">
Agent sees now3 engines → 3 different specs
After the fix3 engines → the store's current spec
Passesthe engines agree with the store and each other.
07
Front-end

Entity / identity correctness

When an agent talks about the product, does it name the client's store as the source — or a directory scrape, a marketplace listing, or a competitor? If the agent doesn't know who owns the answer, the client doesn't own the sale.

Test it · 60s

Ask "who sells [product] and where should I buy it?". Does the agent name the client's own store, or send the buyer to a reseller?

Real example

The agent recommends the product but links a marketplace reseller, because the brand's own entity signals are weaker than the reseller's.

Engineer fix

Reinforce entity and sameAs signals plus the on-site source of truth, so the store — not a directory — is the cited origin.

{ "@type":"Organization","name":"Client Store",
  "sameAs":["https://www.linkedin.com/company/...",
            "https://g.page/..."],
  "brand":{"@type":"Brand","name":"Client"} }
// offers.seller = the store, not a reseller
Agent sees nowseller → "Marketplace reseller"
After the fixseller → "Client Store (official)"
Passesthe store is named as the authoritative source.
08
Needs backendDo this last

Off-site carry

Only after 1–7: is the correct record being carried into surfaces the store doesn't own — feeds, marketplaces, agent catalogs? Enriching and syndicating before the source is fixed just amplifies the wrong value at scale.

Test it · 60s

Only if 1–7 pass: spot-check that a live feed / marketplace / agent-catalog entry matches the reconciled store record for one SKU.

Real example

A product feed still carries last quarter's price because enrichment ran before the source of truth was fixed — so wider reach means wider wrong.

Engineer fix

Pause syndication until 1–7 pass, then distribute off the clean record. Fix first, broadcast second — in that order.

# Only after 1–7 pass: build the feed FROM the reconciled record
GET /admin/api/2026-01/products.json
  -> map feed fields to the ERP-owned values
Agent sees nowfeed price: £58 (pre-fix export)
After the fixfeed price: £42 (matches reconciled record)
Passesoff-site data matches the reconciled record.

Read-out

Your score & fix order

Nothing here is stored or sent — it's yours. The band tells you whether off-site work will compound or amplify errors; the punch-list ranks what to fix first.

0
/ 8 passed
0–3

At risk

Agents are likely stating wrong things about these products right now. Nothing off-site helps until the record is fixed.

4–6

Contested

Visible in AI answers, but contested values leak — a price, a stock count, a B2B tier the client never meant to publish.

7–8

Ready

The record is coherent. Off-site and visibility work will compound instead of amplifying errors.

Your fix order

8 open

Open items, ranked in the order to fix them — source of truth first. Tick a check above to clear it here.

  1. 01criticalSource-of-truth alignmentName one system the owner of each field; reconcile the rest to it before exposure.
  2. 02criticalB2B / gated-catalog exposureGate tier and contract pricing behind auth; serve unauthenticated agents only public fields.
  3. 03highAgent answerabilityPromote the top five buyer questions per category into typed, retrievable attributes.
  4. 04highSchema legibilityNormalize variants and options into typed attributes and valid Product schema.
  5. 05highStock & lead-time truthfulnessMove to real-time availability, or expose an honest fallback lead-time range.
  6. 06mediumCross-engine consistencyStrengthen the on-site record and its off-site echoes so answers converge on the truth.
  7. 07mediumEntity / identity correctnessReinforce entity + sameAs signals so the store, not a directory, is the cited origin.
  8. 08mediumOff-site carryOnly after 1–7: build feeds off the reconciled record, then syndicate.
Where to start: fix in order — checks 1–2 first(source of truth + B2B exposure). Everything downstream just amplifies whatever those two say, so a mid score usually means “reconcile the record, then re-test.”
40

A live US home-furniture store: four AI agents were stating four core product facts wrong. After running this playbook, zero. It's a DTC store — the method is identical for B2B, where a wrong tier price or an exposed contract SKU costs more than a wrong spec. See the case →

Want it scored for you?

Send one client store URL.

Ideally a B2B one. We'll run these 8 checks and send back the punch-list. Worst case it's a list your build team closes. Best case it's a wedge you put in front of your own clients. We only look at public storefront pages, with your go-ahead — no admin access, no pitch, no price.

Request my free Quick Check

Prefer async? Email leo@luma-e.com with the URL.

PDF VERSION

Want this as a PDF?

Same 8 checks, formatted to print or forward to whoever owns the catalog. We email it — nothing else, no sequence-drip.

No spam, no sequence-drip. Unsubscribe anytime.