CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

blog-decay

Compare two Google Search Console page exports (current vs previous period) to flag pages whose clicks or impressions fell by a chosen threshold, with a triage hint (refresh, query shift, consolidate, prune). The 20% default is a screening heuristic, not proof of decay. Use for "/blog decay", "content decay", "QoQ decline", "refresh declining posts". Needs two GSC exports; not for diagnosing a single traffic drop live (blog-google) or rewriting posts (blog-rewrite).

Quality

93%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Quality

Content

92%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

An excellent operational body: lean, domain-specific, fully executable commands, and unusually strong validation checkpoints for a batch analysis. The weak spot is progressive disclosure — a key reference (`orchestration-details.md`) is cited without a resolvable path, and the analyzer script and sibling-skill dependencies sit outside the skill directory, making the bundle's file layout hard to navigate.

Suggestions

Give `orchestration-details.md` an explicit relative path (e.g., `${CLAUDE_SKILL_DIR}/references/orchestration-details.md`) as a markdown link, and place it in a `references/` directory inside the skill bundle so it is resolvable from the SKILL.md alone.

State where `content_decay.py` lives (or bundle it under `scripts/` with a one-line path note) instead of relying solely on the env-var/default fallback chain for `BLOG_SCRIPT_DIR`, which obscures the file layout.

Consider moving the extended URL-normalization guidance and the GSC API row-limit details into the reference file, keeping SKILL.md to the workflow plus a short pointer — this would shorten the front sections and strengthen the overview-to-detail split.

DimensionReasoningScore

Conciseness

The body is lean and assumes Claude's competence: it never explains what Google Search Console, CTR, or quarter-over-quarter comparison are; it spends its tokens only on non-obvious domain knowledge (URL-string matching pitfalls, the 50,000-row API cap, 16-month data retention, seasonality vs. noise). Dense passages like the runtime-path rules are operational instructions, not padding; every section (workflow, live export, severity, actions) earns its place.

5 / 5

Actionability

Guidance is fully executable: copy-paste bash blocks for the offline analyzer with variable resolution and absolute-path guards, concrete flag examples (--threshold 0.30, --metric impressions, --format markdown --output), exact gsc_query invocations, and explicit input-format acceptance rules (page/url, clicks, impressions, top-level rows). The only placeholders (property, YYYY-MM-DD dates) are inherently user-specific, which is standard practice, and the report's field semantics (severity tiers, needs_validation, dropped_out) are specified.

5 / 5

Workflow Clarity

Both workflows (offline default, optional live export) are clearly sequenced — confirm the property, produce the two exports, run the analyzer — and this batch analysis is wrapped in explicit validation checkpoints: a pre-flight URL-normalization/same-property check, the instruction to ignore small-baseline flags, the override rule "mark them as needs_validation, not dropped_out, even if the analyzer's JSON says dropped_out" with false-drop causes (row limits, filters), error-recovery hints (check --help for normalization), and a post-hoc checklist (indexation, canonical status, query loss, links, seasonality, business value). Anchor 5 fits best; anchor 4's 'minor validation gaps' understates how many checkpoints are present.

5 / 5

Progressive Disclosure

Section structure and tables are well organized, but the body's references are weakly signaled and unverifiable in the bundle: "Read the main reference `orchestration-details.md`" is given without a path or link, `content_decay.py` lives outside the skill dir via env-var-resolved `../../scripts`, and no references/, scripts/, or assets/ directories exist in this bundle at all. That matches anchor 3 ('references present but not clearly signaled') better than anchor 4, and the dense path-substitution preamble adds navigation friction.

3 / 5

Total

18

/

20

Passed

Description

92%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A highly specific, third-person description with explicit 'Use for' triggers and explicit boundaries against sibling skills. Its only weakness is slightly incomplete natural-language trigger coverage (missing user phrasings like 'traffic decline' or 'losing clicks').

DimensionReasoningScore

Specificity

Multiple concrete actions are named — "Compare two Google Search Console page exports (current vs previous period) to flag pages whose clicks or impressions fell by a chosen threshold, with a triage hint (refresh, query shift, consolidate, prune)" — covering inputs, the comparison logic, the threshold parameter, and four named output actions, in third person. This is comprehensive for the skill's scope; the score-4 anchor ('minor gaps in coverage') fits less well since nothing material about the capability is left unspecified.

5 / 5

Completeness

Both questions are answered explicitly: what — compare two GSC exports and flag pages above a decline threshold with triage hints; when — "Use for '/blog decay', 'content decay', 'QoQ decline', 'refresh declining posts'" with concrete trigger phrases. It also adds boundary guidance ("not for diagnosing a single traffic drop live (blog-google) or rewriting posts (blog-rewrite)"), which exceeds the anchor-5 example rather than falling short of it.

5 / 5

Trigger Term Quality

Good natural coverage: "/blog decay", "content decay", "QoQ decline", "refresh declining posts", plus "Google Search Console" and "clicks or impressions fell". A few natural phrasings users would plausibly say are missing (e.g., "traffic drop/decline", "posts losing clicks", "declining pages"), so it sits between anchor 4 (good coverage, a few natural terms missing) and anchor 5 (comprehensive including synonyms) — closer to 4 than 5.

4 / 5

Distinctiveness Conflict Risk

A clear niche (QoQ GSC page-level decay comparison between two exports) with distinct triggers, and it explicitly disambiguates the two closest sibling skills (blog-google, blog-rewrite). Minimal conflict risk with anything else; anchor 5 is the best fit.

5 / 5

Total

19

/

20

Passed

Validation

93%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

frontmatter_unknown_keys

Unknown frontmatter key(s) found; consider removing or moving to metadata

Warning

Total

15

/

16

Passed

Repository

AgriciDaniel/claude-blog

Path

skills/blog-decay/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.