---
title: "GEO audit checklist: 12 checks with a command each"
description: "A GEO audit in 12 checks: crawler access, rendering, status codes, canonicals, sitemap, llms.txt, JSON-LD, situation pages and measurement, each with a test."
url: https://katman.pro/geo-audit-checklist
lang: en
updated: 2026-10-20
---

Guide Updated 20 Oct 2026

# 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:

```bash
SITE=https://yoursite.com
```

The order follows the gates of [the Katman method](https://katman.pro/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.**

```bash
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.**

```bash
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](https://katman.pro/cloudflare-blocking-ai-crawlers).

**3\. The text is in the HTML without JavaScript.**

```bash
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.**

```bash
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.

```bash
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.**

```bash
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.**

```bash
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.**

```bash
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.**

```bash
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?](https://katman.pro/what-is-llms-txt)

**10\. JSON-LD is valid and says what the page says.**

```bash
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](https://katman.pro/case-studies/sample-site-first-7-days)).

**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?](https://katman.pro/check-if-chatgpt-recommends-your-site)

Checks 2 and 3 can also be run from the browser with the [AI crawler checker](https://katman.pro/tools/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](https://katman.pro/done-for-you) writes 30 pages a month for you. See [what Katman does](https://katman.pro/mcp).

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.

## Related pages

-   [**I built my site with Lovable, Bolt or Cursor, and ChatGPT never mentions it** Built it with Lovable, Bolt, v0 or Cursor and ChatGPT never mentions it? Six traps hide vibe-coded sites; each has a one-minute test and a fix for your AI tool.](https://katman.pro/vibe-coded-site-invisible-to-chatgpt)
-   [**Is Cloudflare blocking AI crawlers from my site?** robots.txt allows GPTBot but Cloudflare returns 403? The three AI bot types, the settings that block them, the 15 Sep 2026 change, a curl test and the fix.](https://katman.pro/cloudflare-blocking-ai-crawlers)
-   [**What is llms.txt, and is it worth writing?** llms.txt is a short Markdown summary of your site for language models. Google ignores it and most files get no requests; here is when it's still worth writing.](https://katman.pro/what-is-llms-txt)
-   [**How do I check whether ChatGPT, Claude and Perplexity recommend my site?** Ask 12 unbranded questions and 2 “What is \[brand\]?” ones logged out, then log who is named, recommended and cited. Why one answer misleads, and the API option.](https://katman.pro/check-if-chatgpt-recommends-your-site)
-   [**AI crawler checker** Free: we load your homepage as GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot and 8 other bots, then show which ones your CDN blocks and what robots.txt says.](https://katman.pro/tools/ai-crawler-checker)
-   [**The Katman method: research, plan, build, verify** Four steps, three gates and 15 prompts with acceptance criteria that make a site readable, quotable and recommendable by ChatGPT, Claude, Gemini and Perplexity.](https://katman.pro/method)
-   [**Katman MCP** Katman MCP runs in Cursor, Claude Code and VS Code: it scans your code, audits your live site like AI crawlers do and checks every fix. Katman Pro from $99/month.](https://katman.pro/mcp)

Updated 20 October 2026 · Katman
