DENM Digital
The Playbook · No. 03 · Guide

We made our own store readable by AI. Here is exactly what we shipped.

Getting stores ready for how people buy next is the promise at the top of our homepage. So before we sold that work to anyone, we did it to our own site. Here are the five things we shipped, each one live and checkable right now, and the version of each that belongs on your store.

8 min readBy Ewald van ZylFiled under Ready
{ "title": "Store Build & Launch", "category": "digital-commerce", "type": "Sprint", "pricing": "on request", "url": "…/digital-commerce/store-build" }
GET /catalog.json · 200 OK

Ask an assistant about a store you know and it answers in seconds: what they sell, what delivery costs, whether the thing you want is in stock. Where does that answer come from? Not from the storefront you spent money making beautiful. An assistant fetches your pages, strips them down to text and data, and keeps the facts it can trust. It never sees your fonts, your photography or your animations. And when the facts are not there in a form it can read, it does one of two things: it guesses, or it quietly recommends a store it can read instead. Our homepage promises to get stores ready for that reader. It is fair to ask whether we got our own ready first. We did, and this guide is the receipts.

The reader

Your store has two shop windows now

A person reads your store with their eyes: the photography, the layout, the feel of the brand, the price under the product. A machine reads it as a stack of files. Same store, two windows, and they show very different things.

What a person sees
  • Photography and layout
  • The feel of the brand
  • The price under the product
  • The delivery promise in the banner
What a machine sees
  • The text on the page
  • The structured data behind it
  • Your feeds and sitemap
  • Your robots.txt and firewall rules
The second window decides whether an assistant can put you forward.

You polish the first window every week. The second one, most owners have never looked at once. Everything below is us cleaning our own second window, in the open, so you can check the work and copy it.

Every store now has two shop windows. You polish one of them every week. Have you ever looked at the other?
The receipts

Five things, all live on this site

None of this is theory, and none of it is roadmap. Each item below is running on the site you are reading, at an address you can open right now. We will take them one at a time.

01
Structured dataview source, any page

Labelled facts behind every page: the business, each service, each department's product list.

02
A catalog feed/catalog.json

The whole catalog as one machine-readable file, with pricing stated plainly as on request.

03
A map for language models/llms.txt

One plain-text page telling a model what this site is and where everything lives.

04
An open door for AI crawlers/robots.txt

The crawlers that do the finding, named and welcomed instead of blocked.

05
Copy a machine can quoteevery heading on this site

Spelled-out headings, literal descriptions, no fact that lives only in a picture or arrives by script.

Shipped 01

Structured data: state the facts behind the page

Structured data is a block of labelled facts that travels with a page: invisible to people, written for software. Ours says things like “this is an organisation called DENM, here are its addresses in Johannesburg and Dubai, this page describes a service called Store Build & Launch, and here is the department it belongs to.” Every page on this site carries its share: the business itself, each service, each department’s product list, the path you took to get here, and on guides like this one, the article and the questions it answers. WHAT THE MACHINE SEESThis guide carries Article markup and an FAQ block in structured data, so an assistant can lift its answers directly instead of parsing the prose.Receipt: view source

On a product store the same idea is Product markup: price, availability, delivery and returns, stated as data instead of buried in a tab. Google keeps investing here, with dedicated markup for shipping costs and return policies, which are exactly the facts behind a buyer’s second question. A good Shopify theme covers the basics (name, price, availability) and usually skips those last two, so run your product pages through Google’s Rich Results Test before you assume yours are covered.

One honest caveat: markup is not a magic lever for AI answers in general, and studies of ordinary content pages show adding it does not buy citations on its own. Where it earns its keep is product data, because product answers are built from systems that do read it: Google’s Shopping Graph, Bing’s index, and the merchant feeds. It is layer three of the catalog checklist in our UCP guide, and it is the difference between an assistant stating your delivery terms and guessing them.

Shipped 02

A catalog feed: the whole shop in one file

Open denm.co.za/catalog.json and you get our entire catalog as one machine-readable file: every service, its department, a plain description, and the address of its page. No design, no persuasion, just the stock list. We even state pricing as “on request” in so many words, because a blank field invites a machine to guess, and a guess is worse than an honest “ask us”.

If you sell on Shopify you already have the equivalent, and it is already travelling. Shopify builds a structured catalog from your product data and ships it to ChatGPT, Microsoft Copilot and Perplexity by default for eligible stores (the switch lives under Sales channels in your admin), while your Merchant Center feed does the same job for Google’s surfaces. So you do not need to write a file. You need to keep the data in it complete, accurate and current, because that is what assistants rank on: when several stores sell the same product, ChatGPT weighs availability, price and whether you are the maker or the main seller. Feed-level facts, all of them, and the reason the UCP guide spends most of its length on product data.

Shipped 03

llms.txt: a one-page map for language models

llms.txt is a young convention, but a useful one: a single plain-text page at the root of your site that tells a language model what lives where. A heading, one paragraph saying what the site is, then linked sections. Ours lists the departments, the collections, the catalog feed and this Playbook, each with one honest line. You can read it at denm.co.za/llms.txt.

# DENM Digital

> A digital commerce agency laid out like a store: browse a
> department, add engagements to an inquiry. Pricing on request.

## Departments
- [Digital Commerce](…/digital-commerce): the store itself…
- [Creative](…/creative): look and content…

