Reference

The six checks

Every check, its pass/warn/fail semantics, its weight, and the scoring model.

run(url) executes six checks (lib.js#L97-L113). Each check returns a status (pass, warn, or fail), a detail string, and a concrete fix when it does not pass.

#CheckWeightPassFail
1AI crawler access35No tracked AI crawler is blocked by robots.txtEvery tracked crawler is blocked
2Structured data (JSON-LD)22At least one parseable JSON-LD block with a typeNone found
3Title and meta description15Title 15-65 chars and description 70-165 charsBoth missing
4Open Graph tags83 or more og: tagsNone
5XML sitemap15/sitemap.xml exists (or is declared in robots.txt)None found
6llms.txt5/llms.txt exists and is non-emptyWarn only: absence never fails a site

Notes on semantics, straight from the source:

  • Check 1 blocks only on a group-level Disallow: / (or /*) that applies to the crawler and is not offset by a root Allow (lib.js#L47-L64). Partial-path disallows do not count as blocking.
  • Check 2 distinguishes parseable JSON-LD from unparseable blocks: unparseable JSON-LD downgrades to warn, not fail (lib.js#L103-L105).
  • Check 6 is deliberately gentle: the detail text notes there is no proven citation effect, so a missing llms.txt is hygiene, not a ranking problem (lib.js#L113).

Scoring and grades

Statuses map to points (pass 1, warn 0.5, fail 0) and are combined with the weights above (lib.js#L115-L118):

  • score = round(100 x sum(weight x points) / sum(weights))
  • Grades: A at 90+, B at 75+, C at 60+, D at 40+, F below 40