Agent-readiness report Demo · fictional store

Kestrel & Pine

kestrelpine.example Shopify 6 Oct 2026, 09:14 UTC 10 requests

Markdown JSON Re-scan
98 AAgent-ready

Agents can find, read and buy from this store.

Grade A, agent-ready. 0 failing checks, 1 warning, 22 passed.

  1. 01 Access 95/100

    Can an agent reach your pages at all? 7 pass · 1 warn · 0 fail · 30% weight

  2. 02 Understanding 100/100

    Can it read what you sell without running JavaScript? 7 pass · 0 warn · 0 fail · 30% weight

  3. 03 Trust 100/100

    Can it verify who you are and what the terms are? 4 pass · 0 warn · 0 fail · 20% weight

  4. 04 Transaction 95/100

    Can it start a purchase through a protocol? 4 pass · 0 warn · 0 fail · 20% weight

Fix these first

  1. 1
    Fast first byte

    Cache full HTML pages so they are served without hitting the application.

    Warn Access

01 / Access

Can an agent reach your pages at all?

95/100

Warn Fast first byte Slowest time to first byte: 690 ms. Aim for under 600 ms.

Why agents care

User-triggered agents fetch pages while someone waits for an answer, with short timeouts. A slow server is a skipped store.

What we found

/
182 ms
/products/alpine-merino-hoodie
690 ms

Fix

Cache full HTML pages so they are served without hitting the application.

  • Shopify serves HTML from its CDN. Slow TTFB usually means heavy Liquid loops or apps injecting server-side content: audit apps.
Pass Homepage answers an agent HTTP 200.

Why agents care

Every agent starts with an HTTP request. Anything other than a fast 200 with HTML ends the visit before it begins.

What we found

Status
200
Final URL
https://kestrelpine.example/
Redirects
0
Content-Type
text/html; charset=utf-8
Pass No bot wall in front of the store Bots and browsers receive the same page.

Why agents care

Bot-protection that challenges every non-browser client blocks AI agents even when robots.txt welcomes them. Agents cannot solve JavaScript challenges or CAPTCHAs.

What we found

As LegibleBot
HTTP 200
As a browser
HTTP 200
Size difference
0 KB
Pass XML sitemap lists your products Valid sitemap with 8 product URLs.

Why agents care

Crawlers that build AI search indexes discover product URLs from sitemaps far more reliably than from links, especially on large catalogues.

What we found

Location
https://kestrelpine.example/sitemap.xml
Found via
robots.txt
Type
Sitemap index (4 child sitemaps)
Product sitemap
https://kestrelpine.example/sitemap_products_1.xml?from=1&to=99 (8 URLs)
Pass Pages are not marked noindex No noindex directives on the pages scanned.

Why agents care

A noindex meta tag or X-Robots-Tag header tells search agents to drop the page from their index, even when robots.txt allows crawling.

What we found

Homepage
no directive
Product page
no directive
Pass robots.txt is valid robots.txt parses cleanly: 3 groups, 1 sitemap.

Why agents care

RFC 9309 says a robots.txt that errors with 5xx means "crawl nothing", and an HTML page served as robots.txt is noise. A clean file also points agents at your sitemap.

What we found

Groups
3
Sitemap lines
1
Unrecognised lines
none
Pass Lean HTML 6 KB of HTML for /products/alpine-merino-hoodie.

Why agents care

Agents download and tokenise your HTML. Megabytes of inline scripts and styles bury product facts and can hit size caps before the content.

What we found

HTML size
6 KB
Inline script
0 KB in 2 tags
Visible words
147
Info Training crawler policy 5 training crawlers blocked, 3 allowed.

Why agents care

Training crawlers (GPTBot, ClaudeBot, Google-Extended, CCBot and others) collect content for future models. Blocking them is a legitimate business choice and does not affect AI search visibility. Legible reports your stance but does not score it.

What we found

GPTBot (OpenAI)
Blocked
ClaudeBot (Anthropic)
Blocked
Google-Extended (Google)
Blocked
Applebot-Extended (Apple)
Allowed
Amazonbot (Amazon)
Allowed
meta-externalagent (Meta)
Allowed
CCBot (Common Crawl)
Blocked
Bytespider (ByteDance)
Blocked

02 / Understanding

Can it read what you sell without running JavaScript?

100/100

Pass Product facts are in the raw HTML Name, price and 147 words of content are in the server HTML.

Why agents care

Most AI fetchers do not run JavaScript. If the name, price and description only appear after scripts run, the agent sees an empty page and moves on.

What we found

