geolint fetches the page, its robots.txt and llms.txt, evaluates 51 known AI
crawler tokens against your robots.txt, runs 52 audit rules, and prints a
scored report with a concrete fix for every finding.
Why
ESLint for AI search: audits AI-crawler access, llms.txt, schema and citability.
MIT
Последняя проверка
2026-11-15
Звёзды
4
Инструменты
—
Аптайм
—
AI answers are the new front page. ChatGPT, Perplexity, Claude, Copilot and
Google AI Overviews send traffic — or don't — based on whether their crawlers
can fetch and quote your pages.
Most sites accidentally block or confuse AI crawlers. A stale
Disallow: /, a noindex left over from staging, a client-rendered page that
looks empty to a bot that doesn't run JavaScript.
Existing tools are blocklists or score-only web apps. They tell you to
block everything, or give you a number with no path to improve it. geolint is
the linter: concrete findings, concrete fixes, runnable in CI on every PR.
What it checks
52 rules across 5 categories — geolint rules lists them all, and
docs/rules.md documents what each rule checks, why it matters
and how to fix violations.
The action produces score/grade step outputs, a SARIF report for GitHub code
scanning, and a markdown report for job summaries and PR comments. Full recipes
— SARIF upload, updating a single PR comment, baseline drift detection — in
docs/github-action.md.
Exit code is 1 when the score drops below the gate (or findings regress
against --baseline), 0 otherwise — works in GitLab CI, CircleCI, npm
scripts, pre-deploy hooks.
Show your score as a README badge
npx @iliasabk/geolint check https://example.com --badge
# → writes geolint-badge.svg + prints the markdown snippet to paste
Commit the SVG, or regenerate a shields endpoint JSON in CI
(--badge-endpoint) for a badge that never goes stale.
Output formats
-f pretty (default) renders the terminal report above. The machine formats:
-f json — the full ScanReport: findings, per-category scores, bot access matrix
-f html — a self-contained interactive report (score ring, findings filter,
bot matrix) you can share or host anywhere
Add -o report.json to write to a file; stdout stays clean for piping.
geolint on the real web
The repo dogfoods itself: a nightly workflow re-audits eight
well-known sites and commits the scores back, and the showcase
site publishes the full interactive
reports — github.com, anthropic.com, stripe.com and more, regenerated on every
push to main.
Programmatic API
import { scan } from '@iliasabk/geolint';
const report = await scan('https://example.com', {
ignore: ['technical/https'],
timeout: 10_000,
});
console.log(report.score, report.grade); // e.g. 86 'B'
for (const f of report.findings) {
console.log(f.severity, f.ruleId, f.message, f.fix);
}
scan(url, options) returns a typed ScanReport. Also exported: the bot
registry (AI_BOTS, botsByPurpose), the rule registry (allRules,
ruleById), robots.txt/llms.txt parsers, badge generators, scorers and all
four reporters.
Use it from AI assistants (MCP)
geolint mcp speaks the Model Context Protocol
over stdio — Claude Desktop, Cursor, VS Code and Windsurf can audit sites,
generate llms.txt and compare URLs as native tools:
Five tools: audit_url, generate_llms_txt, compare_urls, list_rules,
list_ai_bots — all read-only, with structured output and per-call timeouts.
Setup for every client: docs/mcp.md.
The bot registry is the point
geolint bots lists 51 AI crawler tokens with a purpose-aware impact
assessment — because "should I block this bot?" has a different answer for each:
Purpose
Examples
If you block it
training
GPTBot, ClaudeBot, CCBot
absent from future training data
search
OAI-SearchBot, PerplexityBot, Claude-SearchBot
invisible in AI answers now
user-fetch
ChatGPT-User, Claude-User
invisible in AI answers now
mixed
Bytespider, Amazonbot, Diffbot
both
And two nuances other tools miss:
Some fetchers ignore robots.txt. OpenAI, Perplexity and Meta document that
their user-triggered fetchers (ChatGPT-User, Perplexity-User,
Meta-ExternalFetcher) may not honor robots.txt. ai-crawler/user-fetch-bypass
tells you when a Disallow won't work — enforce at the WAF/auth layer instead.
Stale tokens.anthropic-ai, Claude-Web, FacebookBot are retired.
ai-crawler/stale-tokens flags them and names the replacement token — a
User-agent: anthropic-ai rule does nothing today.
Control-only tokens like Google-Extended and Applebot-Extended never fetch
at all — they only set a preference — and geolint treats them accordingly.
What geolint is honest about
llms.txt is a proposal, not a standard. No major AI vendor has committed
to reading it — so llms-txt/* findings are weighted as warnings and hints,
not errors. geolint still checks it (and geolint init generates it) because
adoption is growing and the cost is one file.
Correlation ≠ causation. The citability rules are grounded in published
GEO research (quotations/statistics/citations measurably lift share-of-answer;
AI crawlers other than Googlebot and Applebot don't execute JavaScript), but
signals like question-shaped headings are hints, not facts — they're info
severity and geolint says so.
Every rule shows its reasoning.docs/rules.md documents
why each rule exists; the research sources are in
docs/research-notes.md, including the vendor docs
behind every bot's robots.txt posture.
The bot registry is a standalone reference.docs/ai-crawlers.md lists every tracked token with
purpose, per-vendor robots.txt posture and vendor docs — the same data
geolint bots and the list_ai_bots MCP tool expose.
Compared to the alternatives
Purpose-aware bot registry
Per-vendor robots.txt posture
Runs in CI
Fix per finding
Generates llms.txt
Free / OSS
geolint
✅
✅
✅
✅
✅
✅
ai.robots.txt-style blocklists
❌
❌
n/a
❌
❌
✅
GEO-optimizer skills / prompt packs
❌
❌
❌
❌
❌
varies
llms.txt validators
❌
❌
some
partial
some
✅
Hosted GEO audit web apps
partial
❌
❌
partial
❌
❌
Details and the reasoning behind each column: docs/comparison.md.
geolint also ships an MCP server, a score badge and regression baselines.
Roadmap
Planned for v0.4+:
geolint watch — re-audit on deploys/file changes
Custom rule API for project-specific checks
Deeper schema coverage (more @type validators)
Homebrew formula
Report localization beyond English
Contributing
Issues and PRs welcome — see CONTRIBUTING.md. New rules are
the best contribution: each needs a check(ctx), findings with fix, a test
and a docs entry.
Списка инструментов пока нет. У удалённых серверов он появляется после первой проверки состояния.
FAQ
Вопросы
Как установить Geolint?
Скопируйте на этой странице конфигурацию stdio для Cursor, Claude Desktop, Claude Code или VS Code. Она использует установку издателя, а не прокси PlugMCP.
Нужен ли API-ключ для Geolint?
В этой записи не указано обязательных переменных окружения.
Какой транспорт использует Geolint?
Geolint работает локально через stdio.
Когда Geolint проверялся в последний раз?
Последняя проверка: 2026-11-15. ESLint for AI search: audits AI-crawler access, llms.txt, schema and citability.