A

cocktailcourier.com

Audited 6 days ago· bigcommerce

62
Grade C

Agent-readiness across all five AI commerce surfaces.

Surfaces — click to filter

14 failing · 43 not checked · 57 shown

43 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://cocktailcourier.com/ for redirect behaviour, and parsed the Strict-Transport-Security header (value: "max-age=300; includeSubDomains;").

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 = 300s (need ≥ 15552000s = 180 days)

    What we found

    max-age=300; includeSubDomains;

    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 40 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 40 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

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 5 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: /terms-conditions/=404, /terms/=404, /terms=404, /terms-of-service=404, /policies/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 40 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
/.well-known/ucp profile is present with a `version` fielducp-profile-presentUCPUCP Profile

Publish /.well-known/ucp with at minimum a version field

Why this matters: Without `/.well-known/ucp`, Google's AI Mode can't identify your storefront as a UCP-conformant merchant.

Findings (1)

Inspected /.well-known/ucp for a parseable JSON document with a top-level version string.

How: Confirm ctx.wellKnownUcp is non-null and carries a non-empty version string (the only universally-required UCP profile field).

  • /.well-known/ucp is not reachable or not parseable as JSONHIGH

    /.well-known/ucp

    Serve a JSON document at /.well-known/ucp with a top-level version string (e.g., "2026-04-08").

How to fix · 2 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)

Wanted to inspect UCP root keys, but no profile was found.

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

  • No /.well-known/ucp profile presentHIGH

    /.well-known/ucp

    Publish /.well-known/ucp first (see ucp-profile-present).

How to fix · 2 steps · create a free account to viewCreate a free account →
FAILHIGH
UCP profile declares a valid shopping service entryucp-shopping-service-validUCPUCP Profile

Declare a shopping service entry with a recognised transport and an HTTPS endpoint

Why this matters: Without a valid shopping service entry, agents can recognise you as a UCP merchant but have no way to fetch your catalog.

Findings (1)

Wanted to walk the UCP profile's services[] for a valid shopping entry, but no profile was found.

How: List every services[] entry whose namespace is shopping (or contains shopping) and require at least one with transport ∈ {rest,mcp,a2a,embedded} AND a syntactically valid https:// endpoint.

  • No /.well-known/ucp profile presentHIGH

    /.well-known/ucp

    Publish /.well-known/ucp first (see ucp-profile-present), then declare the shopping service.

How to fix · 2 steps · create a free account to viewCreate a free account →
FAILHIGH
Every signing_keys[] entry is a valid JWKucp-signing-keys-validJWKS

Make every signing_keys[] entry a JWK with kty + kty-specific params

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

Findings (1)

Wanted to validate signing_keys[], but no UCP profile was found.

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.

  • No /.well-known/ucp profile presentHIGH

    /.well-known/ucp

How to fix · 3 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 — No UCP profile present; Cache-Control policy is not evaluable.

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

No UCP profile present; Cache-Control policy is not evaluable.

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

NAHIGH
/.well-known/ucp response Content-Type is application/jsonucp-profile-content-type-jsonUCP

Skipped — No UCP profile present; Content-Type is not evaluable.

Context: Agent runtimes that gate parsing on Content-Type will skip your profile if it's served as HTML or plain text.

Why this was skipped

No UCP profile present; Content-Type is not evaluable.

How: Check that the Content-Type header on /.well-known/ucp starts with application/json (optionally with a charset parameter).

NAHIGH
/.well-known/ucp is publicly fetchable with no authucp-profile-no-auth-requiredUCP ProfileUCP

Skipped — No UCP profile reachable; public-fetch evaluation deferred to ucp-profile-present.

Context: Agents fetch `/.well-known/ucp` without credentials — a 401 or 403 means they never see the profile.

Why this was skipped

No UCP profile reachable; public-fetch evaluation deferred to ucp-profile-present.

How: Confirm an unauthenticated GET to /.well-known/ucp returns a 2xx status.

NAHIGH
/.well-known/ucp returns 200 directly with no redirectsucp-profile-no-redirectsUCP

Skipped — No UCP profile present; redirect behaviour is not evaluable.

Context: Lightweight agent clients fetch `/.well-known/ucp` without following redirects — a 301/302 means they never see your profile.

Why this was skipped

No UCP profile present; redirect behaviour is not evaluable.

How: Inspect the final HTTP status of GET /.well-known/ucp and whether any 3xx redirect was followed to reach it.

NAHIGH
Each service satisfies the transport-conditional field requirementsucp-service-transport-conditional-fieldsUCP

Skipped — No UCP profile present.

Context: A service declared with the right transport but missing endpoint/schema is unreachable — agents can't negotiate or connect.

Why this was skipped

No UCP profile present.

How: For each services[] entry with a recognised transport, require the transport-conditional fields: rest/mcp → endpoint+schema; a2a → endpoint; embedded → schema.

NAHIGH
Each service `transport` is rest, mcp, a2a, or embeddeducp-service-transport-enumUCP

Skipped — No UCP profile present.

Context: An unrecognised transport leaves agents with no handler to dispatch — your service appears absent.

Why this was skipped

No UCP profile present.

How: For each services[] entry, require transport to be one of: rest, mcp, a2a, embedded.

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)

