npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@dariodario/geochecker

v1.1.0

Published

Open-source Generative Engine Optimization (GEO) scorer. Check any site's readiness for AI search.

Downloads

552

Readme

GEO Checker — by Dario Dario

GEO Checker

Check any site's readiness for AI search with our open-source Generative Engine Optimization (GEO) checker.

npm license

GEO (Generative Engine Optimization) is the practice of structuring web pages so that LLMs — ChatGPT, Claude, Gemini, Perplexity, Google AI Overviews — can find, understand, and cite your content.

GEO Checker scores any URL across five categories with concrete, actionable findings.

Quick start

npx @dariodario/geochecker https://example.com
URL:     https://example.com/
Score:   42/100  (F)

STRUCTURE  (25/100)
  ✗ schema           0/100  No structured data detected.
  ✗ structure       25/100  Heading structure has gaps: no H2 sections; thin content (17 words).

CITABILITY  (60/100)
  • citability      60/100  Page has factual claims but no clear source attribution.

CRAWLABILITY  (80/100)
  ✓ crawlability    80/100  Robots.txt allows AI crawlers.

…

What it scores

| Category | What it measures | Why LLMs care | |---|---|---| | Structure | Schema.org JSON-LD, heading hierarchy, semantic HTML landmarks | LLMs use structured data to identify entities, articles, authors, products | | Citability | Author bylines, publish dates, source attribution, factual density | LLMs preferentially cite content with clear authorship and verifiable claims | | Crawlability | robots.txt policy for AI crawlers, indexability, response codes | If you block GPTBot/ClaudeBot/etc., you're invisible to those engines | | Freshness | Last-modified dates, content recency signals | LLMs weight recent content higher for time-sensitive queries | | Authority | Outbound links, mentions of credentialed sources, internal linking depth | LLMs use authority signals when picking which source to cite |

Each check returns a score, a finding, a detailed explanation, and a concrete fix.

Programmatic usage

import { runChecks } from "@dariodario/geochecker";

const report = await runChecks("https://example.com");
console.log(report.overall);          // 0–100
console.log(report.categories);       // per-category scores
console.log(report.checks);           // every individual check + fix

Streaming

For live UIs that show findings as they come in:

import { runChecksStream } from "@dariodario/geochecker";

for await (const evt of runChecksStream("https://example.com")) {
  if (evt.type === "fetched") console.log("page fetched");
  else if (evt.type === "check") console.log(evt.result.id, evt.result.score);
  else if (evt.type === "done") console.log("score:", evt.report.overall);
}

Custom checks

import { runChecks, defineCheck } from "@dariodario/geochecker";

const wordCountCheck = defineCheck(async (page) => {
  const text = page.html.replace(/<[^>]+>/g, " ");
  const words = text.trim().split(/\s+/).length;
  return {
    id: "word-count",
    category: "structure",
    score: words >= 300 ? 100 : Math.round((words / 300) * 100),
    status: words >= 300 ? "pass" : "warn",
    finding: `Page has ${words} words.`,
    detail: "LLMs prefer pages with substantive content (300+ words).",
    fix: "Expand the page with detailed coverage of the topic.",
    weight: 1,
  };
});

const report = await runChecks("https://example.com", {
  extraChecks: [wordCountCheck],
});

CLI options

| Flag | Description | |---|---| | --json | Output the full report as JSON (machine-readable) | | --category <name> | Show only one category (structure, citability, crawlability, freshness, authority) | | --min-score <n> | Exit with code 1 if overall < n. Use as a CI quality gate. | | -h, --help | Show help |

As a CI gate

# .github/workflows/seo.yml
- run: npx @dariodario/geochecker https://your-staging-site.com --min-score 75

Hosted version

Want comparison against a competitor, score history over time, branded PDF reports, or scheduled scans? The hosted version at dariodario.com/geo-check runs the same engine plus those features. Free for single-URL scans.

Contributing

PRs welcome — particularly for new checks. Please open a Discussion first if proposing a substantial addition.

git clone https://github.com/dariodario-com/geochecker
cd geochecker
npm install
npm run build
npm test

About

Built and maintained by Dario Dario, an AI-native studio in Stockholm. We design and ship AI agents for SMEs.

License

MIT — do anything.