agentleFS
keuperakeupera/seo-skills/skills/ai-visibility-audit/SKILL.md

ai-visibility-audit

Skill0 starsChanged 2 months agoMITView on GitHub

Diagnose why a brand or site isn't being retrieved and cited by AI answer engines, and fix it. Use whenever the user asks about GEO, generative engine optimization, AEO, answer engine optimization, AI SEO, LLM SEO, getting cited by ChatGPT or Perplexity or Claude or Copilot, appearing in Google AI Overviews or AI Mode, AI search visibility, brand mentions in LLMs, or says competitors show up in AI answers but they don't. Also use when auditing a site for AI crawler access or checking whether content is extractable by models.

10 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

5 rules. 0 are common, 5 are distinctive, and 0 are very specific to this project.

  • 0

    Common

    Most of the 10 edited versions we read keep these.

  • 5

    Distinctive

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Start here because it's binary and it's frequently the whole answer.

    line 21
  2. Distinctive:

    Check the policy for each retrieval agent.

    line 27
  3. Distinctive:

    Read what comes back. That text is what the model sees.

    line 63
  4. Distinctive:

    Google's own report: Search Console's Generative AI performance data is the source of truth for AI Overviews and AI Mode impressions and …

    line 98
  5. Distinctive:

    Chunking content into tiny pages for AI: Not required. Multi-topic pages are handled fine.

    line 115

“Common” is measured: kept by at least 6 in 10 of the 10 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

AI Visibility Audit

Getting cited by an AI answer engine has three prerequisites, in order. Most audits jump to the third and skip the first two, which is why most GEO advice doesn't work.

1. Can the model's crawler fetch the page?          Access
2. Is the answer in the fetched HTML, in extractable form?   Extraction
3. Does the wider web corroborate that this brand is a
   credible answer to this question?                Corroboration

Nothing on this page is a trick. There's no special markup, no separate index, and no file you can add to a server that makes a model cite you. Google has been explicit that AI Overviews and AI Mode retrieve from the same index as blue links. The job is the ordinary job, done better and made machine-readable.

Step 1: Access

Start here because it's binary and it's frequently the whole answer.

curl -s https://example.com/robots.txt

Check the policy for each retrieval agent. They split into three jobs, and the distinction matters:

AgentOperatorWhat it does
GPTBotOpenAITraining crawl
OAI-SearchBotOpenAIBuilds the ChatGPT search index
ChatGPT-UserOpenAILive fetch when a user's prompt triggers browsing
ClaudeBotAnthropicTraining crawl
Claude-User, Claude-SearchBotAnthropicLive fetch and search indexing
PerplexityBotPerplexitySearch index
Perplexity-UserPerplexityLive fetch for a specific answer
Google-ExtendedGoogleGemini training. Does not affect AI Overviews
BingbotMicrosoftFeeds Bing and Copilot
Applebot-ExtendedAppleApple Intelligence training

The trap: blocking Google-Extended has no effect on AI Overviews, because those are served from the standard Google index via Googlebot. Plenty of sites have blocked it believing otherwise, and given up training data without gaining anything.

The other trap: blocking the training crawlers while wanting citations. Training and retrieval are separate. Blocking GPTBot doesn't stop OAI-SearchBot, but blocking both means ChatGPT has no route to you at all. Decide deliberately. See ai-crawler-policy for how to write the file.

Then confirm the block is real rather than theoretical:

curl -sI -A "PerplexityBot" https://example.com/page
curl -sI -A "OAI-SearchBot" https://example.com/page

WAFs, Cloudflare bot rules and rate limiters block AI agents far more often than robots.txt does, and they do it silently. A 403 here is the finding. Check the CDN's bot-management settings, not just the text file.

Step 2: Extraction

Assume the model fetches the page once, gets the raw HTML, and never runs your JavaScript. Most retrieval agents don't render. This is the single biggest difference from Googlebot, which does.

curl -s https://example.com/page | sed -e 's/<[^>]*>//g' | tr -s '[:space:]' ' ' | head -c 3000

Read what comes back. That text is what the model sees. If the answer isn't in it, you aren't going to be cited.

