Seo score
The SEO + AI-search (GEO/AEO) optimization toolkit for Claude Code — two-score audit + opt-in fixer. Built for 2026-2027.
npx -y skills add Hainrixz/claude-seo-ai --skill seo-scoreAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Compute the two never-blended 0-100 scores (Search SEO and AI Visibility / GEO-AEO) from a set of findings, with severity-weighted category values, dynamic re-normalization of conditional modules, severity gating, and letter bands. Used by seo-orchestrator and the `score` command.
SKILL.md
2.1 KB, as published. Nobody here has run it
seo-score
Turns findings (conforming to schema/finding.schema.json) into the two scores. Full model in references/scoring-model.md — follow it exactly.
Steps
- Group findings by the category each module maps to, per score. A finding contributes only to the score(s) in
expected_impact.axis(search,ai, orboth). - Category value =
100 × Σ(status_factor × severity for scored findings) / Σ(severity), wherestatus_factor: pass 1.0, warn 0.5, fail 0.0. Excludeneeds_apiandnot_applicablefrom both sums. - Active weights: drop conditional categories (e-commerce/local/international) whose modules produced no findings; re-normalize remaining weights to sum to their active total.
- Score =
Σ(category_value × weight) / Σ(active weight)for each of Search SEO and AI Visibility. - Severity gating: if any finding has
severity: 5andstatus: fail, cap the affected score at 40 and setcapped: true. - Assign bands (A≥90, B≥80, C≥70, D≥60, F<60) and a one-line interpretation from the Search×AI quadrant.
- M21 (llms.txt) weight is 0 — report it, never let it move the AI score.
Determinism
Prefer scripts/score.mjs (run via Bash with the findings JSON) so the number is reproducible and CI-checkable; if Node is unavailable, compute by hand following the same formula and note the fallback. Either way the math must match references/scoring-model.md.
Output
{ "search_seo": { "value": 78, "band": "C", "capped": false, "interpretation": "...", "categories": [ {"name":"Indexability & Crawl","weight":22,"value":91,"active":true}, ... ] },
"ai_visibility": { "value": 64, "band": "D", "capped": false, "interpretation": "Citable structure missing; add answer blocks and schema.", "categories": [ ... ] } }