Visible words (no JS)
147
Product name in text
Yes
Price in text
129.00
Pass Complete Product structured data Product schema is 100% complete.

Why agents care

Schema.org Product and Offer JSON-LD is the most reliable way for agents and shopping indexes to read price, currency, stock, identifiers, shipping and returns without guessing from layout.

What we found

name
Alpine Merino Hoodie
image
https://kestrelpine.example/cdn/shop/files/alpine-merino-hoodie-moss.jpg
description
A 260 g/m² merino wool hoodie with a scuba hood, flatlock seams and thumb loops.
offers.price
129
offers.priceCurrency
EUR
offers.availability
https://schema.org/InStock
sku
KP-AMH-MOSS-M
gtin / mpn
3856012345678
brand
Kestrel & Pine
shippingDetails
present
hasMerchantReturnPolicy
present
aggregateRating
present
Pass Organization and WebSite schema Organization and WebSite schema identify the store as "Kestrel & Pine".

Why agents care

Organization and WebSite markup tells an agent the store's official name, logo, URL and social profiles, so it can tell your shop apart from resellers and lookalikes.

What we found

Organization
Kestrel & Pine
WebSite
Kestrel & Pine
logo
present
sameAs
present
Pass OpenGraph product preview Complete OpenGraph (og:type product).

Why agents care

Chat interfaces render link previews and many agents fall back to OpenGraph when JSON-LD is missing. og:title, og:image and og:type are the minimum.

What we found

og:title
Alpine Merino Hoodie
og:description
260 g/m² merino hoodie with scuba hood and thumb loops.
og:image
https://kestrelpine.example/cdn/shop/files/alpine-merino-hoodie-moss.jpg
og:url
https://kestrelpine.example/products/alpine-merino-hoodie
og:type
product
Pass Canonical URL and language Canonical set, language en.

Why agents care

A canonical URL collapses filter and tracking variants into one product, and a lang attribute tells the agent which language and market the price and policies apply to.

What we found

canonical
https://kestrelpine.example/products/alpine-merino-hoodie
html lang
en
Pass One clear H1 with the product name H1 "Alpine Merino Hoodie" with 3 H2 sections.

Why agents care

Extractors use the heading outline to split a page into sections. One H1 naming the product, then H2s for details and reviews, makes the page easy to chunk.

What we found

H1
Alpine Merino Hoodie
H2
3
Pass llms.txt guide for agents Valid llms.txt with 3 sections and 7 links.

Why agents care

llms.txt is a proposed markdown index of a site's most useful pages. No major assistant has confirmed it uses the file, so it carries little weight here, but it is cheap and gives agents a clean map of products and policies.

What we found

Title
Kestrel & Pine
Summary blockquote
present
Sections
Products, Policies, Optional
Links
7
llms-full.txt
not found

03 / Trust

Can it verify who you are and what the terms are?

100/100

Pass Policy pages are linked Shipping, returns, privacy, terms and contact pages are all linked.

Why agents care

Before recommending a purchase, assistants look for shipping costs, the return window and who to contact. In the EU, consumers have a 14-day right of withdrawal for most online purchases (Directive 2011/83/EU, Art. 9), so returns terms are a deciding fact.

What we found

Shipping
https://kestrelpine.example/policies/shipping-policy
Returns
https://kestrelpine.example/policies/refund-policy
Privacy
https://kestrelpine.example/policies/privacy-policy
Terms
https://kestrelpine.example/policies/terms-of-service
Contact
https://kestrelpine.example/pages/contact
Pass Visible price matches structured data The visible price and JSON-LD agree on EUR 129.00.

Why agents care

When the price a shopper sees differs from the price in JSON-LD, agents quote the wrong number or distrust both. Google Merchant Center suspends listings for mismatches, and under EU consumer law the price shown must be the price charged.

What we found

JSON-LD price
EUR 129.00
Current prices on page
129.00
Microdata price
none
Pass HTTPS everywhere, with HSTS HTTPS with HSTS, and HTTP redirects to HTTPS.

Why agents care

Agents that hand a shopper off to checkout will not send them to an insecure page. HSTS proves the store never falls back to plain HTTP.

What we found

Final URL scheme
https
http:// redirects to https
yes (301)
Strict-Transport-Security
max-age=31536000; includeSubDomains
Pass Business identity is machine-readable Legal identity, address and contact details are all machine-readable.

Why agents care

Agents weigh whether a merchant is real. A legal name, postal address and a contact point in Organization schema are the strongest signals short of a marketplace listing.

What we found

address
present
email / telephone / contactPoint
present
legalName / vatID
present

