Twelve things to check so an AI assistant can reach your store, understand it and quote it. No agency, no tooling, one afternoon for the items that matter most.
Generative engine optimisation, GEO, is a name coined in a 2023 paper, GEO: Generative Engine Optimization, for making content visible in the answers that AI assistants generate rather than in a list of links. The name is new; the work is not. Google’s own page on AI features and your website says there are “no additional requirements to appear in AI Overviews or AI Mode, nor other special optimizations necessary”: a page has to be crawlable, indexed, available as text, with structured data that matches what the page shows. An assistant needs what a search engine has always needed, read a little more literally.
This list is that, for a small shop. Twelve items under the four questions an assistant in effect asks of your store, each with a check you can do in a browser or a terminal. Four earlier posts explain the larger items at length; each item links to the one that does.
Can it be reached?
1. Crawlers are allowed in
robots.txt is the first file any crawler fetches and
the one place a store locks itself out by accident. Joomla’s
stock rules are fine. What needs a decision is the AI user agents:
the crawler that gathers training data and the fetcher that reads
a page while answering a question are different agents with
different names, and blocking one does not block the other. A store
that wants to be cited lets the second kind in, whatever it
decides about the first.
Check: fetch the file and read every
User-agent group in it.
curl -s https://www.example.com/robots.txt
Deeper: Joomla robots.txt for an online store.
2. Every product and category is in a sitemap the file points at
A sitemap is how a crawler learns about a product page nothing
links to yet. It needs a Sitemap: line in
robots.txt, so every crawler finds it without a Search
Console account; an index file once it outgrows one file; and
lastmod dates that are true, because a date that moves
on every request teaches crawlers to ignore it.
Check: fetch the sitemap, pick one product URL from it and open that URL in a private window.
curl -s https://www.example.com/sitemap.xml | grep -o '<loc>[^<]*' | head
Deeper: Joomla XML sitemap for an online store.
3. Product pages render without JavaScript
Google crawls a page first and runs its JavaScript later, from a render queue where its JavaScript guide says a page “may stay on this queue for a few seconds, but it can take longer than that”; the same guide adds that server-side or pre-rendering “is still a great idea” because not every bot runs scripts. Most answer-time fetchers are in that second group: they read the HTML they are given and move on. If the name, price, availability or description arrive by script, they see an empty shell.
Check: fetch a product page and search the raw response for its price.
curl -s https://www.example.com/shop/enamel-mug | grep -c '24.00'
4. The page can be fetched at all
A fetcher answering a live question waits seconds for a page, then gives up. Two things stop it before the page loads: slow hosting, and a bot wall. Google’s AI features page asks that crawling is allowed “in robots.txt, and by any CDN or hosting infrastructure”, and a challenge page that asks the visitor to prove they are human ends the visit for every agent. Check whether your host or CDN challenges unknown user agents, and allow the ones from item 1.
Check: run one product page through
PageSpeed
Insights and read what it reports, then fetch the same page
with curl and confirm you get the page and not a
challenge.
Can it be understood?
5. Each product carries structured data that validates
A Product node, or a ProductGroup for a
product sold in variants, which is Google’s shape for them;
an Offer with price, currency and availability; a GTIN
when the product has a barcode; and values that match the visible
page, which Google’s AI features page names as its one
structured-data condition. Valid markup earns nothing but being read
correctly, and that is the point.
Check: paste a product URL into the Rich Results Test, which reports what Google would show, and into the Schema Markup Validator, which reports what Schema.org considers valid.
Deeper: Joomla product structured data: what Google checks.
6. The store itself is described
An Organization node on the home page: name, logo,
a contact channel, the postal address if you trade from one, and
sameAs links to the profiles you actually run. An assistant asked whether a shop is real reads
this first. Leave out what you have not got rather than printing
it blank; an empty telephone is a claim too.
In Solidshop the front page carries an Organization
and a WebSite node built from the store’s own
details, and omits any field the store has not filled.
Check: the Schema Markup Validator on the home page.
7. One canonical URL per product
Variants, filters and sort orders multiply addresses for the same thing. Choose one per product, print it in the canonical tag, list only that one in the sitemap and name it in the structured data. An assistant that finds one product at four addresses with four prices picks none.
Check: open a filtered listing or a variant URL and
read its <link rel="canonical">.
Deeper: only the canonical address of a page in the sitemap post, and the variant check in the structured data post.
8. Plain-language facts on a page
Where you ship, what it costs, how long it takes, how returns work, what you accept. A shopper asks an assistant exactly these questions, and the assistant can only answer from a page it can fetch. In most small stores the answers live inside the checkout or in an image, where no fetcher reads them. A shipping and returns page in plain sentences, linked from the footer, is the item most stores fail, and it costs an hour.
Check: ask yourself “where do you ship?” and find the page that answers it without signing in or adding anything to a cart.
Can it be quoted?
9. An llms.txt that says what the store is and where things are
A Markdown file at the site root, from a
proposal
by Jeremy Howard in September 2024: a heading with the
site’s name, which is the only required part, a one-paragraph
summary in a blockquote, then short lists of links under
second-level headings. It is not robots.txt, since it
grants nothing and forbids nothing, and not a sitemap, which is too
long for an assistant to read. An agent reads it first when asked to use
your site, so it should say what you sell, to whom, where, and
where the catalogue and the policies are.
Check: fetch it and read it as a stranger would.
curl -s https://www.example.com/llms.txt
Deeper: Making a Joomla store visible to AI assistants.
10. Descriptions written to be quoted
An assistant answering “which enamel mug is dishwasher safe?” quotes the sentence that says so. If a description opens with “welcome to our store” or “this beautiful item”, the fact is three sentences down and may never be quoted. The first sentence should say what the thing is, who it is for, and the one fact that sets it apart. The rest can be as long as you like.
Check: read the first sentence of three product pages aloud and ask whether each could stand on its own as an answer.
11. Reviews and questions the assistant can read
Reviews are evidence, and assistants weigh evidence. Render them in
the HTML, not by script (item 3 again), and let
the platform put an aggregateRating on the
product’s own structured data node: one rating on one node,
never a second Product entity on the page. Answered
customer questions are the same evidence. Solidshop’s Review package merges the rating into the
product’s node for exactly this reason.
Check: the validator shows the rating under the product, and a view-source search finds the review text.
Can it act?
12. A machine-readable catalogue, if the platform has one
An assistant that can query your catalogue rather than read it page
by page answers “do you have this in blue, under fifty?”
in one call. Few platforms ship this yet, so the item is optional:
a read-only catalogue API or an MCP endpoint, open to guests,
allowed in robots.txt and listed in
llms.txt. If your platform has one, the work is
making sure the other two files do not hide it.
Check: fetch the endpoint with no cookies and no token and confirm it answers.
Deeper: connecting a Joomla store to an AI assistant with MCP, and the machine endpoint section of the AI-visibility post.
How to use this list
Do items 1, 2, 5 and 9 first. They take an afternoon, they are the four things an assistant reads in order, and passing them puts a store ahead of most. Items 3, 6, 7 and 11 are mostly the platform’s job; check them once and move on. Items 8 and 10 are writing, and never finish. Items 4 and 12 come last. Then do what the first post in this series suggests: ask two assistants a shopping question in your niche, phrased the way a customer would, and see whether your store is among the sources. The checks confirm the plumbing; only that measures the result.
What Solidshop does for you
Reaching: System → Overview checks that robots.txt
references the sitemap and that no rule keeps AI crawlers away from
the site or the catalogue API, and shows the lines to add; the
sitemap has been served at /sitemap.xml since Core
1.6.0. Understanding: every product page carries product structured
data, and since Core 1.5.0 the front page carries an
Organization and a WebSite node.
Quoting: /llms.txt is written from the store’s
own details, also since 1.5.0, and the Review package adds ratings to
the product node. Acting: the catalogue REST API and the MCP server
have been part of the free core, open to guests by default, since
Core 1.3.0.
Items 3, 4, 8 and 10 stay with you: Solidshop renders product pages as HTML, but hosting, policy pages and descriptions are yours. The go-live guide walks through the settings, the catalogue API guide covers item 12, and the core itself is on the extensions page.