## Machine-readable
- [Catalog feed](…/catalog.json): every engagement as JSON…
Abridged. The real thing is live at /llms.txt.

We will be straight about what this file is worth, because much of the industry is not. No major assistant has committed to reading it, server-log studies through early 2026 found the big AI crawlers almost never request it, and Google has said plainly that it does not use it. We shipped ours anyway, with eyes open: it costs an afternoon, it cannot hurt, and the same plain statement of what we sell feeds the things that demonstrably do matter.

If your store runs on Shopify, this one is already done for you. Since May 2026 Shopify generates llms.txt, llms-full.txt and an agents.md for every store, built from your product data. So the work is not writing the file. It is opening yourstore.com/llms.txt, reading what the default says about you, and customising the template if it sells you short.

Shipped 04

robots.txt: let the readers in

This one is less about what we added and more about what we refused to block. A robots.txt file tells crawlers what they may read, and plenty of stores lock AI crawlers out: sometimes on purpose, more often through a bot-protection layer that treats every non-human reader as a threat. Before deciding what to allow, it helps to know that each AI company now sends up to three different readers, with three different jobs. One gathers training data for future models. One builds the index behind the assistant’s search answers. One fetches your page live, at the moment a user asks about it. You can welcome or block each on its own, and the last two are the ones that decide whether an assistant can put you forward.

OpenAI
GPTBot
Trains the model
OAI-SearchBot
Builds search answers
ChatGPT-User
Fetches live for a user
Anthropic
ClaudeBot
Trains the model
Claude-SearchBot
Builds search answers
Claude-User
Fetches live for a user
Perplexity
none
Trains the model
PerplexityBot
Builds search answers
Perplexity-User
Fetches live for a user
Google
Google-Extended
Trains the model
Googlebot
Builds search answers
none
Fetches live for a user
All welcome on our public site. The search and live columns are your visibility.

Two traps hide in the names. The Google switch called Google-Extended only governs what Gemini may train on. Google’s AI Overviews and AI Mode ride on ordinary Googlebot, so blocking Google-Extended does not keep you out of them, and allowing it is not what gets you in. And ChatGPT leans on Bing’s index to find pages (in studies, most of its search citations match Bing’s top results), so a store that has never opened Bing Webmaster Tools is leaving a door closed.

We name and welcome all of them. Selling “get found by AI” while blocking the crawlers that do the finding would be self-refuting; the only page we keep every crawler off is the inquiry cart. One caution in the other direction: robots.txt is a request, not a lock. OpenAI and Perplexity both say in their own docs that their live fetchers may not honour it, because the visit is a person asking, not a crawl.

So check two places, not one. Your own file is at yourstore.com/robots.txt. Then check what sits in front of your store: Cloudflare has blocked AI crawlers by default for new sites since mid-2025, and no robots.txt can override a firewall. If assistants never mention you, being locked out is the first thing to rule out, and the cheapest thing on this list to fix.

Shipped 05

Copy a machine can quote

The last piece is not a file, it is a writing habit. A model can only work with what your words state outright, so we write to be quoted. Headings spell things out: our pages say “Search Engine Optimisation” where habit says SEO, because machines rank words, not initials. Every service description opens with what the thing actually is, in plain terms. One fact per sentence, and no fact that lives only in a picture.

On a product store, this is the description field doing honest work: material, dimensions, fit, care, what is in the box, written out as text. A size chart that exists only as a designed image is invisible through the machine window, so give images alt text that states what they show. Keep the brand voice for the human window; the machine window just needs the facts to exist in words.

There is a second way facts go missing, and it is sneakier: they arrive by script. The big AI crawlers fetch your page’s HTML and do not run JavaScript, so anything an app paints on after the page loads is simply not there when the machine reads it. Many review widgets, size charts and spec tables work exactly that way. Shopify renders the core page on the server, which is a good start; the leaks come from apps. (The newest AI browsers do run scripts when a user visits you live. The crawlers that build the indexes, where discovery happens, do not.) If a fact matters to the sale, make sure it is in the page itself, not added afterwards.

The test

Ask the assistant about your own store

There is a simple way to find your own gaps, and it is the same one we used on ourselves. Open an assistant you did not build, ChatGPT or Gemini, and ask it what your store sells, what delivery costs, what your return window is, and whether your bestseller is in stock. Ask more than once, and in more than one assistant, because the answers move around. Then grade what comes back.

It answered correctly

That fact is readable. Leave it alone.

It hedged or refused

The fact exists somewhere, but not in a form it trusts. Usually missing structured data.

It got it wrong

The fact is missing, stale, or locked out at robots.txt or the firewall. Start here.

Whatever it gets wrong is your work list, already in priority order. Running that test on our own site produced everything you just read. And once the list is done, there is a bigger test behind it: whether an agent can not just describe your store but buy from it. That is checkout territory, and we covered it in how AI agents shop your Shopify store.

A note on effort: nothing above needed a rebuild. The catalog feed and llms.txt are each one small file that reads from product data the site already had, the robots change is a few lines, and the writing habit costs nothing. The hard part was deciding that the machine’s view of our store deserved the same care as a person’s. Decide that, and the shipping takes days, not months.

Ready for how people buy next

Want to know what an assistant sees on your store?

This is the work inside Ready: we run the readability test on your store, show you what the machine window is missing, and ship the fixes, the same ones we shipped on our own site. Tell us where you’re stuck and we’ll tell you if we can help.

Start an inquiry →
We reply in one business day · No sales script