blog-seo: I Packaged My Own SEO Audits Into a Skill
I've been doing the same SEO cleanup by hand for weeks. Run a mental diff across all my posts, find the ones missing a keyword field, punch up three descriptions, wonder why that one post has an empty heroImage. Repeat.
This week I caught myself doing it for the third time and thought: this is exactly what a skill is for.
So I built blog-seo β a Claude Code skill that audits my Astro blog frontmatter, fixes issues in bulk, and runs two kinds of evals. Here's how it works and why the dual eval model is the right way to think about content quality.
The Problem: SEO Debt Accumulates Fast
When you're shipping posts at pace β and I've shipped 15+ in the past month β frontmatter hygiene slips. You're focused on the content. The keyword field doesn't feel urgent when you're in the zone writing about LangGraph at 11 PM.
But it adds up. I ran a fresh audit this morning:
Total issues: 50
- 22 posts missing keyword
- 15 posts with empty heroImage
- 9 posts with bad title format
- 2 posts with descriptions under 50 chars
That's across ~72 posts. Roughly 70% had at least one issue. Not catastrophic, but not nothing.
Two Kinds of Evals
The insight that made this skill worth building: there are two distinct types of quality checks, and conflating them is why most "SEO tools" feel wrong.
Eval Type 1: Spec Compliance
Does the post have all required fields in the right format?
This is deterministic. Either keyword is present or it isn't. Either description is under 160 characters or it isn't. Either the title follows <Tool>: <Headline> or it's just words.
The skill ships a bash script that scans every .md file in the blog and reports grouped issues:
bash ~/.claude/skills/blog-seo/scripts/audit.sh ~/Code/magerblog/src/content/blog/
Category-aware too β it only enforces the <Tool>: <Headline> title format on code and tech posts. Recipe posts get a pass.
Eval Type 2: Quality (LLM-as-Judge)
Does the description actually make someone want to click?
This is subjective, which means it needs a model. The skill includes a scoring rubric with three dimensions per field:
Description: Clarity + Keyword Density + Click Appeal (each 1β5)
Title: Format Compliance + Hook Strength + Audience Clarity (each 1β5)
Output is a table β every post gets a score, bottom 3 get specific rewrite suggestions:
| Post | Desc | Title | Top Fix |
|-------------------------|-------|-------|--------------------------------|
| hello-world | 1.7 | 1.0 | Rewrite title + desc from scratch |
| go-fx-firestore-app | 3.2 | 2.8 | Add primary keyword to desc |
| memd-portable-human-context | 4.3 | 4.7 | β
Passing |
The passing threshold: description β₯ 3.5, title β₯ 4.0. Posts with both below 3.0 are "SEO debt" β fix before promoting on social.
The Skill Structure
skills/blog-seo/
βββ SKILL.md β workflows, triggers, commit convention
βββ references/
β βββ magerblog-schema.md β full frontmatter spec + examples
β βββ quality-rubric.md β LLM-as-judge scoring rubric
βββ scripts/
βββ audit.sh β spec compliance scanner
Classic progressive disclosure: SKILL.md stays lean, references only load when needed. The audit script runs without ever touching the context window.
Install It
The skill is live in the Loooom catalog:
/plugin marketplace add mager/loooom
Then in any Claude Code session on your Astro blog:
"Run an SEO audit on my posts"
It picks up the skill, runs the spec audit, and offers to batch-fix whatever it finds. Follow up with "run quality evals on the last 10 posts" and it scores them with the rubric.
The Meta Move
There's something I genuinely enjoy about this: using an AI skill to audit AI-generated content. Half my posts are written with Claude Code assistance. The SEO quality of those posts is now evaluated by a skill that runs inside Claude Code.
The loop closes. The machine maintains itself.
That's the point of skills β not just to automate tasks, but to encode standards. The rubric in quality-rubric.md is my actual opinion on what makes a good description. Every time the skill runs, that opinion becomes policy.
Build the tool. Ship the standard.