Agent-discoverability audit — portfolio gap analysis + dare.co.uk staging
2026-05-15 · friday morning · pre-standup substrate
Triggered by an audrey sitemap inspection that surfaced Shopify’s silently-shipped UCP rollout. Audrey is now the most agent-discoverable property in the portfolio without Dan having done anything; this audit names the gap and proposes the rollout that brings dare + dogwood to the same standard with hand-built equivalents, plus the search-engine-agent layer (Schema.org rich results) that GSC just flagged on audrey.
TL;DR
- audrey is on UCP v2026-04-08 via Shopify — six agent surfaces live (
/llms.txt,/llms-full.txt,/agents.md,/.well-known/ucp,/api/ucp/mcp,/sitemap_agentic_discovery.xml). Plumbing came free; the work shifts to owning the default Shopify-generated bio + closing three GSC product-snippet gaps (aggregateRating,review,priceValidUntil). - dare.co.uk has a hand-authored
/llms.txt(good, 45 lines) but the rest of the modern agent stack is missing — five files to build (llms-full.txt,agents.md,.well-known/agent.json,sitemap_agentic_discovery.xml, XSL stylesheet for human-readability). Staging artefacts proposed in this audit. - dogwood.house has hand-authored
/llms.txt(decent, 22 lines) + a/.well-known/agent.jsonwith placeholder capabilities. The agent-stack target isbeta.dogwood.house(flat HTML, Dan-controlled) rather than the Squarespace primary — same dare pattern, different host. - The “human-readable like dare.co.uk/sitemap.xml” requirement applies across the board: every agent-discovery file should be machine-parseable AND browser-friendly. XSL stylesheets are the lever for XML; small HTML companion views are the lever for JSON.
The two-layer frame
| Layer | Consumers | Surfaces |
|---|---|---|
| LLM-agent layer | Claude / ChatGPT / Perplexity reading the site for citations and recommendations | llms.txt, llms-full.txt, agents.md, .well-known/agent.json, .well-known/ucp (commerce only), sitemap_agentic_discovery.xml, MCP endpoints |
| Search-engine-agent layer | Googlebot / Bing / DuckDuckBot consuming for rich results and product snippets | sitemap.xml with XSL, robots.txt, Schema.org JSON-LD (Article, Product, Service, Event, LocalBusiness), Open Graph / Twitter Card |
Both layers want comprehensive + human-readable. Audrey’s Shopify stack nails the LLM-agent layer but ships XML/JSON raw. Dare’s sitemap.xml uses XSL to render browsable HTML. The pattern to ship across the portfolio = both, on both layers.
Portfolio gap matrix
| File | dare.co.uk | beta.dogwood.house | audreyinc.com |
|---|---|---|---|
/llms.txt |
✓ 200 — 45 lines, custom-authored, good voice | ✓ 200 — 22 lines, custom, decent (lives on dogwood.house currently — needs port to beta) |
✓ 200 — Shopify-generated, bio reads like a CV, needs ownership |
/llms-full.txt |
✗ 404 — STAGING BUILT | ✗ — build | ✓ 1464B Shopify-generated |
/agents.md |
✗ 404 — STAGING BUILT | ✗ 301 — build | ✓ 2445B Shopify UCP boilerplate |
/.well-known/agent.json |
✗ 404 — STAGING BUILT | ✓ 200 on dogwood.house (capabilities placeholders) — port + finish |
✗ — folds into UCP discovery |
/.well-known/ucp |
N/A (not commerce) | N/A (service, not commerce) | ✓ 3818B Shopify-generated, v2026-04-08 |
/sitemap_agentic_discovery.xml |
✗ — STAGING BUILT (with XSL) | ✗ — build | ✓ Shopify-generated (XML-raw, no XSL) |
| XSL stylesheet for the above | ✗ — STAGING BUILT | ✗ — build | ✗ (Shopify ships raw) — could ship via CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Worker if Dan wants |
robots.txt |
✓ | ✓ | ✓ Shopify with explicit agent policy (bans buy-for-me) |
| Article JSON-LD | ✓ on every article | TBD | N/A |
| Product JSON-LD | N/A | N/A | ✓ ProductGroup + variants — GSC-flagged gaps |
| Service JSON-LD | N/A | ✗ — build for boarding service | N/A |
| Event JSON-LD | N/A | TBD for member events | ✗ — build for pop-ups / ladies-nights |
Per-site detail
audreyinc.com — Shopify-shipped, but with three GSC flags
What Shopify made canonical for free:
The auto-generated bio at /llms.txt:
“Luxury limited edition silk scarves by Audrey Lam a Brooklyn Brit, Made in Italy & NYC. from Central St Martins. Former Calvin Klein & Diesel textile designer.”
This is now the de facto description any Claude / ChatGPT / Perplexity gets when they ask “what’s audreyinc.com?” Issues:
- Punctuation rough (“Lam a Brooklyn Brit,” missing comma; “& NYC. from Central” missing space)
- Reads as CV bullets, not brand prose
- Uses
scarvesplural ✓ — accidentally addresses the Scarface brand-collision noted in yesterday’s keyword research
Fix: edit Shopify SEO settings → re-publishes through llms.txt automatically. ~5 minutes, highest-leverage single action in this audit. Suggested rewrite:
“Audrey is a luxury silk-scarf house designed by Audrey Lam — a Brooklyn-based British designer trained at Central Saint Martins, formerly of Calvin Klein and Diesel. Limited-edition pieces, printed in Italy and finished in New York. Each scarf is a wearable artwork; the line is built for gift-giving, cultural meaning, and the long wardrobe.”
Search Console product-snippet gaps (just flagged):
| Missing field | Count | Layer | Fix |
|---|---|---|---|
aggregateRating |
4 items | Search-engine-agent | Install a reviews app (Judge.me / Loox / Stamped). Without real reviews this stays empty; reviews JSON-LD populates automatically once collected |
review |
4 items | Search-engine-agent | Same — reviews are the prerequisite |
priceValidUntil (in hasVariant.offers) |
— | Search-engine-agent | Shopify theme template edit — add a sensible expiry (e.g. 1 year from creation) to the Offer block. Without it Google warns “stale price”. Pure-code fix, addressable today |
The reviews-app install is a dual-layer fix: rich results in Google AND brand-trust signal for LLM agents forming recommendations (social proof is weighted by both).
dare.co.uk — five files to add, staging built
Current state: /llms.txt is the only modern-agent surface. The rest of the canonical stack is missing.
Staging live for review: https://dare-agent-stack-preview.pages.dev/
Deployed 2026-05-15 to its own Cloudflare Pages project (dare-agent-stack-preview) so the files are browsable at HTTPS — the XSL stylesheet renders client-side, which file:// can’t reliably do.
| Direct file | Preview URL |
|---|---|
| llms.txt | https://dare-agent-stack-preview.pages.dev/llms.txt |
| llms-full.txt | https://dare-agent-stack-preview.pages.dev/llms-full.txt |
| agents.md | https://dare-agent-stack-preview.pages.dev/agents.md |
| .well-known/agent.json | https://dare-agent-stack-preview.pages.dev/.well-known/agent.json |
| sitemap_agentic_discovery.xml (renders via XSL — open in a browser) | https://dare-agent-stack-preview.pages.dev/sitemap_agentic_discovery.xml |
| agent-sitemap.xsl (raw stylesheet) | https://dare-agent-stack-preview.pages.dev/agent-sitemap.xsl |
Note: the <loc> entries inside sitemap_agentic_discovery.xml point at www.dare.co.uk URLs (production targets), not the preview URLs. That’s intentional — the file’s content is what will ship to production; the preview is just the rendering vehicle.
Staging artefacts on disk at ~/Downloads/dare-agent-stack-staging/:
| File | Purpose | Format |
|---|---|---|
llms.txt |
Extension of existing, with cross-refs to the new files + the resurrection narrative | text/plain |
llms-full.txt |
Extended brand bio + content rings + editorial cadence | text/plain |
agents.md |
Agent integration instructions — browse archive, search, cite, contact | text/markdown |
.well-known/agent.json |
Agent profile, capabilities, contact, protocol version | application/json |
sitemap_agentic_discovery.xml |
Sitemap index pointing at the four above | application/xml |
agent-sitemap.xsl |
XSL stylesheet rendering the sitemap as a browsable HTML page | application/xml |
Voice: DARE-register per feedback_dare_brand_voice_four_pillars — first-person declarative, designer’s-house framing, four pillars (inspiration / conviction / optimism / innovation), DARE all-caps for entity refs.
Narrative spine: the resurrection arc from project_dare_canonical_narrative_frame — failed WordPress site brought back as a headless modern stack. The agent-discoverability work is part of that arc: agent-friendly by design, not retrofitted.
beta.dogwood.house — target host clarified
Confirmed 2026-05-15 — dogwood.house is Squarespace (consumer site), but beta.dogwood.house will be flat HTML (Dan-controlled). The agent-stack ships on beta, not the Squarespace primary.
Pattern is identical to dare’s: drop files into the flat HTML repo, push, ship. The existing custom /.well-known/agent.json on dogwood.house (with placeholder booking_inquiry: false / availability_check: false capabilities) should be ported to beta and the capabilities flipped to true once the corresponding endpoints exist.
Voice: per project_dogwood_service_strategy — “Soho House for dogs” country home, NYC/Brooklyn/Greenwich/Hamptons pick-up. Different register from DARE — warmer, service-oriented, member-club feel.
Service JSON-LD is the search-engine-agent equivalent for dogwood — Service with serviceType, areaServed, provider. Plus optionally LocalBusiness if Dan wants the physical address indexed.
Recommendations (sequenced)
- Today, 5 minutes — audrey bio ownership. Edit Shopify SEO settings to replace the CV-bullet bio with brand prose. Highest-leverage single action; ripples through
/llms.txtautomatically. - Today, 30 minutes — review the dare staging artefacts. Files are in
~/Downloads/dare-agent-stack-staging/. Eyeball voice, structure, cross-refs. If voice lands, ship via dare-pipeline. If not, iterate. - This weekend — audrey
priceValidUntiltemplate edit. Shopify theme code change; affects all variants. Closes one of three GSC flags. - Next week — audrey reviews app install. Closes the remaining two GSC flags (
aggregateRating,review) and adds the LLM-agent trust signal. - Next week — mirror dare’s stack onto beta.dogwood.house. Same six files, dogwood-voiced, capabilities filled where the endpoints exist.
Watch items
- Shopify’s
/agents.mdpoints at UCP discovery viaaudreyinc.myshopify.com, notwww.audreyinc.com— agents that follow the discovery link end up on the bare myshopify domain. Worth confirming via Cloudflare logs whether anyone is actually using this; may want a 301 from myshopify → www. - UCP requires an agent profile URI for MCP
tools/listcalls (the audrey MCP endpoint returned 422 “Missing profile uri” to anonymous probes). This is a Shopify-side identity check. Worth tracking which agents successfully complete the dance — that’s the population doing agent-mediated commerce on audrey. sitemap_agentic_discovery.xmlappears to be Shopify’s coinage rather than a ratified standard (couldn’t find it in the Sitemaps.org or LLMs.txt specs). The filename pattern is worth adopting anyway — it’s becoming the de-facto convention.- Reviews-app market shift — Judge.me, Loox, Stamped are the big three. Each has different JSON-LD output quality; worth a 30-min comparison before committing.
What this tells us
Two patterns:
One — agent-discoverability is graduating from “thing forward-thinkers add manually” to “platform default Shopify ships under you.” Shopify spent engineering on this because they see commerce going through agents. The portfolio sites that aren’t on platforms doing this work (dare, beta.dogwood.house) need to hand-build the equivalent — which is the rollout in this audit.
Two — the work splits cleanly into LLM-agent layer (the modern stack: llms.txt, agents.md, .well-known) and search-engine-agent layer (the older stack: schema.org, sitemaps, robots). Neither is sufficient alone. Both are auditable. Both have human-readable + machine-readable presentations and best-practice is to ship both.
Trust-signal infrastructure. Cheap when triggered, premature when not — and this is triggered.
Generated 2026-05-15. Staging artefacts at ~/Downloads/dare-agent-stack-staging/. Memories: project_shopify_ucp_audrey_native, project_agent_discoverability_portfolio_rollout, project_audrey_agent_discoverability (reframed).