by jianruntech
Will ChatGPT cite your site? Score it in 20 seconds against an open, versioned GEO rubric. Python, zero dependencies.
# Add to your Claude Code skills
git clone https://github.com/jianruntech/geo-scoreGuides for using cli tools skills like geo-score.
See how geo-score compares with popular alternatives.
geo-score is an open-source cli tools skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by jianruntech. Will ChatGPT cite your site? Score it in 20 seconds against an open, versioned GEO rubric. Python, zero dependencies. It has 65 GitHub stars.
geo-score's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/jianruntech/geo-score" and add it to your Claude Code skills directory (see the Installation section above). geo-score ships a SKILL.md manifest, so compatible agents can discover and load it automatically.
geo-score is primarily written in Python. It is open-source under jianruntech on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other CLI Tools skills you can browse and compare side by side. Open the CLI Tools category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh geo-score against similar tools.
No comments yet. Be the first to share your thoughts!
Top skills in this category by stars
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
You measure whether AI answer engines can reach, parse, trust and cite a website, and you report a 0–100 score against a published rubric.
You measure. You do not remediate. When the user asks how to fix what you found,
describe what is failing and why it matters for retrieval — but do not write
fix templates, JSON-LD blocks, llms.txt boilerplate or rewritten copy. That is
out of scope for this skill. Say so plainly and point to
README.md#scope--what-this-does-not-do.
| Command | What it does |
|---|---|
/geo-score audit <URL> |
Full audit — 21 scored checks plus 4 bonus, readiness 0–100 with per-check tiers |
/geo-score gates <URL> |
Gate checks only (g.*) — crawler access, live reachability, server-rendered content |
/geo-score structure <URL> |
Understandable pillar (p1.*) — llms.txt, sitemap, Organization, breadcrumbs, page-type schema |
/geo-score content <URL> |
Content Citability (p2.*) — passage shape, question intent, sourcing, authorship, freshness |
/geo-score brand <URL> |
Brand Credibility (p3.*) — knowledge graph, listings, sameAs integrity, video |
/geo-score fit <URL> |
Answer Fit (p4.*) — extractable shape, question coverage, Chinese engines |
/geo-score rubric |
Print the current rubric with weights and pass conditions |
The scoring specification lives in rubric/v1.1.md. Read it before
scoring. Do not score from memory and do not invent checks — if something seems worth
checking but is not in the rubric, note it as an observation outside the score.
Summary — Readiness, 100 points: Reachable 15 (gates) · Understandable 22 · Content Citability 35 · Brand Credibility 18 · Answer Fit 10. Plus up to +6 in bonus checks that stay out of the denominator.
Report two numbers, never one. Readiness is what the site owner can fix and what
this rubric scores. Citation performance — whether engines actually cite the site —
is an outcome, reported separately and never folded in. Merging them produces the
failure v1.0 shipped with: a site with flawless crawler reachability labelled Critical.
See rubric/calibration-v1.1.md.
Score in tiers, not pass/fail. Every check has 2–4 tiers. Take the highest tier the evidence satisfies. Binary judgement is what collapsed v1.0's discrimination.
Three gate checks (g.robots, g.reachable, g.ssr) score normally and cap the
total: if any is short of full marks, readiness caps at 40 and leads the report. Until a
crawler can reach the content, nothing else you change has any effect.
Judge substance, not format. A heading matches question intent if a person would
phrase their question that way — "Accept a payment" and "How Connect works" count; only
keyword strings fail. A freshness signal is a visible date or schema date, either one.
Superseded rubric/v1.0.md remains published; v1.0 and v1.1 scores are
not comparable.
1 · Sample the site. Score the site, not a page. Fetch exactly 8 URLs: the homepage, 2 main product or service pages, 2 documentation or knowledge pages, and 3 recent content pages. Take all of them if the site has fewer and say so in the report. Every tier in the rubric is defined as a count out of these 8, so a different sample size produces a different score — the report must list every URL you used.
Fetching rules — get these wrong and every number after is wrong.
301 to /llms.txt is not missing it;
it may be a locale or www redirect. Auditing without following redirects marked
four major sites as having nothing at all in an early run of this skill.OAI-SearchBot, PerplexityBot) when testing
reachability, and a normal browser UA when reading content. The difference between
the two is the reachability check.g.ssr. The point of that check
is what a crawler receives.2 · Gates (g.*) and the Understandable pillar (p1.*). Fetch /robots.txt, /llms.txt, /llms-full.txt,
/ai.txt, /sitemap.xml. Check the <head> of sampled pages for GEO <link> tags.
Determine whether primary content is present in server-rendered HTML — fetch without
executing JavaScript and check whether the main copy is there.
Crawler list: reference/ai-crawlers.md.
3 · Structured data (p1.organization, p1.breadcrumb, p1.page-type). Extract all JSON-LD from sampled pages. Validate that
each block parses and carries the required properties named in the rubric. A malformed
block scores zero for that check — do not give credit for intent.
4 · Content Citability (p2.*). This carries the most weight and needs the most
care. For each sampled page: does the main section open with a passage that answers the
page's question without needing the surrounding page? Count numeric claims and how
many carry an attributable source. Identify the author and whether they resolve to a real
person. Check dateModified.
5 · Brand Credibility (p3.*). Look for a knowledge-graph record. Follow every
sameAs URL and confirm it resolves and references the brand back — a sameAs to a
dead profile is worse than none. Check for mentions on domains the brand does not control.
6 · Answer Fit. Everything scored here is observable from outside. Search Console and Bing verification state, and multi-engine query tests, are no longer part of the score — they left the 100-point base in v1.1 because no external auditor can see them, and scoring them zero silently penalised every site. Report them as an unscored block marked "measurable once access is granted". Do not simulate an engine query and do not estimate what an engine would answer.
7 · Score and report. Sum, band, and produce the report. Always state the rubric version and the date.
examples/sample-report.md. Emit machine-readable output against
schema/report.v2.json.p1.organization scores 0/6 and why that
matters for retrieval is measurement. Handing over the JSON-LD to paste is not.Will ChatGPT cite your site? Score it in 20 seconds.
curl -sL https://raw.githubusercontent.com/jianruntech/geo-score/main/cli/geo_score.py \
| python3 - stripe.com --brief
One command. About twenty seconds. Every check, and what the next tier needs.
AIV READINESS https://stripe.com
──────────────────────────────────────────────────────────────────────────
71 / 100 Solid
12 points to Leading
Reachable 11/15
◐ Crawlers allowed in robots.txt ███████████░░░░░░░ 3/5
✓ Reachable to retrieval agents ██████████████████ 5/5
◐ Main content server-rendered ███████████░░░░░░░ 3/5
Understandable 15/22
◐ Sitemap discoverable and fresh █████████░░░░░░░░░ 2/4
✓ llms.txt present and structured ██████████████████ 5/5
✓ Organization + WebSite schema ██████████████████ 6/6
✗ BreadcrumbList on nested pages ░░░░░░░░░░░░░░░░░░ 0/3
◐ Page-type schema (Product, FAQ…) █████████░░░░░░░░░ 2/4
Content Citability 25/35
✓ Self-contained answer passages ██████████████████ 9/9
◐ Headings match how people ask ████████░░░░░░░░░░ 3/7
◐ Freshness signal present █████████░░░░░░░░░ 3/6
✓ Statistics carry a source ██████████████████ 7/7
◐ Named, verifiable authorship █████████░░░░░░░░░ 3/6
Brand Credibility 8/10
⊘ Third-party listings ·················· —
⊘ Independent mentions ·················· —
✓ Knowledge-graph entity ██████████████████ 4/4
◐ sameAs links resolve ████████████░░░░░░ 2/3
◐ Video and multimodal presence ████████████░░░░░░ 2/3
Answer Fit 2/4
◐ Content shaped for extraction █████████░░░░░░░░░ 2/4
⊘ Covers the questions people ask ·················· —
⊘ Chinese engine readiness ·················· —
Biggest gaps
+4 Headings match how people ask about half do
+3 Named, verifiable authorship and the name links to a verifiable identity page
+3 Freshness signal present most pages do, and dateModified agrees with the visible date
Scored 61 / 86 observable · 4 checks left the denominator · rubric v1.1
Needs judgement: p3.listings, p3.mentions, p4.question-coverage, p4.cn-engines
Full rubric and what each tier means:
https://github.com/jianruntech/geo-score
Python 3.8+, standard library only, nothing to install. It reads public URLs and prints a score against a published, versioned rubric — not a black box.
See how 314 well-known sites score → · a quarter of them cannot be cited at all.
GEO means Generative Engine Optimization — getting cited by ChatGPT, Perplexity, Google AI Overviews, Gemini and Copilot. Nothing to do with geography or maps.
Classic SEO asks where do I rank. Answer engines don't rank — they retrieve passages, decide whether a source is worth quoting, and cite it. Different question, different failure modes: a site can sit at position 3 on Google and never be quoted, while a page nobody links to gets cited daily because its passages are clean.
Most of what determines this is mechanical and cheap to fix — a robots.txt line, a
JSON-LD block, a date in a template, a paragraph rewritten so it stands on its own. The
hard part is knowing which of them you are missing, and what each one is worth.
21 tiered checks totalling 100 points, plus 4 bonus checks worth up to +6 outside the denominator. Full specification: rubric/v1.1.md · 简体中文
| Pillar | Pts | Asks |
|---|---|---|
| Reachable — gates | 15 | Can a retrieval crawler get the page at all? robots.txt, live reachability across 10 AI user-agents, server-rendered content |
| Understandable | 22 | Can it tell what the page and the company are? Organization + WebSite, llms.txt, sitemap, breadcrumbs, page-type schema |
| Content Citability | 35 | Is there anything here worth quoting? Self-contained answer passages, headings that match how people ask, sourced figures, real bylines, freshness |
| Brand Credibility | 18 | Why should an engine trust it? Knowledge-graph entity, third-party listings, sameAs that resolves, video presence |
| Answer Fit | 10 | Is the content shaped to be lifted into an answer? |
Content Citability carries the most weight on purpose: answer engines retrieve passages, not domains. Passage shape beats domain authority more often than classic SEO intuition expects.
Every scored check is tiered — 2 to 4 tiers, each naming a count out of the 8 sampled pages, so two people scoring the same site agree on the arithmetic. Three checks are gates: score zero on crawler access, live reachability or server-rendered content and the result caps at 40, because until a crawler can reach the content nothing else you change has any effect.
| 0–30 | 31–50 | 51–65 | 66–82 | 83–100 |
|---|---|---|---|---|
| Not started | Early | Growing | Solid | Leading |
Band names describe a stage, not a verdict. External benchmarks put most business sites in the 30–55 range, so a score in the forties is ordinary, not alarming.
A quarter of them cannot be cited at all. 80 sites have a gate check at zero — a
retrieval crawler simply cannot get the content. 19 block AI crawlers by name in
robots.txt, which is an editorial choice and reported as such — amazon.com lands at 12
for exactly this reason. 45 serve a page whose body only exists after JavaScript runs.
Their content is there, a browser sees it, and a crawler gets an empty shell. That group
almost certainly did not choose it. A further 16 hand a crawler an outright error.
Median 56. Range 12 to 98.
| Site | Score | Band |
|---|---|---|
| pulumi.com | 98 | Leading |
| minimaxi.com | 95 | Leading |
| lumalabs.ai | 93 | Leading |
| resend.com | 93 | Leading |
| ironcladapp.com | 91 | Leading |
| … | ||
| amazon.com | 12 | Not started |
| keepa.com | 12 | Not started |
| mercadolibre.com | 12 | Not started |
The full table, by sector → · markdown · raw data · re-run it
Two more findings worth the click: sites built for the Chinese market score 19 points lower than everyone else (median 40 against 59 — a gap that has held between 16 and 23 points across five separate samples, from 38 sites up to 314), and the same three cheap things — a date in the page template, an opening paragraph that stands on its own, one JSON-LD block — are missing from more than half the field.
Every number here is reproducible with the command at the top of this page — and we measured how reproducible. Running the whole benchmark twice and comparing every site: 96% land within ±5, 45% land identically. Read one site's score as ±5 rather than as exact; medians are stable. The unstable part is the gate checks, where five sites flipped between runs because their bot protection answered a crawler differently. The band, the control experiment and the per-site pairs are in benchmark/REPRODUCIBILITY.md.
For five reference sites we also publish hand-scored audits covering all 21 checks, with the evidence behind each one: examples/audits/v1.1/.
CLI — no install, no dependencies, 20 seconds.
python3 cli/geo_score.py example.com # human-readable
python3 cli/geo_score.py example.com --explain # with the evidence behind every check
python3 cli/geo_score.py example.com --json # conforms to schema/report.v2.json
python3 cli/geo_score.py example.com --compare competitor.com # side by side
python3 cli/geo_score.py example.com --badge aiv-badge.svg # embeddable SVG
python3 cli/geo_score.py example.com --share # one line to paste somewhere
GitHub Action — score on every push, fail the build when it regresses.
- uses: jianruntech/geo-score@v1
with:
url: https://example.com
fail-under: 40
Claude Code skill — the CLI measures what a static fetch can see. Four checks need off-site search or human judgement, and the skill does those too.
git clone https://github.com/jianruntech/geo-score ~/.claude/skills/geo-score
# then: /geo-score audit https://example.com
The CLI leaves those four checks out of the denominator rather than guessing, so it reads a little lower than a full audit — typically by 5 to 15 points on an established brand, which has listings and mentions the CLI cannot see.
A score you cannot audit is a number someone made up. So the specification is the product, and the tools are implementations of it: