A GEO Checklist for Small Online Stores

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.