How do I run a GEO audit? A checklist with a command for every check
A GEO audit asks four questions in order: can AI bots get in and read the text, does every page have one clear address, do the machine-readable files match the pages, and is there a page for each customer situation, measured against what assistants say. This checklist has 12 checks, each with a terminal command or a manual test and a pass condition. Run it in order, because an early failure makes the later checks pointless.
How to use this checklist
Set your address once, then run the checks in order:
SITE=https://yoursite.com
The order follows the gates of the Katman method: first bots must read the page, then each page needs one clear address, then the machine-readable files must match, and last there must be pages worth recommending, measured against real answers.
Gate 1: can AI bots get in and read the text?
1. robots.txt doesn’t block search bots.
curl -s $SITE/robots.txt | grep -iE '^(user-agent|disallow):'
Pass when: no Disallow: / sits under *, OAI-SearchBot, Claude-SearchBot or PerplexityBot. OpenAI says sites that opt out of OAI-SearchBot aren’t shown in ChatGPT search answers, and that GPTBot (training) is a separate choice (OpenAI, “Overview of OpenAI crawlers”, read 15 Oct 2026).
2. Each bot gets a 200 through your CDN.
for b in OAI-SearchBot/1.0 ChatGPT-User/1.0 Claude-SearchBot/1.0 PerplexityBot/1.0; do
echo "$b: $(curl -s -o /dev/null -w '%{http_code}' -A "Mozilla/5.0 (compatible; $b)" $SITE/)"
done
Pass when: every line ends in 200. A 403 usually comes from a CDN or firewall rule, not your code: see Cloudflare blocking AI crawlers.
3. The text is in the HTML without JavaScript.
curl -s $SITE/ | sed 's/<[^>]*>/ /g' | wc -w
curl -s $SITE/ | grep -o '<h1[^>]*>[^<]*' | head -1
Pass when: hundreds of words and a visible H1. A crawler that doesn’t run JavaScript sees only this.
4. Missing pages return 404.
curl -s -o /dev/null -w '%{http_code}\n' $SITE/this-page-does-not-exist
Pass when: 404. A “not found” screen sent with 200 makes every unknown URL look like a real, empty page.
Gate 2: does every page have one clear address?
5. One host. http, www and any preview copy lead to the main address.
curl -sI http://yoursite.com/ | grep -iE '^(HTTP|location)'
curl -sI https://www.yoursite.com/ | grep -iE '^(HTTP|location)'
Pass when: both return a 301 to your main https address, and a Google search for your brand on your host’s preview domain finds nothing.
6. Canonicals point to the page itself.
curl -s $SITE/pricing | grep -io '<link[^>]*rel="canonical"[^>]*>'
Pass when: each page names its own absolute URL.
7. The sitemap lists only live, canonical pages.
curl -s $SITE/sitemap.xml | grep -o '<loc>[^<]*' | sed 's/<loc>//' |
while read -r u; do echo "$(curl -s -o /dev/null -w '%{http_code}' "$u") $u"; done
Pass when: every line starts with 200, and no login, checkout or noindex page is listed.
8. Links are real links.
curl -s $SITE/ | grep -o '<a [^>]*href="/[^"]*"' | wc -l
Pass when: at least as many as the pages in your menu. A div with onClick isn’t a link to a bot.
Gate 3: do the machine files match the pages?
9. llms.txt, if you have one.
curl -s -o /dev/null -w '%{http_code}\n' $SITE/llms.txt
curl -s $SITE/llms.txt | head -5
Pass when: 200, the first line is an H1 (the one required part of the spec, per llmstxt.org, read 15 Oct 2026), and no price or claim contradicts your pages. Google says you don’t need new machine-readable files or special schema to appear in AI Overviews or AI Mode (Google, “AI features and your website”, read 15 Oct 2026), so this check is optional. Background: What is llms.txt?
10. JSON-LD is valid and says what the page says.
curl -s $SITE/ | python3 -c "import sys,re,json; b=re.findall(r'application/ld\+json\">(.*?)</script', sys.stdin.read(), re.S); [json.loads(x) for x in b]; print(len(b), 'valid blocks')"
Pass when: a number above 0, no errors in Google’s Rich Results Test, and every price and claim in it is visible on the page.
Gate 4: pages worth naming, and measurement
11. A page for each customer situation. Write 10 to 12 sentences a customer would type into ChatGPT, without your brand. For each, find the URL whose H1 says it and whose first three sentences answer it. Example, for an invented invoicing tool: “I need to invoice a German client in euros from a US company” deserves its own page, with that sentence as the H1. Pass when: every situation has a page. On our sample site, 59% of ChatGPT visitors landed on two such pages (source: the site’s own analytics, human sessions only, 21 to 27 Sep 2026; one site, our own product, not a forecast; case study).
12. Measurement. Ask those questions logged out with web search on, in ChatGPT, Claude, Gemini and Perplexity, and record who is named and which pages are cited. Pass when: you have a dated baseline and a date 14 days later to ask again. The full method: How do I check whether ChatGPT recommends my site?
Checks 2 and 3 can also be run from the browser with the AI crawler checker.
What Katman does with this checklist
Katman MCP runs inside your AI coding tool. katman_audit_site runs checks 1 to 10 on the live site, through your CDN; katman_scan_code finds the cause of a failure in your code; katman_prompt returns the fix prompt with its acceptance check; katman_page_brief writes briefs for check 11; katman_visibility_run handles check 12 on your own OpenRouter key, about $2.40 a run on the default panel. Katman Pro is $99 a month for up to 3 sites, with fix prompts and page briefs uncapped. Or have us do it: Growth writes 30 pages a month for you. See what Katman does.
What it can’t do: it doesn’t fix anything by itself (your coding tool does), doesn’t track rankings, counts full audits per month, and nobody can promise an assistant will recommend you after every check passes.
Written by the Katman team, Rnify Limited. OpenAI, Google and llmstxt.org pages read 15 October 2026.
Who this is not for
- Sites that want to keep AI bots out: this checklist is about letting the right ones in.
- App screens behind a login: they should stay out of search and AI answers.
- Anyone looking for a single AI visibility score: each check here passes or fails on its own.
Frequently asked questions
What is a GEO audit?
A check of whether AI assistants such as ChatGPT, Claude, Gemini and Perplexity can reach, read, quote and recommend your site. It overlaps with a technical SEO audit, but adds AI bot access through your CDN, text visible without JavaScript, situation pages and measurement of the answers.
How long does a GEO audit take?
The ten technical checks take under an hour with the commands on this page. The situation-page check and the first measurement take an afternoon, because you write the customer questions and ask the assistants yourself.
Can I run a GEO audit without paying for a tool?
Yes. Every check here is a curl command, a Google or Bing search, or a manual test. Tools save time and repeat the checks the same way after every deploy.
Which check matters most?
Crawler access through your CDN. If a search bot gets a 403, nothing else on the page can help; test it with a request per bot, not only by reading robots.txt.
Do I need llms.txt to pass?
No. Google says you don’t need special files to appear in its AI features, so treat llms.txt as optional; if you publish one, its facts must match your pages.
How often should I repeat the audit?
Run the technical checks after every deploy that touches routing, rendering or the CDN, and repeat the measurement every 14 days with the same questions.