A

stillerssoda.com

Audited 2 days ago· shopify

66
Grade C

Agent-readiness across all five AI commerce surfaces.

Surfaces — click to filter

16 failing · 36 not checked · 52 shown

36 checks couldn't run on this store — each is listed below with the reason. Your score reflects only what we could verify.

HALFCRITICAL
HTTPS enforced sitewide + HSTS (≥ 6-month max-age)https-and-hsts-enforcedHSTS

Enforce HTTPS sitewide and ship a Strict-Transport-Security header with max-age ≥ 6 months

Why this matters: AI agents and payment flows refuse plain HTTP; weak HSTS is treated as effectively no HSTS by trust-and-safety scanners.

Findings (1)

Confirmed the homepage is HTTPS (status 200), probed http://stillerssoda.com/ for redirect behaviour, and parsed the Strict-Transport-Security header (value: "max-age=7889238").

How: URL scheme + homepage status check, an http://host/ redirect probe through politeFetch, and a Strict-Transport-Security max-age parse (RFC 6797; ≥ 180-day threshold).

  • HSTS max-age is below the 6-month minimumCRITICAL

    /parsed max-age = 7889238s (need ≥ 15552000s = 180 days)

    What we found

    max-age=7889238

    What we expected

    Strict-Transport-Security: max-age=31536000; includeSubDomains

    Bump max-age to at least 15552000 (180 days). 31536000 (1 year) is required for preload-list inclusion.

How to fix · 3 steps · create a free account to viewCreate a free account →
NACRITICAL
Offer price + priceCurrency validoffer-price-currency-validMerchantSchema.org

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Agents need a price with a currency to show and compare your product.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

FAILHIGH
Contact page exposes email or phonecontact-with-email-or-phoneMerchant

Add a mailto: email link or tel: phone link to your contact page

Why this matters: Without an email or phone on your contact page, ChatGPT and Perplexity have no escalation path to surface for shoppers.

Findings (1)

Probed 4 candidate contact-page paths and none returned a 2xx response.

