ai-visibility-audit

Can ChatGPT, Perplexity, Claude and Gemini cite your website?

One command tells you. It fetches your site the way AI crawlers do, reads robots.txt, llms.txt, the sitemap and the HTML, and scores the site across five layers: SEO, AEO, GEO, AIO and SXO.

python ai_visibility_audit.py https://example.com
ai-visibility-audit 1.0.0
URL:        https://example.com
Status:     HTTP 200, TTFB 460 ms
Overall:    48/100  grade F

SEO  Search engine hygiene                      [###########---------]  55
  [PASS] https               10/10  Served over HTTPS
  [WARN] title                5/10  Title is 14 characters (aim for 15 to 60): Example Domain
  [FAIL] meta_description     0/10  No meta description
  [FAIL] canonical            0/10  No canonical link
  [PASS] noindex             15/15  Not marked noindex

GEO  Generative engine optimisation             [###########---------]  54
  [PASS] robots_ai_bots      25/25  No robots.txt (HTTP 404), so no AI crawler is blocked
  [PASS] waf_bot_fetch       20/20  GPTBot, PerplexityBot and ClaudeBot user-agents all receive HTTP 200
  [FAIL] llms_txt             0/15  No llms.txt at https://example.com/llms.txt (HTTP 404)
  [WARN] readable_without_js  7/15  Only 19 visible words in the raw HTML

Live fetch with AI bot user-agents (normal fetch: HTTP 200)
  GPTBot/1.2           HTTP 200
  PerplexityBot/1.0    HTTP 200
  ClaudeBot/1.0        HTTP 200

Top fixes by points lost
  1. [AEO -20] faq_schema: Add a short FAQ (real questions customers ask) and mark it up with
     FAQPage JSON-LD
  2. [AEO -20] question_headings: Add H2s phrased as questions (what, how, why, when, is, can, does)
     and answer each directly
  3. [AEO -15] word_count: Thin pages are rarely cited; write at least 300 words that answer a real
     question

Real output against example.com, trimmed. The full run also prints a robots.txt table for 21 crawlers and one line per page audited.

Five layers, one score each

Every layer is out of 100. The overall score is the plain mean, and the grade runs from A (90 or more) to F (below 60).

SEO

Search engine hygiene

HTTPS, a clean 200, title and description lengths, one H1, a self-referencing canonical, no noindex, a sitemap with fresh lastmod dates, a lang attribute.

AEO

Answer engine optimisation

FAQPage or HowTo schema, question-style headings, a quotable first paragraph under the H1, lists and tables, sound heading structure, enough words, Speakable or Article markup.

GEO

Generative engine optimisation

No AI crawler blocked in robots.txt, no WAF block when fetching as GPTBot, PerplexityBot or ClaudeBot, a valid llms.txt, text readable without JavaScript, entity schema with sameAs, outbound citations.

AIO

AI Overviews and Gemini

Googlebot allowed, JSON-LD that parses, content schema, dates, a named author or publisher, breadcrumbs or navigation, alt text on images, Open Graph tags. Google-Extended is reported, never penalised.

SXO

Speed and rendering

Time to first byte, HTML weight, script count, viewport meta, compression, favicon, mixed content, a share image, internal links, text-to-HTML ratio.

Install

Pick whichever fits. The first option needs nothing but Python.

Download and run
curl -O https://raw.githubusercontent.com/Servia-Tech/ai-visibility-audit/main/ai_visibility_audit.py
python ai_visibility_audit.py https://example.com
pipx
pipx install git+https://github.com/Servia-Tech/ai-visibility-audit
ai-visibility-audit https://example.com
pip
pip install git+https://github.com/Servia-Tech/ai-visibility-audit
ai-visibility-audit https://example.com
GitHub Action
- uses: Servia-Tech/ai-visibility-audit@v1
  with:
    url: https://example.com
    min-score: 70

What it checks

Forty-three checks in total. Each one prints a pass, warn or fail tag, the points earned, a one-line finding and a fix hint. The run ends with the top five fixes ranked by points lost.

Sample report

The HTML report is one file with inline CSS. It lists every check, the crawler table, the pages audited and the top fixes, and it prints cleanly.

98the author's own site, grade A

A real run against a production site, generated with --html. Read it to see what a full report looks like before you run your own.

Open the sample report

Need an llms.txt? Build one in a minute

The audit fails a site that has no llms.txt. The generator is a single page that runs in your browser: fill in the site name, a one-line summary and your key pages, then copy or download a valid file and upload it to your site root.

No sign-up and no server. Nothing you type leaves the page, and the output follows the shape the llms.txt proposal asks for: an H1, a blockquote summary, then one section of links per topic.

Open the llms.txt generator