cd /news/developer-tools/how-to-check-if-ai-systems-can-find-… · home topics developer-tools article
[ARTICLE · art-77317] src=dev.to ↗ pub= topic=developer-tools verified=true sentiment=· neutral

How to Check If AI Systems Can Find and Cite Your Site (in 5 Minutes)

Rudrendu Paul and Sourav Nandy released LLMScout, a zero-dependency CLI that runs 21 checks against any website to determine how well AI systems can find and cite it. The tool covers technical SEO fundamentals and GEO signals for AI bots, reporting PASS, WARN, or FAIL for each check. It is available as an npm package and a Python package, both installable in under a minute.

read5 min views1 publishedJul 28, 2026

Co-authored by Rudrendu Paul and Sourav Nandy.

Repo: github.com/RudrenduPaul/LLMScout, a zero-dependency, cross-platform CLI that runs 21 GEO/AEO checks against any website. npm install -g llmscout-cli

or pip install llmscout-cli

.

Position-1 click-through rate on keywords that trigger an AI Overview fell from 7.3% in December 2023 to 1.6% in December 2025, per Ahrefs. If an AI system can't find or cite your site, that traffic doesn't come back on its own. Here's how to check where your own site actually stands, in under five minutes.

LLMScout is a CLI that runs 21 checks against any site: 12 covering technical SEO fundamentals, 9 covering GEO signals specifically for AI systems. Every check reports PASS, WARN, or FAIL, and the whole run exits with a machine-readable code, so it drops straight into CI. It ships as two distributions: an npm package with two runtime dependencies, and a Python package with zero. Neither one needs a headless browser.

One check worth knowing about before you run it is ai-crawler-directives

. It reports on all 7 major AI bots separately, because blocking GPTBot (which trains models) does nothing to stop OAI-SearchBot (which does live retrieval for ChatGPT) from fetching and citing your page. They're independently configurable in robots.txt, and most tools treat them as a single signal.

There are two ways to install it. If you're not sure which one you want, try npm first:

npm install -g llmscout-cli

This needs Node 18+, and it pulls in exactly two runtime dependencies: cheerio

and commander

. No Python, no browser download, no subprocess calls.

If you'd rather use Python:

pip install llmscout-cli

This version has zero runtime dependencies; it's pure standard library. It runs the same 21 checks and gives the same PASS/WARN/FAIL verdicts as the npm version.

Both install in under a minute on Windows, macOS, and Linux.

Once installed, point it at a site:

llmscout init ./my-site --site-url https://yourdomain.com
llmscout check ./my-site

init

writes an llmscout.json

config file into ./my-site

. check

fetches the URL in that config and runs all 21 checks against it.

Here's real output from running check

against example.com:

LLMScout check -- https://example.com

[PASS] (technical) Title tag
  Title "Example Domain" is 14 characters, within the recommended 10-60 range.

[WARN] (technical) Meta description
  No meta description found.
  Fix: Add <meta name="description" content="..."> with 50-160 characters summarizing the page.

[WARN] (technical) Canonical tag
  No <link rel="canonical"> tag found.
  Fix: Add a canonical link tag pointing at the preferred URL for this page.

[FAIL] (technical) robots.txt
  robots.txt was not reachable at https://example.com/robots.txt (HTTP 404).
  Fix: Add a robots.txt file at your site root, even a permissive one, so crawlers
  and agents have explicit directives.

[WARN] (technical) sitemap.xml
  No sitemap was reachable (tried: https://example.com/sitemap.xml).
  Fix: Add a sitemap.xml at your site root, or point to one with a Sitemap: directive
  in robots.txt, to help search engines discover pages.

[PASS] (technical) Heading structure
  Exactly one <h1> and no skipped heading levels detected.

[WARN] (geo) Structured data (JSON-LD)
  No JSON-LD structured data found.
  Fix: Add schema.org JSON-LD markup (e.g. Organization, WebSite, or Article) so
  generative engines can understand the page's entities.

[WARN] (geo) AI crawler directives
  robots.txt is unreachable, so AI-crawler directives could not be determined.
  Fix: Add a reachable robots.txt if you want to state an explicit policy for AI
  crawlers (GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot, PerplexityBot,
  Google-Extended, Applebot-Extended).

Summary: 6 PASS, 14 WARN, 1 FAIL (21 checks)

There are three things worth understanding about that output.

FAIL exits with code 1. At least one check failed outright, and that's the signal a CI pipeline should gate on. WARN is a missed optimization; it won't fail the run on its own. PASS means the check came back clean.

Notice the dependency between the last two checks: because robots.txt is unreachable, ai-crawler-directives

can't determine any policy, so it reports WARN instead of FAIL. An unreachable robots.txt and one that explicitly blocks every AI bot are different problems with different fixes, and the tool keeps that distinction explicit instead of collapsing both into one warning.

Every WARN and FAIL comes with a fix suggestion built in. You don't need to look up what a canonical tag is or how to add one; the fix line tells you.

For CI, add --json

and the output becomes something a script can actually parse:

llmscout --json check ./my-site

Exit codes: 0

for a clean run, 1

if at least one check FAILed, 2

for a usage or config error. That's enough to fail a build on a new FAIL without writing your own parser logic.

The JSON includes per-check id

, status

, message

, and fix

fields, plus a summary

object with the totals. Wire it into a pre-merge check and a PR that regresses on structured data or robots.txt breaks the build instead of shipping quietly. The full schema is in the README.

If you manage more than one site, llmscout fleet

takes a JSON manifest of site paths and runs the full 21-check suite against every one of them in a single command. --out-dir

writes one auto-named report file per site instead of dumping everything to stdout at once.

llmscout fleet ./fleet.json --out-dir ./reports

The manifest:

{
  "sites": [
    { "name": "client-a", "path": "./clients/client-a" },
    { "name": "client-b", "path": "./clients/client-b" }
  ]
}

That produces client-a.txt

and client-b.txt

(or .json

with --json

), one report per site, named straight from the manifest's name

field. That gives an agency a separate, named report file per client that you can open, send, or archive, instead of scrolling back through one combined terminal dump.

The checks cover the signals that matter most for AI-system citability: structured data, crawler access policies, content extractability, entity markup. Contested signals, like llms.txt

, are flagged as informational since the evidence for their impact is still developing. Run it against your own site and see where you actually stand.

GitHub: https://github.com/RudrenduPaul/LLMScout

npm: https://www.npmjs.com/package/llmscout-cli

PyPI: https://pypi.org/project/llmscout-cli/

Co-authored by Rudrendu Paul and Sourav Nandy. Rudrendu is an AI/ML builder and published researcher (ICML, Springer Nature, Elsevier, IEEE) with 15+ years of experience at Fortune 50 companies, building open-source tools for the AI development ecosystem. Find the code at github.com/RudrenduPaul.

── more in #developer-tools 4 stories · sorted by recency
── more on @rudrendu paul 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/how-to-check-if-ai-s…] indexed:0 read:5min 2026-07-28 ·