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.
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.
- ◇Photography and layout
- ◇The feel of the brand
- ◇The price under the product
- ◇The delivery promise in the banner
- ◆The text on the page
- ◆The structured data behind it
- ◆Your feeds and sitemap
- ◆Your robots.txt and firewall rules
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?
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.
Labelled facts behind every page: the business, each service, each department's product list.
The whole catalog as one machine-readable file, with pricing stated plainly as on request.
One plain-text page telling a model what this site is and where everything lives.
The crawlers that do the finding, named and welcomed instead of blocked.
Spelled-out headings, literal descriptions, no fact that lives only in a picture or arrives by script.
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.
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.
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…
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.
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.
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.
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.
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.
That fact is readable. Leave it alone.
The fact exists somewhere, but not in a form it trusts. Usually missing structured data.
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.
