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.
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.
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).
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.
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.
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.
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.
Time to first byte, HTML weight, script count, viewport meta, compression, favicon, mixed content, a share image, internal links, text-to-HTML ratio.
Pick whichever fits. The first option needs nothing but Python.
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 install git+https://github.com/Servia-Tech/ai-visibility-audit ai-visibility-audit https://example.com
pip install git+https://github.com/Servia-Tech/ai-visibility-audit ai-visibility-audit https://example.com
- uses: Servia-Tech/ai-visibility-audit@v1
with:
url: https://example.com
min-score: 70Forty-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.
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.
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.
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