04 / Transaction

Can it start a purchase through a protocol?

95/100

Pass UCP business profile Valid UCP profile (2026-08-25) with checkout. 1 suggestion.

Why agents care

The Universal Commerce Protocol (UCP), announced by Google in January 2026, lets agents discover a store's capabilities from /.well-known/ucp and complete checkout through a standard API. It powers buying in Google AI Mode and Gemini. Current spec version: 2026-08-25.

What we found

ucp.version
2026-08-25
Services
dev.ucp.shopping
Transports
rest, mcp
Capabilities
Checkout, Cart, Fulfillment (extension), Orders
Payment handlers
declared
Signing keys
none
$.keys
No signing keys published. Recommended so agents can verify signed responses.
Pass Machine-readable catalogue 2 catalogue signals detected.

Why agents care

Agent channels (ChatGPT shopping, Google AI Mode, Copilot) prefer a structured product feed they can refresh over crawling pages. A feed keeps price and stock current between crawls.

What we found

Signal
Shopify catalogue (syncable to agent channels through Agentic Storefronts)
Signal
Product sitemap (8 URLs)
Pass Add-to-cart works without scripts The product page has a server-rendered add-to-cart form or link.

Why agents care

Browser-driving agents (ChatGPT agent, Gemini in Chrome and similar) click through your real checkout. A plain form or link for add-to-cart in the server HTML is the most robust path when no protocol is available.

What we found

Cart form in HTML
yes
Add-to-cart link
no
Add-to-cart button
yes
Pass Agentic Commerce Protocol readiness (signal) All ACP prerequisites are in place. Enrolment itself happens with OpenAI and cannot be detected from outside.

Why agents care

OpenAI and Stripe's Agentic Commerce Protocol (ACP) launched in September 2025 to let shoppers buy inside ChatGPT. There is no public discovery file: merchants are onboarded through OpenAI and submit a product feed. In March 2026 OpenAI moved checkout back to merchants' own sites, so discovery in ChatGPT now depends on that feed and on crawlable pages. Legible scores the prerequisites, not enrolment.

What we found

OAI-SearchBot allowed
yes
Product structured data
yes
Feed source available
yes
Info Platform and remediation path Detected Shopify (high confidence).

Why agents care

What you can fix, and how fast, depends on the platform. Shopify merchants can switch most of this on; WooCommerce, Magento and custom stores need it built or configured.

What we found

Signal
cdn.shopify.com assets
Signal
Shopify global object
Signal
x-shopid / powered-by Shopify header

Fix

Fix order for Shopify:

  • Edit robots.txt.liquid in Online Store → Themes → Edit code → Templates (add the template if it does not exist).
  • Most Online Store 2.0 themes print Product JSON-LD from the product template. Check that barcode (GTIN), vendor (brand) and shipping/return policies are set in Shopify admin.
  • Enable Agentic Storefronts in Shopify admin. Shopify publishes and maintains the UCP profile for you.

This is what an AI agent gets from https://kestrelpine.example/products/alpine-merino-hoodie when it fetches the page without running JavaScript: the raw HTML on the left, the text it extracts on the right.

Raw HTML · what the server sent

