GEO audit checklist
A GEO audit checks whether AI search engines and AI agents can fetch, read and understand a page. This checklist has the 43 SeenLens checks in five groups, with a manual test for each, an honest note on the evidence, and a link to the fix. Start with crawler access: a blocked page cannot be cited.
By SeenLens · Last updated
Run the free 43-check scan on your page
What does a GEO audit include?
A GEO audit looks at one page the way an AI crawler does. It asks five questions, one per group. The weights are the ones the SeenLens score uses.
| Group | Question | Weight | Checks |
|---|---|---|---|
| AI crawler access | Can AI crawlers and agents fetch the page? | 30% | 11 |
| Content structure | Can a model tell what the page answers? | 25% | 8 |
| Structured data | Does the page state its facts in markup? | 15% | 4 |
| Agent readiness | Can agents find files and tools made for them? | 15% | 12 |
| Technical delivery | Does the page load fast and correctly? | 15% | 8 |
An AEO audit checklist covers the same ground. AEO and GEO both aim at AI answers; see GEO vs SEO vs AEO. A readiness audit cannot tell you how often AI answers mention your brand. For that, see how to check AI visibility.
How to run the audit by hand
- Pick one important page, such as the home page or a product page. Audit pages one by one; results differ per page.
- Open a terminal for
curl, and the page in Chrome with developer tools. - Work through the five tables below in order. Crawler access comes first because a blocked page makes the rest irrelevant.
- Mark each item pass, warn or fail, and note the evidence you saw.
- Fix the failures with the linked guide, then test again.
curl -sIL https://example.com/page
curl -s https://example.com/robots.txt
curl -sI https://example.com/llms.txt
curl -sI https://example.com/this-page-does-not-exist-7f3aAI crawler access: 11 checks
AI crawler access is 30% of the SeenLens score. The items are in order of weight. Each check name links to its fix guide.
| Check | How to check by hand | Evidence |
|---|---|---|
| Page reachable for plain HTTP clients | Run curl -s -o /dev/null -w '%{http_code}' https://example.com/page. Expect 200. | Strong |
| No bot wall for plain clients | Run curl -s https://example.com/page and read the output. A challenge page or CAPTCHA in place of your HTML fails. | Strong |
| Main content present without JavaScript | Run curl -s on the URL and search for a sentence from the main text. If the sentence is missing, the text needs JavaScript. | Medium: few operators document JavaScript rendering |
| robots.txt policy for AI crawlers | Read the groups for OAI-SearchBot, Claude-SearchBot, PerplexityBot and *. No Disallow may match the page path. | Strong: operator documentation |
| Search engine crawlers allowed in robots.txt | See the fix guide. | |
| Page allows indexing and snippets | View the source for noindex, nosnippet or max-snippet:0. Run curl -sI and look for an X-Robots-Tag header. | Strong: Google docs |
| robots.txt reachable | Open /robots.txt. Expect status 200 and text/plain. | Strong: RFC 9309 |
| AI training and grounding preferences | See the fix guide. | |
| Responses to AI agent user agents | Compare curl -sI -A "Mozilla/5.0" with curl -sI -A "GPTBot" on the URL. Different status codes or sizes point to a firewall rule. | Strong: operator docs |
| User-triggered agents and robots.txt | Look for groups for ChatGPT-User, Claude-User and Perplexity-User. Decide whether you want them; protect private paths with a login. | Operator docs: some ignore robots.txt |
| Content-Signal preference | Search robots.txt for Content-Signal: inside each group. | A preference; compliance is up to each operator |
Content structure: 8 checks
Content structure is 25% of the SeenLens score. The items are in order of weight. Each check name links to its fix guide.
| Check | How to check by hand | Evidence |
|---|---|---|
| Page title | View the source: one <title> of 10 to 70 characters that names the topic. | SEO basic |
| Content depth | Paste the main text into a word counter. Aim for 300 words or more of useful text. | Weak: no ideal length (Google) |
| Opening states the answer | Read the first sentence of the main content. It should say what the page answers, in under 220 characters. | Medium: correlational studies only |
| Meta description | View the source: <meta name="description"> with 50 to 160 characters. | SEO basic |
| Single H1 heading | In the browser console, document.querySelectorAll('h1').length should return 1. | SEO basic |
| Heading hierarchy | List the headings with the console or an outline extension. No H3 should come before the first H2. | Weak |
| Publication date | Look for a visible date and dateModified in the JSON-LD. | Weak |
| Descriptive URL path | See the fix guide. |
Structured data: 4 checks
Structured data is 15% of the SeenLens score. The items are in order of weight. Each check name links to its fix guide.
| Check | How to check by hand | Evidence |
|---|---|---|
| JSON-LD structured data | View the source and search for application/ld+json. | Weak for AI citations; used for rich results |
| JSON-LD parses | Test the URL in the Schema Markup Validator (validator.schema.org) or Google's Rich Results Test. | Weak for AI citations |
| Entity markup (Organization, WebSite, Person or LocalBusiness) | Find an Organization, Person or LocalBusiness block with name, url, logo and sameAs. | Weak for AI citations |
| Open Graph tags | View the source for og:title and og:description. | Weak |
Agent readiness: 12 checks
Agent readiness is 15% of the SeenLens score. The items are in order of weight. Each check name links to its fix guide.
| Check | How to check by hand | Evidence |
|---|---|---|
| Lighthouse Agentic Browsing audit | Run Lighthouse in Chrome 150 or later and open the Agentic Browsing category. The free scan does not run this audit yet. | Experimental Lighthouse category |
| Markdown version of the page | Run curl -s -H "Accept: text/markdown" on the URL, or look for a rel="alternate" type="text/markdown" link. | Weak |
| Agent catalog (ard.json or ai-catalog.json) | Open /.well-known/ai-catalog.json. Expect valid JSON that lists real resources, or a 404. | Early |
| WebMCP tools | In the console, check whether document.modelContext or navigator.modelContext exists and has tools registered. | Early draft, optional |
| llms.txt | Open /llms.txt: status 200, an H1 on the first line, a > summary, then link lists. | Weak: Google Search does not use it |
| Agent files under /.well-known/: API Catalog (/.well-known/api-catalog), OAuth Protected Resource Metadata, OAuth Authorization Server Metadata, A2A agent card, UCP commerce profile | Open the file under /.well-known/. Publish it only for a service you run; otherwise expect a 404. | Early: only for real services |
| WebMCP entry point | Search the page scripts for navigator.modelContext. Code should also try document.modelContext. | Early draft, optional |
| Forms annotated for WebMCP | Inspect search and contact forms for toolname and tooldescription attributes. | Early draft, optional |
Technical delivery: 8 checks
Technical delivery is 15% of the SeenLens score. The items are in order of weight. Each check name links to its fix guide.
| Check | How to check by hand | Evidence |
|---|---|---|
| Served over HTTPS | Open the http:// URL. Expect a 301 redirect to https://. | SEO basic |
| HTTP status 200 | Run curl -sIL on the URL. The final status should be 200, after at most one redirect. | Strong |
| Core Web Vitals | Open PageSpeed Insights. Field data at the 75th percentile should show LCP of 2.5 s or less, INP of 200 ms or less and CLS of 0.1 or less. | SEO basic: ranking signal |
| Content in the initial HTML | Same test as the JavaScript check above: the main text must be in the raw HTML. | Medium |
| Canonical URL | View the source: <link rel="canonical"> points to the page's own URL on the same host. | SEO basic |
| Unknown URLs return 404 | Open a made-up path such as /this-page-does-not-exist-7f3a. Expect status 404. | SEO basic |
| XML sitemap lists the page | See the fix guide. | |
| Lighthouse performance score | Read the mobile Performance score in PageSpeed Insights and fix the largest opportunities. | Weak for AI |
Which items have weak evidence?
Some checklist items are cheap good practice with no proven effect on AI answers. Do them after the strong items, and do not expect a citation lift from them.
- llms.txt. Google Search does not use it. An Ahrefs log study of 137,210 domains found that 97% of llms.txt files got zero requests in May 2026. See does llms.txt work.
- Schema markup. Google says structured data is not required for AI features. An Ahrefs study of 1,885 pages that added JSON-LD found no clear citation gain. Schema still helps rich results in Google Search.
- Markdown versions, WebMCP and agent files under /.well-known/. These are early drafts or optional files. They matter if agents use your site for tasks, and most sites can skip them for now.
- Word count and publication date. Google says there is no ideal page length. No study isolates the effect of a date stamp.
GEO audit template
Copy this template into a document or spreadsheet. Use one copy per page.
Page URL:
Date:
Mark each item pass, warn or fail, and note what you saw.
AI crawler access (30%)
[ ] Page reachable for plain HTTP clients
[ ] No bot wall for plain clients
[ ] Main content present without JavaScript
[ ] robots.txt reachable
[ ] robots.txt policy for AI crawlers
[ ] Search engine crawlers allowed in robots.txt
[ ] User-triggered agents and robots.txt
[ ] Content-Signal preference
[ ] Page allows indexing and snippets
[ ] AI training and grounding preferences
[ ] Responses to AI agent user agents
Content structure (25%)
[ ] Page title
[ ] Meta description
[ ] Single H1 heading
[ ] Heading hierarchy
[ ] Content depth
[ ] Opening states the answer
[ ] Publication date
[ ] Descriptive URL path
Structured data (15%)
[ ] JSON-LD structured data
[ ] JSON-LD parses
[ ] Entity markup (Organization, WebSite, Person or LocalBusiness)
[ ] Open Graph tags
Agent readiness (15%)
[ ] llms.txt
[ ] Markdown version of the page
[ ] Agent catalog (ard.json or ai-catalog.json)
[ ] API Catalog (/.well-known/api-catalog)
[ ] OAuth Protected Resource Metadata
[ ] OAuth Authorization Server Metadata
[ ] A2A agent card
[ ] UCP commerce profile
[ ] WebMCP tools
[ ] WebMCP entry point
[ ] Forms annotated for WebMCP
[ ] Lighthouse Agentic Browsing audit
Technical delivery (15%)
[ ] Served over HTTPS
[ ] HTTP status 200
[ ] Content in the initial HTML
[ ] Unknown URLs return 404
[ ] Canonical URL
[ ] XML sitemap lists the page
[ ] Core Web Vitals
[ ] Lighthouse performance score
Top three fixes:
1.
2.
3.Run the same checklist automatically
The free SeenLens scan runs all 43 checks on one page in under a minute. It needs no account. It requests the page as SeenLensBot, reads robots.txt, llms.txt and the sitemap, runs Lighthouse through PageSpeed Insights, and returns a score from 0 to 100, five group scores and the top three issues. When a page has fewer than three issues, the free report shows what the page does well instead.
The score measures readiness. It does not measure how often ChatGPT or Google mention you. The paid AI Visibility Report lists every issue with its cause, fix and evidence. See how the checks work for the scoring.
FAQ
What does a GEO audit include?
A GEO audit checks five things on a page: AI crawler access, content structure, structured data, agent readiness and technical delivery. Each group has concrete tests, such as robots.txt rules for AI crawlers and whether the main text is in the raw HTML.
Is an AEO audit checklist different from a GEO audit checklist?
Mostly no. Both check whether AI systems can fetch, read and quote a page. AEO checklists often add featured snippet checks, which the content items here cover.
How long does a manual GEO audit take?
About one to two hours per page for all 43 items, if you are used to curl and browser developer tools. The free scan runs the automated checks in under a minute.
How often should I run a GEO audit?
After every redesign, CMS change, firewall or CDN change, and robots.txt edit. Firewall and robots.txt changes are the most common cause of AI crawlers losing access.
Does passing a GEO audit guarantee AI citations?
No. An audit removes technical barriers. Citations also depend on rankings, content and mentions on other sites.
Sources
- Google Search Central: AI features and your website (no extra requirements for AI Overviews and AI Mode; indexing and snippet eligibility; query fan-out; checked 2026-11-06)
- Google Search Central: Optimizing your website for generative AI features (Google Search does not use llms.txt or similar files; structured data not required; no ideal page length; checked 2026-11-06)
- RFC 9309: Robots Exclusion Protocol (IETF standard, September 2022; file location, records, not access authorization, 500 KiB parse limit; checked 2026-11-06)
- OpenAI: Overview of OpenAI crawlers (OAI-SearchBot, GPTBot, ChatGPT-User; no llms.txt input listed; checked 2026-11-06)
- Perplexity: Perplexity crawlers (PerplexityBot and Perplexity-User; robots.txt behavior; checked 2026-11-06)
- Anthropic: Does Anthropic crawl data from the web (ClaudeBot, Claude-User, Claude-SearchBot; checked 2026-11-06)
- Ahrefs: We analyzed 137K sites, 97% of llms.txt files never get read (137,210 domains, May 2026 logs, published 2026-06-15; checked 2026-11-06)
- Ahrefs: Does schema markup increase AI citations? (1,885 pages that added JSON-LD against matched controls, published 2026-05-11; checked 2026-11-06)
- Chrome for Developers: Lighthouse agentic browsing (experimental category, llms.txt presence audit, Chrome 150 or later; checked 2026-11-06)
- web.dev: Web Vitals (good thresholds for LCP, INP and CLS at the 75th percentile; checked 2026-11-06)