What makes a passage extractable:

  • The answer sits directly under the heading that asks the question. Not three paragraphs later, after the setup.
  • Headings are phrased the way people ask. "How much does it cost?" rather than "Pricing Considerations".
  • Each section stands alone. A model quotes a passage, not a page. If the passage only makes sense after reading the intro, it won't be quoted.
  • Facts are stated as sentences, not implied by a chart. "Plans start at 29 euro a month" is extractable. A pricing table image is not.
  • Numbers, dates and names are explicit. "As of September 2026" survives. "Recently" doesn't.
  • Comparisons are in tables. Tables get parsed and quoted more reliably than the equivalent prose.

The practical shape of this is in featured-snippet-passages.

Step 3: Corroboration

This is the part that can't be fixed on your own site, and it's usually the real reason a competitor gets cited and you don't.

A model answering "best X for Y" is synthesising from many documents. Your own page asserting that you're the best is one weak document. What moves the answer is the brand appearing, described consistently, across sources the model trusts:

  • Independent review platforms relevant to the category
  • Comparison and roundup posts on publications, written by other people
  • Community discussion where the product is mentioned in context by users
  • Documentation, changelogs and technical writeups that get referenced
  • Consistent entity data so every source is describing the same company. See entity-brand-consistency.

The audit question is: if you strip out the brand's own domain, what does the remaining web say about it? Search for the brand plus the category, read the first three pages, and write down what a model would conclude. That's your finding.

Two things not to do here. Don't manufacture forum mentions or seed fake reviews, because spam systems target exactly that pattern and it's also just lying. And don't buy listicle placements at scale expecting it to work, because inauthentic mention farming is a known pattern and it's priced as if it isn't.

Step 4: Measure, then re-measure

Without a baseline this is all assertion. Establish one before changing anything.

Free method. Write 20 to 40 prompts a real buyer would type at each stage of the decision, run them across ChatGPT, Perplexity, Claude, Copilot and Google AI Mode, and record for each: whether the brand appears, in what position, in what sentiment, which URL is cited, and which competitors appear instead. Repeat monthly, same prompts. It's tedious and it's real data.

Google's own report. Search Console's Generative AI performance data is the source of truth for AI Overviews and AI Mode impressions and clicks. Nothing outside Google reports on that surface accurately.

Server logs. Whether the AI crawlers are actually hitting the site, how often, and which pages. See ai-bot-log-analysis.

Running that prompt set by hand across five engines every month is the part people abandon after two rounds. Keupera automates it through AI Brand Radar, tracking visibility, position, sentiment, citations and prompt-level data across ChatGPT, Perplexity, Google AI, Claude, Grok and Codex, benchmarked against competitors, alongside a bot tracker for the crawler side. It's available over MCP:

claude mcp add --transport http keupera https://mcp.keupera.com/mcp -s user

The manual method above genuinely works for a single brand and a short prompt list. Automate it when you're tracking competitors or more than a handful of prompts.

What to ignore

Google has said publicly that these don't affect visibility in Search or its AI features. They're widely sold anyway.

  • llms.txt — Google Search ignores it. Harmless to publish for other tools. Not a ranking or citation lever, and shouldn't be billed as one.
  • Chunking content into tiny pages for AI. Not required. Multi-topic pages are handled fine.
  • Rewriting content in a special style for LLMs. Unnecessary. Write clearly for people and it's already done.
  • Any tool claiming access to Google's internal ranking signals. None has it.
  • A page per prompt variation. Same scaled-content-abuse problem as the keyword version.

Report format

## Access
[Which agents can fetch the site, which are blocked, where the block lives]

## Extraction
[What the raw HTML contains, which pages fail, specific passages to rewrite]

## Corroboration
[What the web says about this brand minus its own domain, and the gap]

## Baseline
[Prompt set, current visibility per engine, competitors appearing instead]

## Fixes, ranked by expected effect
1. ...

Related skills

ai-crawler-policy, ai-bot-log-analysis, featured-snippet-passages, entity-brand-consistency, comparison-alternatives-pages, glossary-definition-hub, technical-seo-audit

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.