Parsed the homepage JSON-LD looking for an Organization/OnlineStore node with a contactPoint, but no Organization-class node is present.

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.

  • No Organization/OnlineStore JSON-LD on homepageMEDIUM

    /

    What we expected

    <script type="application/ld+json">{"@context":"https://schema.org","@type":"OnlineStore","name":"Example Store","url":"https://example.com","contactPoint":[{"@type":"ContactPoint","contactType":"customer service","email":"support@example.com"}]}</script>

    Add an Organization (or OnlineStore) JSON-LD block in the homepage <head> with a contactPoint.

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
Sitemap entries share the host of the containing sitemapsitemap-same-hostSitemap

Keep every sitemap entry on the sitemap's own host

Why this matters: Cross-host sitemap entries are silently dropped, so the off-host product URLs effectively don't exist for the crawler.

Findings (5)

Compared 424 <loc> entries against their sitemap host across 2 resource(s); 212 cross-host entries found.

How: For each resolved sitemap resource, parse the sitemap URL's host and compare it against every parsed <loc> URL's host.

  • Cross-host <loc> — sitemap host is cocktailcourier.com but entry is on www.cocktailcourier.comMEDIUM

    /sitemap.xmlsitemap host: cocktailcourier.com; entry host: www.cocktailcourier.com

    What we found

    https://www.cocktailcourier.com

    Remove the cross-host entry from this sitemap, or publish a separate sitemap on that host.

  • Cross-host <loc> — sitemap host is cocktailcourier.com but entry is on www.cocktailcourier.comMEDIUM

    /sitemap.xmlsitemap host: cocktailcourier.com; entry host: www.cocktailcourier.com

    What we found

    https://www.cocktailcourier.com/pages/cocktail-kit-gifts

    Remove the cross-host entry from this sitemap, or publish a separate sitemap on that host.

  • Cross-host <loc> — sitemap host is cocktailcourier.com but entry is on www.cocktailcourier.comMEDIUM

    /sitemap.xmlsitemap host: cocktailcourier.com; entry host: www.cocktailcourier.com

    What we found

    https://www.cocktailcourier.com/category/cocktail-kits

    Remove the cross-host entry from this sitemap, or publish a separate sitemap on that host.

  • Cross-host <loc> — sitemap host is cocktailcourier.com but entry is on www.cocktailcourier.comMEDIUM

    /sitemap.xmlsitemap host: cocktailcourier.com; entry host: www.cocktailcourier.com

    What we found

    https://www.cocktailcourier.com/category/cocktails/signature-cocktails

    Remove the cross-host entry from this sitemap, or publish a separate sitemap on that host.

  • Cross-host <loc> — sitemap host is cocktailcourier.com but entry is on www.cocktailcourier.comMEDIUM

    /sitemap.xmlsitemap host: cocktailcourier.com; entry host: www.cocktailcourier.com

    What we found

    https://www.cocktailcourier.com/category/cocktails/Limited-Edition

    Remove the cross-host entry from this sitemap, or publish a separate sitemap on that host.

How to fix · 2 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 — No UCP profile present.

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

Why this was skipped

No UCP profile present.

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

NAMEDIUM
Each service's `spec` URL origin matches its namespace authorityucp-service-spec-url-origin-matchesUCP

Skipped — No UCP profile present.

Context: A spec URL on an unrelated authority signals the service was copy-pasted from stale documentation — agents can't trust the conformance claim.

Why this was skipped

No UCP profile present.

How: For each service with a spec URL, require the URL origin to be a canonical UCP authority OR the host/path to include the namespace token.

NAMEDIUM
Every service `version` matches YYYY-MM-DDucp-service-version-date-formatUCP

Skipped — No UCP profile present; service version formats are not evaluable.

Context: Free-form version labels like `1.0` or `latest` defeat the version-pinning agents rely on, leaving them unable to negotiate the correct spec generation.

Why this was skipped

No UCP profile present; service version formats are not evaluable.

How: For each services[] entry, require version to be a string matching /^\d{4}-\d{2}-\d{2}$/.

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=300; includeSubDomains;") 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=300; includeSubDomains;

    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 →
NALOW
BreadcrumbList present on PDPsbreadcrumb-list-presentSchema.org

Skipped — Couldn't confidently identify product pages — only 0 of 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 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 40 sampled URLs carried product structured data, so product-level checks aren't applicable.

How: n/a

NALOW
UCP MCP-transport entries have valid HTTPS endpointsucp-mcp-transport-validUCP

Skipped — No UCP profile found; MCP transport validity is not evaluable.

Context: If you advertise MCP transport, agents will try to connect — broken or non-HTTPS endpoints fail silently and lose the integration.

Why this was skipped

No UCP profile found; MCP transport validity is not evaluable.

How: Filter services[] to entries where transport=mcp and validate that endpoint is an absolute https:// URL.

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 →
NAINFO
llms.txt present (informational)llms-txt-presentllms.txt

Skipped — Looked for /llms.txt at the site root; the fetcher returned no file.

Context: An /llms.txt manifest points agents at your feed and key pages without them having to guess.

Why this was skipped

Looked for /llms.txt at the site root; the fetcher returned no file.

How: Check whether the fetcher reached an /llms.txt at the site root. Informational only — no failure path per llmstxt.org being a voluntary community convention.

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 →