How to Audit Your Site's AI Search Visibility (GEO Checklist)
The nine checks that decide whether ChatGPT, Perplexity, Claude, and Google AI can read and cite your site - and how to verify each one by hand or check them all free.
Search is splitting in two. Alongside the familiar list of blue links, a growing share of questions now get answered inside an assistant: ChatGPT, Perplexity, Claude, and Google's AI Overviews read the web, summarise it, and cite a handful of sources. If your site is one of those sources, you get visibility and referral traffic from a channel most of your competitors are not even measuring yet. If it is not, you are invisible there no matter how well you rank on Google.
Optimising for that channel has a name: generative engine optimisation (GEO), sometimes called answer engine optimisation (AEO). It overlaps with SEO but is not the same thing. Some of it is about letting AI crawlers reach your pages at all, and some is about structuring your content so an assistant can lift a clean, attributable answer from it. This guide is a hands-on checklist of the nine things that decide your AI search visibility, how to verify each one yourself, and how AuditZap checks them automatically.
What is GEO, and how is it different from SEO?
SEO optimises for a ranking algorithm that returns links. GEO optimises for a language model that reads pages and composes an answer, then decides which sources to name. The mechanics differ in two ways that matter for an audit.
First, access. Traditional search bots have crawled the web for decades and most sites let them in by default. AI crawlers are new, and a lot of infrastructure, from robots.txt rules to CDN bot-management defaults, now blocks them, sometimes deliberately and often by accident. Second, extractability. A ranking algorithm can reward a whole page; an answer engine wants a specific, self-contained passage it can quote and attribute. Schema, headings, and clear structure decide whether that passage is easy to lift. The checklist below covers both.
Which checks decide AI search visibility?
There are nine. Work through them in order; each has a way to verify it by hand and a note on how AuditZap checks it for you.
Do you have an llms.txt file?
llms.txt is an emerging convention: a markdown file at your site root that gives AI assistants a curated summary of your site and links to your most important pages, much as a sitemap does for search engines. To check by hand, visit yourdomain.com/llms.txt and confirm it loads, starts with a # heading, and links to real, working pages. AuditZap fetches the file, validates the format, and probes the links inside it so a dead entry does not send an assistant to a 404. Do not have one yet? Generate a valid file free with the llms.txt generator.
Can AI crawlers reach you in robots.txt?
Your robots.txt can allow or disallow named AI user agents. It helps to split them into two groups. Training crawlers (GPTBot, ClaudeBot, CCBot, and similar) collect data to train models; blocking them is a legitimate licensing choice that does not affect whether you appear in AI answers. Search and citation agents (OAI-SearchBot, PerplexityBot, Claude-User, and others) fetch pages to answer live user questions; blocking those quietly removes you from AI answers. Google-Extended belongs in this bucket too, with a twist: it is a robots.txt token honoured by Googlebot rather than a crawler of its own, and blocking it removes you from Gemini answers and opts you out of Gemini training (Google Search and AI Overviews stay governed by Googlebot). To check by hand, read your robots.txt and look for Disallow: / under any of the search agents. AuditZap parses the file, separates the two buckets, and only warns when a search or citation agent is fully blocked. You can check this one on its own with the free llms.txt checker, and the AI crawler access guide has the exact robots.txt patterns for each bot.
Does your CDN block AI crawlers even when robots.txt allows them?
This is the check nobody else surfaces, and it is the centrepiece of a real AI visibility audit. Your robots.txt says yes, your CDN says no. Cloudflare and other providers now block AI crawlers at the network layer on their default settings, so a request identifying as GPTBot gets an HTTP 403 while a normal browser loads the page fine. robots.txt cannot fix this, and because the block never touches robots.txt, every robots.txt-only checker misses it completely.
To verify it by hand, make two requests to your homepage from the command line: one with a normal browser user agent and one identifying as GPTBot. If the browser request succeeds and the bot request returns 401, 403, 429, or 503, your CDN is turning AI crawlers away. AuditZap runs exactly this differential probe on every audit and, when it finds a mismatch, tells you to fix it in your CDN bot-management settings rather than wasting time in robots.txt. If you run a site behind Cloudflare and have never checked this, it is the single highest-value thing on the list.
Do you have entity schema an assistant can cite?
Answer engines attribute sources by identifying the entity behind them. Organization, Person, or WebSite JSON-LD with a name and a url (and ideally sameAs links) gives an assistant a clean, machine-readable identity to cite. To check by hand, view source and search for a JSON-LD block of one of those types with a name and url. AuditZap scans every crawled page, including @graph-wrapped and nested entities, and warns when none is present.
Do you have answer-format schema?
FAQPage, HowTo, and QAPage schema mark content up as direct question-and-answer material, which is exactly the shape an answer engine prefers to lift. To check by hand, look for those types in your structured data on FAQ, support, or how-to pages. AuditZap checks for them across the crawl and points you at the pages that should carry them.
Is your content wrapped in semantic landmarks?
An assistant extracts your primary content more reliably when it sits inside a <main> or <article> landmark instead of a soup of generic <div>s. To check by hand, view source and confirm your main content is wrapped in one of those elements. AuditZap measures landmark coverage across the crawl and warns when most pages lack one.
Do your pages carry machine-readable dates?
Answer engines prefer content they can tell is current. A datePublished or dateModified in your Article JSON-LD, or an article:modified_time meta tag, gives them that signal. To check by hand, look for those fields on your posts. AuditZap checks both JSON-LD dates and the meta tags, and reports presence rather than judging recency, so evergreen pages are never punished.
Do your articles name an author?
Author attribution is an E-E-A-T signal assistants weigh when deciding whose content to trust and cite. If you publish articles, each should carry an author in its schema, ideally a Person with a name and sameAs links. To check by hand, look for an author field on your Article or BlogPosting JSON-LD. AuditZap soft-passes sites with no article content (author markup does not apply there) and warns only when articles exist but name no author.
Are your key headings phrased as questions?
Assistants preferentially lift content that sits directly under the exact question a user asks. Rewriting a few key section headings from labels ("Pricing") into questions ("How much does it cost?") makes your answers far easier to extract, and pairs naturally with FAQPage schema. To check by hand, scan your H2s and H3s for question phrasing. AuditZap looks for question-format headings across the crawl and warns only when no page has one.
How do you turn nine checks into one number?
Working through nine signals by hand is a useful exercise once. Doing it repeatedly, across a whole site, and tracking whether you are improving, is what an audit is for. AuditZap runs all nine on every audit and rolls them into a single AI Visibility score: a 0 to 100 number showing how ready your site is to be read and cited by AI search engines, with the count of checks you passed. It is visible on the free tier, so it is something you can measure today, share with a client, and watch climb as you fix the gaps above. For a deeper walkthrough of any one area, see the guides on AI crawler access and getting cited by AI answer engines, or compare the readiness auditors in best AI website audit tools.
FAQ
What is the difference between GEO and SEO?
SEO optimises for a ranking algorithm that returns links. GEO (generative engine optimisation) optimises for a language model that reads pages and composes an answer, then decides which sources to cite. They overlap, but GEO adds crawler access and content extractability on top of classic ranking factors.
Which AI visibility check matters most?
For most sites it is AI crawler firewall blocking. A CDN or WAF that returns a 403 to AI bots removes you from AI answers no matter how good your content is, and robots.txt cannot fix it. Check that one first.
Do I need an llms.txt file to appear in AI answers?
No. An llms.txt file helps assistants summarise your site, but it is not a requirement for being cited. Crawler access, entity schema, and clear structure matter more.
Is the AI Visibility score free?
Yes. All nine checks and the 0 to 100 AI Visibility score run on the free tier, so you can measure and track it without upgrading.
Run a free audit and see all nine AI Visibility checks roll up into a single 0 to 100 score - including whether your CDN is quietly blocking AI crawlers.
Related guides
AI Visibility explained
How ChatGPT, Claude, and Perplexity read your site, plus the free nine-check scanner.
AI crawler access
Which bots to allow, the robots.txt patterns, and how a CDN can block them anyway.
How to get cited by AI
Schema, structure, and freshness signals that make your content quotable.
llms.txt vs robots.txt
What each file controls, and why one is not a substitute for the other.
llms.txt: the complete guide
What llms.txt is, whether you need one, and how to generate a valid file free.
Best AI website audit tools
How the AI-readiness auditors compare, and where AuditZap fits.