How: URL probe of contact paths; the first 2xx body is scanned for mailto: / tel: hrefs, plain emails (placeholder hosts excluded), and phone-shaped numbers.

  • No contact page reachableHIGH

    statuses: /pages/contact=404, /pages/contact-us=404, /contact=404, /contact-us=404

    Publish a contact page at /contact (or your platform's standard path) with a mailto: and/or tel: link.

How to fix · 3 steps · create a free account to viewCreate a free account →
FAILHIGH
Product pages discoverable without JavaScriptproducts-discoverable-no-jsMerchant

Make product pages discoverable without JavaScript

Why this matters: AI shopping crawlers do not run JavaScript; without server-rendered product pages, agents can't see your catalog.

Findings (1)

Counted product pages discovered by the non-JavaScript crawl. None were found — JS-only storefront, products missing from sitemap, or the crawl was blocked.

How: Count the product pages a non-JavaScript crawl could discover via the sitemap or initial HTML (no JS execution). The fetcher already attempted discovery; we read ctx.pdpSample.

  • No product pages discoverable from a non-JavaScript crawlHIGH

    /0 products in pdpSample after sitemap + HTML link discovery

    Server-render product pages and list every product URL in the sitemap.

How to fix · 3 steps · create a free account to viewCreate a free account →
FAILHIGH
Terms of service page reachableterms-of-service-page-reachableMerchant

Publish a terms of service page and link it from your site nav/footer

Why this matters: A published ToS is a baseline trust signal AI agents and ad networks use to decide whether to surface or accept a merchant.

Findings (1)

Probed 3 candidate ToS paths (nav-discovered + platform-conventional) and none returned a 2xx body.

How: Discover candidate URLs by scoring homepage nav/footer anchors for terms/tos/legal/conditions keywords, then append platform-conventional paths; probe each with politeFetch and pass on the first 2xx with ≥200 stripped-body chars.

  • No terms-of-service page reachable at any candidate URLHIGH

    statuses: /policies/terms-of-service=404, /terms=404, /terms-of-service=404

    Publish a ToS page at /terms (or your platform's standard slug) with ≥200 chars of body text.

How to fix · 2 steps · create a free account to viewCreate a free account →
FAILHIGH
Products are machine-discoverableproducts-machine-discoverableMerchantSitemap

Publish a product feed or a crawlable product sitemap

Why this matters: Agents build their catalog from a feed or by crawling product pages; if neither yields products, your store is invisible.

Findings (1)

Ran the discovery cascade (feed → platform catalog → typed sitemap → content-verified crawl). Method: none; verified 0 product pages of 7 sampled.

How: Read the product-discovery cascade result from ctx.discovery. Score by discovery method (feed / platform_api / sitemap_typed → pass when verifiedProductCount ≥ MIN_CONFIDENT_PRODUCTS; content_verified → partial; none or under-threshold → fail).

  • No reliable way for agents to discover your productsHIGH

    /method=none, verified=0

    Publish a product feed (Google Merchant XML or ACP) and declare it in /.well-known/ucp and /llms.txt, or ensure every product page carries Product JSON-LD and is listed in the sitemap.

How to fix · 3 steps · create a free account to viewCreate a free account →
FAILHIGH
UCP profile carries all four required top-level keysucp-profile-required-keysUCP

Add every required top-level key to the UCP profile

Why this matters: A profile missing one of the four required keys is treated as non-conformant — agent runtimes fall back to default behaviour and may skip the merchant.

Findings (1)

Profile is missing required key(s): signing_keys.

How: Read the profile root (or top-level ucp wrapper) and verify the presence of version, services, capabilities, and signing_keys keys.

  • Required top-level key signing_keys is missingHIGH

    /.well-known/ucp

    What we expected

    Add a top-level "signing_keys" field to the JSON document (empty array/object is fine).

    Set signing_keys at the root of the JSON document.

How to fix · 2 steps · create a free account to viewCreate a free account →
NAHIGH
MerchantReturnPolicy finite-window has positive merchantReturnDaysmerchant-return-policy-finite-daysReturns

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: AI agents quote your concrete return window in shopping cards. Without `merchantReturnDays`, your policy renders as 'has a return policy' without the headline number.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAHIGH
MerchantReturnPolicy satisfies Option A (country+category) or B (returnLink)merchant-return-policy-option-a-or-bReturnsSchema.org

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: A policy node missing both shapes is invisible to agents — they can't render it, link to it, or quote your return terms.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAHIGH
MerchantReturnPolicy node present on Product or Offermerchant-return-policy-presentReturnsSchema.org

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Without the entry-point return-policy node, agents can't render or quote your return terms — they fall back to platform defaults or skip your store.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAHIGH
Offer `availability` is a Schema.org URLoffer-availability-schema-urlSchema.org

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Agents suppress out-of-stock or ambiguous items; a valid availability URL keeps you eligible.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAHIGH
Offer JSON-LD carries shippingDetails (OfferShippingDetails)offer-shipping-details-presentSchema.orgShipping

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Without shippingDetails, AI agents fall back to vague defaults — they can't quote your rates, destinations, or delivery windows in shopping cards.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAHIGH
Sampled PDPs are not gated behind a login wall (401 / 403)pdp-not-behind-loginMerchant

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: PDPs behind a login wall are silently dropped from Google's merchant listing and from every AI agent surface.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAHIGH
No sampled PDP returns a noindex directivepdp-not-noindexMerchant

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: A noindex on the PDP makes it invisible to Google and ineligible for the merchant listing program.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAHIGH
Each PDP carries at most one Product JSON-LD nodepdp-single-product-pageMerchant

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Duplicate Product nodes on a single PDP cause Google's merchant scraper to drop the listing or pick the wrong variant.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAHIGH
Brand attribution on PDPsproduct-brand-attributionSchema.orgMerchant

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Brand on every product is a primary agent filter and a required feed field.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAHIGH
GTIN coverage on PDPsproduct-gtin-populatedSchema.orgMerchant

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: GTINs let agents match your product to the same item elsewhere; without them you lose cross-catalog matching.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAHIGH
Product `image` populatedproduct-image-populatedSchema.orgMerchant

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Agents show your product image in shopping cards; a missing image weakens or drops the listing.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAHIGH
Product JSON-LD present on PDPsproduct-jsonld-presentSchema.orgMerchant

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Product JSON-LD is how agents identify the canonical product entity without running JavaScript.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAHIGH
Product `name` populatedproduct-name-populatedSchema.orgMerchant

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: A product's name is the minimum an agent needs to list it.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAHIGH
Product JSON-LD includes `offers`product-offers-presentSchema.orgMerchant

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Without an Offer, agents can't see that the product is for sale.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAHIGH
UCP profile Cache-Control is shared-cacheable with max-age ≥ 60sucp-cache-headers-validUCP

Skipped — the runner did not surface transport metadata

Context: If your UCP profile says `no-cache`, agent runtimes re-fetch on every interaction — brittle at scale and prone to rate-limit failures.

Why this was skipped

Wanted to inspect the UCP profile's Cache-Control header, but the runner did not surface transport metadata.

How: Parse the Cache-Control header on the /.well-known/ucp response; require public, max-age ≥ 60, and no no-store/no-cache/private.

  • Transport metadata not available — runner update pendingLOW

    /.well-known/ucp

    This check activates once the runner (Task I1) populates ctx.wellKnownUcp.cacheControl.

NAHIGH
Every signing_keys[] entry is a valid JWKucp-signing-keys-validJWKS

Skipped — Profile declares no signing_keys; JWK validation has no entries to evaluate.

Context: Malformed JWK entries are rejected silently by agents — signed payloads cannot be verified and the merchant loses trust signal.

Why this was skipped

Profile declares no signing_keys; JWK validation has no entries to evaluate.

How: Walk signing_keys[] and validate each entry per RFC 7517 §4.1 (kty required) + RFC 7518 §6 (kty-specific required parameters). kid is OPTIONAL per RFC 7517 §4.5 and not enforced here.

FAILMEDIUM
HSTS policy carries the includeSubDomains directivehsts-include-subdomainsHSTS

Add includeSubDomains to your Strict-Transport-Security header

Why this matters: Without includeSubDomains, an HTTP subdomain (staging, mail, …) can be used to attack the apex's cookies.

Findings (1)

Inspected the homepage Strict-Transport-Security header ("max-age=7889238") and the includeSubDomains directive is absent.

How: Parse the homepage Strict-Transport-Security header for the includeSubDomains directive (RFC 6797 §6.1.2).

  • HSTS header is missing the includeSubDomains directiveMEDIUM

    /

    What we found

    max-age=7889238

    What we expected

    Strict-Transport-Security: max-age=31536000; includeSubDomains

    Append ; includeSubDomains to your STS header once every subdomain you operate supports HTTPS.

How to fix · 2 steps · create a free account to viewCreate a free account →
FAILMEDIUM
Organization/OnlineStore JSON-LD with contactPoint on homepageorganization-jsonld-with-contactSchema.org

Add an Organization (or OnlineStore) JSON-LD block to your homepage with a contactPoint

Why this matters: Organization markup with a contactPoint tells AI agents who you are and how a shopper can reach you for support.

Findings (1)

Found a homepage Organization node but its contactPoint is missing both email and telephone.

How: Parse homepage <script type="application/ld+json"> blocks, flatten @graph, and look for an Organization/OnlineStore/Store node with a contactPoint carrying email or telephone.

  • Homepage Organization node has no contactPoint with email or telephoneMEDIUM

    /

    What we expected

    "contactPoint": [{"@type":"ContactPoint","contactType":"customer service","email":"support@example.com","telephone":"+1-555-123-4567"}]

    Add a contactPoint object with at least one of email or telephone.

How to fix · 3 steps · create a free account to viewCreate a free account →
FAILMEDIUM
Third-party review-platform integration detectedreview-app-detectedSchema.org

Install a third-party review platform so agents see syndicated reviews on your storefront

Why this matters: Third-party review widgets feed the ratings AI agents trust when ranking merchants.

Findings (1)

Scanned the homepage and 0 sampled PDPs for 8 review-platform asset fingerprints; none matched.

How: Substring scan of homepage and sampled PDP HTML for known review-platform asset fingerprints (judge.me, yotpo, stamped.io, reviews.io, okendo, loox, trustpilot, bazaarvoice).

  • No third-party review-platform integration detectedMEDIUM

    none of 8 fingerprints matched across 1 source

    Install a Judge.me / Yotpo / Loox / Okendo / Stamped / Reviews.io / Trustpilot / Bazaarvoice widget on your storefront.

How to fix · 3 steps · create a free account to viewCreate a free account →
FAILMEDIUM
Returns/refund policy page reachablereturns-policy-page-reachableMerchant

Publish a returns policy page and link it from your site nav/footer

Why this matters: AI agents quote return terms to shoppers; missing returns pages are a baseline trust failure that suppresses you from agentic shopping cards.

Findings (1)

Probed 5 candidate returns-policy paths (nav-discovered + platform-conventional) and none returned a 2xx body.

How: Discover candidate URLs by scoring homepage nav/footer anchors for return/refund/exchange keywords, then append platform-conventional paths; probe each with politeFetch and pass on the first 2xx with ≥200 stripped-body chars.

  • No returns/refund policy page reachable at any candidate URLMEDIUM

    statuses: /policies/refund-policy=404, /policies/return-policy=404, /returns=404, /refund-policy=404, /return-policy=404

    Publish a returns/refund policy page at /returns (or your platform's standard slug) with ≥200 chars of body text.

How to fix · 2 steps · create a free account to viewCreate a free account →
FAILMEDIUM
Shipping policy page reachableshipping-policy-page-reachableMerchant

Publish a shipping policy page and link it from your site nav/footer

Why this matters: Agents quote shipping terms to shoppers; without a reachable shipping policy they fall back to vague defaults or skip your store.

Findings (1)

Probed 4 candidate shipping-policy paths (nav-discovered + platform-conventional) and none returned a 2xx body.

How: Discover candidate URLs by scoring homepage nav/footer anchors for shipping/delivery/dispatch keywords, then append platform-conventional paths; probe each with politeFetch and pass on the first 2xx with ≥200 stripped-body chars.

  • No shipping policy page reachable at any candidate URLMEDIUM

    statuses: /policies/shipping-policy=404, /shipping=404, /shipping-policy=404, /pages/shipping=404

    Publish a shipping policy page at /shipping-policy (or your platform's standard slug) with ≥200 chars of body text and link it from your footer.

How to fix · 2 steps · create a free account to viewCreate a free account →
HALFMEDIUM
Sitemap resolvable and includes at least one product URLsitemap-resolvable-with-productsSitemap

Publish a sitemap containing product URLs

Why this matters: A sitemap that omits product URLs forces every crawler into slower, less complete frontier discovery.

Findings (1)

Resolved an XML sitemap with 7 <loc> entries, but none look like product URLs.

How: Parse <loc> entries from the resolved sitemap (or sitemap index) and classify each against product-URL patterns (/products/..., /product/..., /p/<id>, etc.).

Coverage

0/7 · 0%

  • Sitemap reachable but contains no product URLsMEDIUM

    /sitemap.xml7 total <loc> entries, 0 product-shaped (0%)

    Add product URLs (e.g., /products/<handle>) to the sitemap or include the product-section sitemap in your sitemap index.

How to fix · 3 steps · create a free account to viewCreate a free account →
NAMEDIUM
MerchantReturnPolicy merchantReturnLink URL is reachablemerchant-return-link-reachableReturns

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: A broken return-link makes Option B policies invisible — agents can't render or follow the link.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAMEDIUM
MerchantReturnPolicy applicableCountry uses ISO 3166-1 alpha-2 codesmerchant-return-policy-applicable-country-isoReturns

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: A non-ISO country is dropped silently; the policy looks present but never reaches the merchant-listing rich result.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAMEDIUM
MerchantReturnPolicy returnPolicyCategory uses valid Schema.org enummerchant-return-policy-category-enumReturns

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: An invalid category is silently dropped — your policy looks present in the source but never renders in Google's return-policy rich result.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAMEDIUM
OfferShippingDetails shippingDestination is a valid DefinedRegionoffer-shipping-destination-validShipping

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Without a valid destination region, your shipping rate has no scope — Google can't decide whether to render it for a given shopper's country.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAMEDIUM
OfferShippingDetails shippingRate is a valid MonetaryAmountoffer-shipping-rate-validShipping

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: An invalid rate object is silently dropped; agents can't quote your shipping cost in shopping cards.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAMEDIUM
Product `brand` is a string or Brand/Organization objectproduct-brand-string-or-objectSchema.orgMerchant

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Brand on every product is a primary agent filter and a required feed field.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAMEDIUM
Product `description` presentproduct-description-presentSchema.orgMerchant

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Agents quote your description to answer shopper questions; an empty description gives them nothing to work with.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAMEDIUM
Product `sku` populatedproduct-sku-populatedSchema.orgMerchant

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: A stable SKU lets agents track and re-identify your product across catalogs.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAMEDIUM
Product title not a placeholderproduct-title-no-placeholdersSchema.org

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Placeholder titles like Default Title make products look broken to agents.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NAMEDIUM
Each capability has version + spec + schemaucp-capability-required-fieldsUCP

Skipped — Profile declares no capabilities; required-field checks have nothing to evaluate.

Context: Capabilities missing version/spec/schema can't be matched against agent support tables — agents skip them silently.

Why this was skipped

Profile declares no capabilities; required-field checks have nothing to evaluate.

How: For each capabilities[] entry, require non-empty string values for version, spec, and schema.

FAILLOW
HSTS policy carries the preload directivehsts-preload-directiveHSTS

Add preload to your Strict-Transport-Security header and submit to hstspreload.org

Why this matters: HSTS preload-list inclusion is the strongest downgrade protection available — first-time visits are protected too.

Findings (1)

Inspected the homepage Strict-Transport-Security header ("max-age=7889238") and the preload directive is absent.

How: Parse the homepage Strict-Transport-Security header for the preload directive (hstspreload.org vendor extension to RFC 6797).

  • HSTS header is missing the preload directiveLOW

    /

    What we found

    max-age=7889238

    What we expected

    Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

    Append ; preload after includeSubDomains and submit your domain at https://hstspreload.org/.

How to fix · 3 steps · create a free account to viewCreate a free account →
FAILLOW
About page reachable with substantive copyabout-page-reachableMerchant

Publish a substantive About page at a standard URL

Why this matters: Perplexity and ChatGPT use About-page text to summarise your brand to shoppers in answer responses.

Findings (1)

Probed 4 candidate About-page paths and none returned a 2xx body.

How: URL probe of platform-specific about-page paths via politeFetch; the first 2xx response whose HTML-stripped body length is ≥ 200 chars counts as a pass.

  • No About page reachable at any standard URLLOW

    statuses: /pages/about=404, /pages/about-us=404, /about=404, /about-us=404

    Publish an About page at /about (or your platform's standard path) with ≥ 200 chars of body text.

How to fix · 3 steps · create a free account to viewCreate a free account →
NALOW
BreadcrumbList present on PDPsbreadcrumb-list-presentSchema.org

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Breadcrumbs help agents understand where a product sits in your catalog.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NALOW
Alt text on at least 80% of PDP imagesimage-alt-text-coverageWCAG

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Alt text is the only text description AI agents and screen readers have for your product imagery.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NALOW
Product images meet Google’s 50,000-pixel area thresholdimage-area-50k-pixelsMerchant

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Tiny product images get dropped from Google’s shopping rich-result modules and are unhelpful to AI agents quoting your product visually.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NALOW
MerchantReturnPolicy enrichment enums use valid Schema.org valuesmerchant-return-policy-enums-validReturns

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Invalid enrichment values are dropped silently, leaving merchants confused about why their rendered policy is missing fields they configured.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NALOW
Offer `itemCondition` is canonical when presentoffer-item-condition-when-not-newSchema.orgMerchant

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: When you declare itemCondition, agents and Google require a canonical Schema.org IRI; free-text values get ignored.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NALOW
OfferShippingDetails deliveryTime is a valid ShippingDeliveryTimeoffer-shipping-delivery-time-validShipping

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Without populated handling/transit times, agents can't quote a delivery window in shopping cards.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NALOW
Product `aggregateRating` presentproduct-aggregate-rating-presentSchema.org

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Review ratings are a trust signal agents use to rank and filter products.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NALOW
Product title quality (present, not all-caps)product-title-qualityMerchantSchema.org

Skipped — Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

Context: Empty or all-caps product titles signal low quality to agents and trigger Google Merchant Center policy flags.

Why this was skipped

Couldn't confidently identify product pages — only 0 of 7 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NALOW
Declarative WebMCP forms are validwebmcp-declarative-tools-validwebmcp

Skipped — No declarative WebMCP forms found on the homepage or sampled product pages. WebMCP is an optional, experimental browser-agent capability — not in scope until advertised.

Context: If you expose WebMCP tools, browser agents call them directly instead of scraping — but a tool missing its name or description is unusable to the agent.

Why this was skipped

No declarative WebMCP forms found on the homepage or sampled product pages. WebMCP is an optional, experimental browser-agent capability — not in scope until advertised.

How: Parse the homepage and sampled PDP HTML for <form> elements carrying WebMCP attributes (toolname/tooldescription/toolautosubmit), then validate each against the 5 declarative-form rules.

FAILINFO
Apple Pay markers detected (informational)apple-pay-detectedSchema.org

Enable Apple Pay through your payment processor (informational only)

Why this matters: Apple Pay is a checkout-quality signal for human shoppers — informational only, does not affect the agent-readiness score.

Findings (1)

Scanned the homepage and 0 sampled PDPs for Apple Pay markers; none matched.

How: Substring match on known Apple Pay SDK/markup signatures (ApplePaySession, apple-pay-button, /apple-developer-merchantid-domain-association) across the homepage and every sampled PDP HTML.

  • No Apple Pay markers detected on the homepage or PDPsINFO

    /

    Enable Apple Pay in your payment processor's dashboard (Stripe / Adyen / Braintree). Informational only — does not affect the score.

How to fix · 3 steps · create a free account to viewCreate a free account →
FAILINFO
Google Pay markers detected (informational)google-pay-detectedSchema.org

Enable Google Pay through your payment processor (informational only)

Why this matters: Google Pay is a checkout-quality signal for human shoppers — informational only, does not affect the agent-readiness score.

Findings (1)

Scanned the homepage and 0 sampled PDPs for Google Pay markers; none matched.

How: Substring match on known Google Pay SDK/markup signatures (pay.google.com/gp/p/js/pay.js, google.payments.api, <google-pay-button) across the homepage and every sampled PDP HTML.

  • No Google Pay markers detected on the homepage or PDPsINFO

    /

    Enable Google Pay in your payment processor's dashboard (Stripe / Adyen / Braintree). Informational only — does not affect the score.

How to fix · 3 steps · create a free account to viewCreate a free account →
Engine 2.0.0 · ACP 2026-04-17 · UCP 2026-04-08

Get notified when this score drops.

Paid plans auto-rescan your store weekly and email you when anything changes — incl. when ACP/UCP ships a new spec.

See plans · from $29/mo →