ai-visibility-audit
Skill0 starsChanged 3 months agoMITView on GitHub
Check whether AI answer engines (ChatGPT, Claude, Perplexity, Google AI) can reach, read and cite a website — and find the sources they cite instead. Use when someone asks why AI never mentions their business, wants a GEO / AEO / AI-SEO / "AI visibility" audit, asks whether ChatGPT or Claude can see their site, wants to know where AI gets its answers in their industry, suspects they are blocking AI crawlers, or says search traffic is falling because of AI answers. Covers crawler access, structured data, llms.txt, render gaps, and live citation checks against real engine answers.
10 other projects use a version of this.
Adopted by
Most recently taken up by
- foverse/seoversetheir own version, first seen Nov 8, 2026
- irinabuht12-oss/marketing-skillstheir own version, first seen Oct 27, 2026
- RouterGrowth/skillstheir own version, first seen Oct 26, 2026
- vell-admin/ai-visibility-tabletheir own version, first seen Oct 11, 2026
- every-app/open-seotheir own version, first seen Oct 8, 2026
- retracn/automationnation-data-toolstheir own version, first seen Oct 6, 2026
Used with
Projects with it also use local-seo.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
huiferSkilllocal-seo
本地 SEO 分析和优化专家。自动检测项目是否需要本地 SEO,分析 NAP(Name, Address, Phone)一致性、本地关键词优化、Google Business Profile (GBP) 优化和本地结构化数据生成。提供本地商家搜索引擎排名优化建议,包括 NAP 标准化、本地关键词策略、GBP 完整性检查、评论策略、地图嵌入和本地 SEO 审计。
Also in 3 projects that use this
Other versions10 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 10
- every-app/open-seo★ 27ksame name
- irinabuht12-oss/marketing-skills★ 6.5ksame name
- Tom-Babb/ai-marketing-skills-with-by-tom-babb★ 30same name
- foverse/seoverse★ 4same name
- jstanx/aeo-toolkit★ 2same name
- RouterGrowth/skills★ 2same name
- DarynaRodriguez/seo-skills★ 1same name
- keupera/seo-skills★ 0same name
- retracn/automationnation-data-tools★ 0same name
- vell-admin/ai-visibility-table★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
4 rules. 0 are common, 3 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 10 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 27
Do not use it for conventional rank tracking, backlink audits or keyword research.
- Very specific: line 73
If inconclusive is true, report no score at all.
- Distinctive: line 99
If a bot genuinely cannot reach the page, stop.
- Distinctive: line 136
Read the pillars, not the total.
“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.
Files
AI Visibility Audit
Classic SEO asks whether a site ranks. This asks something different: when a buyer puts a question to ChatGPT, Claude, Perplexity or Google's AI, does the engine reach the site at all, can it read what is there, and does it cite the site in the answer?
Those are three separate failures with three separate fixes, and most sites fail the first one without knowing it.
When to use this
Trigger on any of these, however they are phrased:
- "Why doesn't ChatGPT know about us?" / "AI never recommends my business"
- A request for a GEO, AEO, AI-SEO, LLM-SEO or AI-visibility audit
- "Can AI crawlers see my site?" / "Are we blocking GPTBot?"
- "Where does AI get its answers about [industry]?"
- Organic traffic dropping and AI answers suspected
- Someone about to invest in content and wanting to know if AI can read it
Do not use it for conventional rank tracking, backlink audits or keyword research. It measures AI retrieval and citation, not Google's blue links.
How to run it
Option A — MCP tools, if the connector is available
The hosted server exposes three tools:
| Tool | Use it for |
run_ai_visibility_audit(website_url, email?, name?, role?) | The main audit. Returns crawler access, structured data and llms.txt. Passing email also sends a full scored PDF report. |
find_ai_citations(query, domain) | For one buyer question, the sources engines actually cite, and whether the domain is among them. |
book_strategy_call() | Returns the Specularis booking link. |
role accepts Real Estate Agent, Attorney, Founder or Other and tilts a
local-service business toward local entity signals, reviews and directories.
Only pass email when the person has asked for the full report. It emails
them and registers them as a lead. The snapshot alone needs no email.
Connect the server with:
claude mcp add --transport http specularis-audit https://specularis-mcp-audit-production.up.railway.app/mcpOption B — direct HTTP, no setup
The same scan engine is reachable without the connector and without a key:
curl -s "https://specularis-mcp-audit-production.up.railway.app/api/scan?d=example.com"Pass a bare hostname, no scheme and no path. It returns the full structured scan described below. Use this when the MCP connector is not configured, or when scanning several domains in a loop.
Reading the result
Work the fields in this order. Later numbers are meaningless if an earlier one has failed.
1. Did the scan actually complete?
If inconclusive is true, report no score at all. Say the scan could not
complete and give inconclusiveReason. A number produced from a failed fetch is
worse than no number, because the client will act on it.
2. Can the crawlers get in?
bots.GPTBot { status, words, served, robotsBlocked, challenged }
bots.ClaudeBot { ... }
bots.PerplexityBot { ... }Each bot is fetched with its real published user agent, so this is what the engine itself would receive.
robotsBlocked: true— robots.txt disallows that agent. Deliberate, usually by a developer who treated AI crawlers as scrapers.served: falseor a 4xx/5xxstatus— the origin refused the bot.challenged: true— a bot-protection layer returned a challenge page.
Verify any challenged: true before telling a client they are blocked.
Challenge pages produce false positives: a WAF may challenge one request and
pass the next, and a scan that reports blocking on a site that is actually open
destroys trust in everything else in the report. Re-run the scan, and check the
site's own WAF rules, before putting "you are blocking AI" in writing.
If a bot genuinely cannot reach the page, stop. Nothing downstream matters. This is the single highest-value finding the audit produces.
3. Can they read what they get?
words— how much text the crawler received.browserWords— how much a real browser receives.renderGap: true— the browser sees substantially more than the bot does.
A render gap means the content exists but is assembled by client-side JavaScript, so the crawler receives a near-empty shell. The page looks perfect to the owner and is blank to the engine. Common on JS site builders and SPA frameworks. The fix is server-side rendering or prerendering, not more content.
A words count in the low hundreds with served: true is the same failure in a
milder form.
4. Is the entity legible?
uniq— the JSON-LD@typevalues found (note: the parser reads inside@graph, so nested schema is counted).validSchema,hasOrg,hasPerson,hasAddressllmsPresent,llmsUseful,hasSitemap
Schema is how an engine resolves "this page" into "this organisation, in this city, run by this person." Without it the engine has prose it must guess from, and it frequently guesses wrong — resolving a brand name to an unrelated dictionary or historical meaning.
5. The score
pillars { access, entity, content, offsite, freshness, technical }
pillarMax { access: 20, entity: 15, content: 15, offsite: 30, freshness: 10, technical: 10 }
total, grade, pctRead the pillars, not the total. The total hides which lever to pull.
Note that offsite is the largest pillar at 30 points — larger than access
and entity combined. That reflects how the engines behave: they cite
directories, review platforms, trade bodies and forum threads far more often
than they cite a company's own marketing pages. A site can be technically
flawless and still be invisible because nothing else on the web corroborates it.
Finding what AI cites instead
find_ai_citations(query, domain) takes a question a buyer would actually ask
("best personal injury lawyer in Miami") and returns the sources the engines
cite when answering it, each tagged with which engine cited it, plus an
appears_in X of N count for the domain.
This is usually more persuasive than the score, because it converts an abstract problem into a named list: these fourteen pages are where your buyers' answers come from, and you are on two of them. That list is the off-site work plan.
Engines are queried according to which API keys the server has configured —
Perplexity, Claude, Gemini and ChatGPT are each supported and each gated on its
own key, so the engines array in the response tells you which ones actually
ran. Report only those. There is a shared daily cap across all users; when it is
reached the tool says so rather than returning partial results.
Turning findings into a fix order
- Unblock the crawlers. robots.txt and WAF rules. Cheapest fix, biggest effect, often same-day.
- Close the render gap. Server-render the content the crawler is missing.
- Add entity schema. Organization, Person, LocalBusiness, with
sameAspointing at profiles that corroborate the same facts. - Get corroborated off-site. The citation list is the target list. This is the slowest and highest-leverage work.
- Keep it fresh. Stale pages lose to maintained ones.
Resist reordering by effort. A beautifully structured page behind a blocked robots.txt scores zero.
Honest limits
State these when they apply rather than letting someone discover them later:
- A snapshot reads robots.txt, the homepage and llms.txt. It is not a crawl of the whole site.
- Engine answers are not deterministic. A citation check is a sample at a point in time, not a fixed ranking.
- Challenge pages cause false "blocked" readings. See step 2.
- The citation finder depends on which engine keys the server has configured.
- The audit runs from a URL. It does not integrate with a CMS and will not deploy any of the fixes it recommends.
Credits
Built by Specularis, an AI-visibility agency. Free web version: https://specularisinc.com/free-audit · MIT licensed.
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
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.