6 KB
<header class="header">
<a href="https://kestrelpine.example/" class="header__heading-link">
<img src="https://kestrelpine.example/cdn/shop/files/kestrel-pine-logo.svg" alt="Kestrel &amp; Pine">
</a>
<nav class="header__inline-menu" aria-label="Main">
<ul class="list-menu">
<li>
<a href="https://kestrelpine.example/collections/jackets">Jackets</a>
</li>
<li>
<a href="https://kestrelpine.example/collections/midlayers">Midlayers</a>
</li>
<li>
<a href="https://kestrelpine.example/collections/packs">Packs</a>
</li>
<li>
<a href="https://kestrelpine.example/pages/repairs">Repairs</a>
</li>
<li>
<a href="https://kestrelpine.example/blogs/field-notes">Field notes</a>
</li>
</ul>
</nav>
</header>
<main id="MainContent" class="content-for-layout" role="main">
<section class="product">
<div class="product__media">
<img src="https://kestrelpine.example/cdn/shop/files/alpine-merino-hoodie-moss.jpg" alt="Alpine Merino Hoodie in moss green, front view">
</div>
<div class="product__info-container">
<p class="product__text caption">Kestrel &amp; Pine</p>
<h1>Alpine Merino Hoodie</h1>
<div class="price">
<span class="price-item price-item--regular">€129,00</span>
<small>incl. VAT</small>
</div>
<p class="product__rating">4.8 out of 5 from 312 reviews</p>
<form method="post" action="/cart/add" id="product-form" accept-charset="UTF-8" class="form" enctype="multipart/form-data">
<input type="hidden" name="id" value="4410">
<fieldset>
<legend>Size</legend>
<label>
<input type="radio" name="Size" value="S">S</label>
<label>
<input type="radio" name="Size" value="M" checked>M</label>
<label>
<input type="radio" name="Size" value="L">L</label>
</fieldset>
<button type="submit" name="add" class="product-form__submit button">Add to cart</button>
</form>
<p class="stock">In stock. Ships from Zagreb within 1 business day.</p>
<div class="product__description rte">
<p>Our warmest midlayer, cut long in the back for climbing and cycling. 260 g/m² merino jersey regulates temperature from 5&deg;C mornings to 20&deg;C afternoons and stays fresh for days.</p>
<ul>
<li>100% ZQ-certified merino wool, 260 g/m²</li>
<li>Scuba hood that fits under a helmet</li>
<li>Flatlock seams, thumb loops, kangaroo pocket</li>
<li>EAN 3856012345678</li>
</ul>
</div>
<h2>Shipping and returns</h2>
<p>Free delivery to Croatia, Slovenia, Austria and Germany in 1–4 business days. Free returns within 30 days, twice the 14 days EU law requires.</p>
<h2>Care</h2>
<p>Machine wash cold on the wool cycle. Dry flat. We repair holes, seams and cuffs for free, forever.</p>
</div>
</section>
</main>
<footer class="foote
<!-- … 1 KB more -->

Agent's-eye view · extracted markdown

~199 tokens
![Alpine Merino Hoodie in moss green, front view]Kestrel & Pine# Alpine Merino Hoodie€129,00 incl. VAT4.8 out of 5 from 312 reviewsIn stock. Ships from Zagreb within 1 business day.Our warmest midlayer, cut long in the back for climbing and cycling. 260 g/m² merino jersey regulates temperature from 5°C mornings to 20°C afternoons and stays fresh for days.- 100% ZQ-certified merino wool, 260 g/m²- Scuba hood that fits under a helmet- Flatlock seams, thumb loops, kangaroo pocket- EAN 3856012345678## Shipping and returnsFree delivery to Croatia, Slovenia, Austria and Germany in 1–4 business days. Free returns within 30 days, twice the 14 days EU law requires.## CareMachine wash cold on the wool cycle. Dry flat. We repair holes, seams and cuffs for free, forever.

Facts an agent looks for

8 of 8 found

FactWhat the agent getsSource
Product nameAlpine Merino HoodieHTML + JSON-LD
PriceEUR 129.00HTML + JSON-LD
AvailabilityInStockHTML + JSON-LD
BrandKestrel & PineJSON-LD
GTIN / EAN3856012345678JSON-LD
ShippingDeclared in JSON-LDHTML + JSON-LD
ReturnsDeclared in JSON-LDHTML + JSON-LD
RatingDeclared in JSON-LDHTML + JSON-LD

Extracted from https://kestrelpine.example/products/alpine-merino-hoodie without running JavaScript, the way most AI fetchers read a page.

Every request Legible made, as LegibleBot/1.0 unless noted. Capped at 15 per scan, 8 seconds and 2.5 MB each.

StatusURLPurposeTimeSize
200https://kestrelpine.example/Homepage (as LegibleBot)202 ms5.2 KB
200https://kestrelpine.example/Homepage (as a browser, for bot-wall comparison)202 ms5.2 KB
200https://kestrelpine.example/robots.txtrobots.txt84 ms0.7 KB
301http://kestrelpine.example/HTTP to HTTPS redirect probe50 ms0.0 KB
200https://kestrelpine.example/llms.txtllms.txt90 ms1.0 KB
404https://kestrelpine.example/llms-full.txtllms-full.txt130 ms0.1 KB
200https://kestrelpine.example/.well-known/ucpUCP business profile108 ms2.2 KB
200https://kestrelpine.example/sitemap.xmlXML sitemap140 ms0.4 KB
200https://kestrelpine.example/sitemap_products_1.xml?from=1&to=99Product sitemap160 ms1.3 KB
200https://kestrelpine.example/products/alpine-merino-hoodieProduct page (as LegibleBot)710 ms6.4 KB

Done for you

Want these fixed instead of listed?

Digital Age implements Legible's fixes on Shopify: robots and bot rules, complete product schema, policy pages, llms.txt and a UCP profile. Fixed scope, re-scanned before handover.

Ask for a fixed quote