GEO / AI Search Audit
Audit one client's website for AI search readiness (GEO) - AI crawler access in robots.txt, passage citability, schema.org structured data, llms.txt and on-page rendering - optionally benchmark it against the competitors in the client…
At a glance
GEO / AI Search Audit is an AI skill that you can use in Claude Code, Codex, or type.com.
- Updated
See an example
Example output from a sample run. Company names and figures are sample data.
AI search readiness (GEO) audit: Harbor & Vine, 2026-01-15
GEO readiness score: 59/100 (Poor). AI crawler access (90/100) and on-page basics (85/100) are solid, but llms.txt (0/100), structured data (40/100) and content citability (53/100) pull the score down. Issues found: 0 critical, 3 high, 2 medium, 4 low.
| Area | Weight | Harbor & Vine | tidewater-goods.example | saltmarsh-co.example |
|---|---|---|---|---|
| Overall | 59/100 | 88/100 | 31/100 | |
| Content citability | 30% | 53/100 | 74/100 | 0/100 |
| AI crawler access | 25% | 90/100 | 100/100 | 100/100 |
| Structured data | 20% | 40/100 | 80/100 | 0/100 |
| Technical / on-page | 15% | 85/100 | 100/100 | 40/100 |
| llms.txt | 10% | 0/100 | 95/100 | 0/100 |
| Priority | Area | Finding | Recommended fix | Effort |
|---|---|---|---|---|
| High | AI crawler access | PerplexityBot blocked site-wide | Allow it in robots.txt unless the client has opted out of AI answers | S |
| High | Structured data | 1 JSON-LD block fails to parse | Fix the JSON syntax; invalid blocks are ignored | S |
| High | Structured data | No Organization entity | Add Organization with name, url, logo and sameAs | S |
| Medium | Structured data | Product missing brand on /collections/linen | Fill in the missing properties | S |
| Medium | Technical / on-page | /contact returns HTTP 404 | Fix or remove the broken link | S |
…plus 4 low-priority fixes in the full report (canonical link, alt text on 50% of 2 images, Open Graph tags, llms.txt).
Next actions
- Rewrite the weakest passages first. The homepage intro under "Linen bedding that gets softer every wash" scores 30/100 (F) and "Our story" 40/100 (D). The best, "Why linen?", scores 76/100 (B); none of the 6 passages lands in the 134-167 word range.
- Publish the drafted llms.txt. It maps Linen bedding, Our story and FAQ from homepage links, leaves out the 404 contact page, and needs its TODO descriptions filled in first.
- Add the drafted Organization JSON-LD site-wide, with sameAs prefilled from the site's Instagram link and a TODO logo URL.
- GPTBot and CCBot are also blocked. Training crawlers are a policy choice for the client and are not scored.
Inputs: Harbor & Vine client profile, 4 of 5 requested pages plus robots.txt, and two competitors benchmarked on the same checks the same day.
Produced by running bash examples/run.sh on the sample data bundled with this skill.
How to use GEO / AI Search Audit
- type.com: Choose Use Skill to add GEO / AI Search Audit to your type.com workspace.
- Claude Code: Download the skill and extract it into
~/.claude/skills/geo-ai-search-audit/(or.claude/skills/geo-ai-search-audit/in a project). Then ask Claude to use GEO / AI Search Audit. - Codex: Download the skill and extract it into
~/.agents/skills/geo-ai-search-audit/(or.agents/skills/geo-ai-search-audit/in a repository). Then ask Codex to use GEO / AI Search Audit.
AI agents can read this page as Markdown or fetch the raw SKILL.md.
Frequently asked questions
What is GEO / AI Search Audit?
GEO / AI Search Audit is an AI skill that you can use in Claude Code, Codex, or type.com.
What does GEO / AI Search Audit do?
Audit one client's website for AI search readiness (GEO) - AI crawler access in robots.txt, passage citability, schema.org structured data, llms.txt and on-page rendering - optionally benchmark it against the competitors in the client…
Can I use GEO / AI Search Audit in Claude Code or Codex?
Yes. GEO / AI Search Audit is a standard Agent Skills folder with a SKILL.md file. Download it and extract it into ~/.claude/skills/ for Claude Code or ~/.agents/skills/ for Codex.
Who created GEO / AI Search Audit?
Zubair Trabzada created GEO / AI Search Audit, and the type.com team adapted it for the Skills Library. The type.com team reviews every skill before it is published in the Skills Library.
Related guide
Browse the technical files
--- name: geo-ai-search-audit description: Audit one client's website for AI search readiness (GEO) - AI crawler access in robots.txt, passage citability, schema.org structured data, llms.txt and on-page rendering - optionally benchmark it against the competitors in the client profile, and produce a DRAFT client report with a prioritized fix list, draft llms.txt and draft Organization JSON-LD. --- # GEO / AI search readiness audit Checks whether AI answer engines (ChatGPT search, Perplexity, Claude, Google AI Overviews, Copilot) can reach, read and quote a client's website, and turns the findings into a prioritized fix list the account lead can review and send. ## Before you run This skill ships scripts and sample data alongside this SKILL.md. Before running any command: 1. **Get the files.** Make sure the skill's other files (`scripts/`, `examples/` and anything else listed with this skill) are in your working folder at the same relative paths. Some environments load only SKILL.md; if yours did, fetch each file from this skill's published files and write it to the matching path. In Type, read them with the skill-file tools. Anywhere else, the Type Skills Library API lists every file with its path, content and `sha256`: GET `https://api.type.com/api/public/library/skills` and take the entry with slug `geo-ai-search-audit`. 2. **Check the copies are exact.** Compare each file's size in bytes, not characters (and its hash, where your tools report one), with the published version before running. A copy written out from the published file is fine once its byte size and hash match; never run a script you summarised or reconstructed from memory. 3. **Run from the skill's folder**, calling interpreters explicitly: `python3 scripts/…` and `bash examples/run.sh`. 4. **Try the sample first.** If the skill ships `examples/run.sh` and `examples/expected_output.txt`, run `bash examples/run.sh`; its output should match the expected file exactly. If it doesn't, stop and report the first differing line rather than running on real data. ## When to use - "Run a GEO / AI search / AI visibility audit for <client>." - "Why aren't we showing up in ChatGPT or Perplexity answers?" (as the technical first pass) - "How does <client> compare with its competitors for AI search readiness?" - Before a content or technical SEO sprint, to find the blockers worth fixing first. Not for: measuring actual AI citations, rankings or traffic (this skill does not query any AI engine), brand-mention or PR research, or writing pitch decks. ## Inputs: the client profile Read the client from `clients/<slug>/client.json` as described in `CLIENTS.md` (resolve by slug or by the `name` field). Fields used: - `name` (required) - used in the report title. - `website` (required for this skill) - the site to audit. - `competitors` (optional) - list of competitor URLs; only needed for `--competitors`. - `industry` (optional, informational) - use it when judging which schema types matter (e.g. Product for DTC, SoftwareApplication/Service for B2B). If the profile or a needed field is missing, the script stops and prints exactly what to add and where. Relay that message; do not guess a URL. Audit one client per run - never mix clients' data in one report. ## Run it From the skill directory (Python 3.9+, standard library only, no install step). `--client` needs a clients folder containing `<slug>/client.json` (see `CLIENTS.md`). The script looks for `./clients` in the directory you run it from, which is usually not where the agency keeps profiles, so pass `--clients-dir` explicitly in every `--client` run; without it the script stops with "No clients directory at clients". `--url` runs need no clients folder. ```bash # Try it first on the bundled sample client (offline, no network) python3 scripts/geo_audit.py --client harbor-and-vine --clients-dir examples/clients --offline-root examples/sites # One client, live python3 scripts/geo_audit.py --client harbor-and-vine --clients-dir /path/to/clients # Same, benchmarked against the competitors in client.json (max 3 by default) python3 scripts/geo_audit.py --client harbor-and-vine --clients-dir /path/to/clients --competitors # Ad-hoc URL without a profile python3 scripts/geo_audit.py --url https://example.com # Offline: a saved page (plus optional saved robots.txt / llms.txt) python3 scripts/geo_audit.py --url https://example.com --html-file page.html --robots-file robots.txt # Machine-readable output / write to a file python3 scripts/geo_audit.py --client harbor-and-vine --clients-dir /path/to/clients --json --out audit.json ``` Other flags: `--max-pages N` (pages per site, homepage first, default 5), `--max-competitors N`, `--timeout S`, `--date YYYY-MM-DD`, `--offline-root DIR` (serve `DIR/<host>/...` files instead of the network; see `examples/`). `bash examples/run.sh` runs a complete offline demo for a synthetic client; its output is in `examples/expected_output.txt`. ## What it checks | Area | Weight | What is scored | |---|---|---| | Content citability | 30% | Heading-delimited passages scored 0-100 for answer-first phrasing, self-containment, readability, specific numbers/sources and original-data signals | | AI crawler access | 25% | robots.txt rules (RFC 9309 matching) for Googlebot, Bingbot and the AI search/answer agents of OpenAI, Anthropic and Perplexity; training crawlers are reported but not scored | | Structured data | 20% | JSON-LD (incl. `@graph`), microdata/RDFa, Organization + sameAs, WebSite, offering/FAQ/Article types, required properties, parse errors | | Technical / on-page | 15% | Server-rendered text vs empty JS app shell, noindex/nosnippet, title, meta description, single H1, canonical, lang, Open Graph, image alt text | | llms.txt | 10% | Presence and format of /llms.txt (llmstxt.org); /llms-full.txt presence | Sampling: homepage plus the most relevant internal links (about, pricing, product, service, FAQ, blog...), skipping paths robots.txt disallows and cart/login pages. Areas that could not be checked are marked "n/a" and dropped from the overall score rather than counted as zero. ## Output A Markdown report headed **DRAFT for account-lead review**. It contains: 1. Summary: overall heuristic score and rating, per-area scores. 2. Prioritized fix list: Critical / High / Medium / Low, with finding, recommended fix and effort (S/M/L). 3. Competitor benchmark (with `--competitors`): scores side by side and where competitors lead. 4. Details: crawler access table, strongest and weakest passages, schema types found, llms.txt, on-page checks. 5. Appendix A: draft llms.txt from homepage links (when missing or malformed). Linked pages that failed to load during the audit are left out and listed above the draft. 6. Appendix B: draft Organization JSON-LD with sameAs prefilled from profile links on the site (when missing). 7. Method and limits. After running, read the report yourself before handing it over: sanity-check the top fixes against the site, remove anything that is intentional for this client (for example a deliberate opt-out of AI training crawlers), and adapt wording to the client's `notes` and brand voice. Fuller schema templates are in `templates/schema/`. ## Rules - The report is a draft for the account lead. Never send it to the client or post it anywhere automatically. - This skill only reads public pages. It never edits a client's site, robots.txt, CMS or tag manager. Any such change needs explicit approval in the conversation, naming the client and the change (CLIENTS.md rule 3). - Do not present scores as rankings or as proof of AI visibility. ## Limits - Scores are heuristics about readiness, not measurements. The skill does not query ChatGPT, Perplexity, Gemini, Claude or Google, and cannot say whether a site is actually cited or ranked. - Crawler access is inferred from robots.txt only. CDN/WAF bot blocking, rate limits, IP allowlists and whether a crawler honours robots.txt are not tested. The crawler list and each agent's purpose reflect vendor documentation at the time of adaptation and change over time. - Only raw HTML is analysed; JavaScript-rendered content is not seen. Sites that block non-browser requests may return errors or challenge pages in live mode. - Up to `--max-pages` pages per site are sampled, not the whole site. - The citability rubric (including the 134-167 word "optimal passage" band) is the upstream author's heuristic and is not a validated model of any engine. - Brand authority, third-party mentions, reviews, E-E-A-T and platform presence (Reddit, YouTube, Wikipedia) are not measured. - llms.txt is a community proposal; support by major AI engines is not confirmed, so it carries low weight and fixes are rated Low.