Case study
Skill mkreindel/seo-toolkit-template/.claude/skills/case-study
Claude Code workspace template for running consistent SEO across a portfolio of managed websites.
npx -y skills add mkreindel/seo-toolkit-template --skill case-studyAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Generate a case study page that documents a specific client outcome — problem, intervention, measurable result, and the testable claim. Captures decision-stage searchers looking for proof of capability ("[industry] [outcome] case study", "[service] results"). Pulls the real story from the site's per-site `stories.md` (refuses if no eligible story exists — never invents). Satisfies Tier 1 on-page SEO, validates schema, and ships per the site's publishing method. Use when the user types `/case-study` or asks for a case study / customer story page.
SKILL.md
6.2 KB, as published. Nobody here has run it
/case-study — Client outcome case study page
Documents one real client outcome end-to-end. Case studies sit at the decision stage — readers are evaluating whether the site can produce the result they need. Every claim must be verifiable; every number must be sourced from stats.md; every quote must be from a real, consented testimonial. No invention — refusal is the correct response when there's no eligible story.
Inputs
Required (asked at start if not given):
- Site — must match a folder under
sites/[name]/. - Story ID — references the entry in
sites/[site]/references/stories.md(orstories.{lang}.mdfor multilingual). Format:story-{slug}matching the heading anchor in stories.md.
Optional (per-run overrides):
- Industry / vertical — used as the H1's qualifying detail and the schema
industryfield. Defaults to the story's industry. - Anonymize —
true(default) |false(only if the story file marks the client as having given explicit consent for name use). If consent flag is missing, anonymize is forced true.
Workflow
This skill follows /blog's workflow (Steps 0–11) with the page-type-specific differences listed below. Read .claude/skills/blog/SKILL.md end-to-end before running.
What's unique to /case-study
Step 2 — Story selection (not keyword selection):
- Read
references/stories.md(per-site, per-language). - The user supplies the story ID, or the skill picks the highest-impact unused story (one with the largest measurable outcome).
- Required fields in the story entry:
client_descriptor,problem,intervention,outcome_metric(must be a number fromstats.md),consent(anonymizedornamed-with-consent). - If any required field is missing → refuse, escalate or ask.
Step 3 — Keyword cluster (case-study-specific):
- The primary keyword is the outcome-search query, not the story:
[industry] [outcome] case study,[service] results [region],how [client-type] achieved [outcome]. - Pick from
keywords.csvrows with intent=case-studyorproof. If none exist, the skill suggests one based on the story's industry + outcome and asks the user to add it to keywords.csv before proceeding.
Step 4 — SERP analysis (case-study-specific):
- Top 3 case study pages in this niche — extract: average word count, image count, presence/absence of dollar figures, presence/absence of named clients, format (long-form vs. multi-section vs. PDF-download-gated).
- Most ranking case studies are NOT gated. The default is unaffected by gating decisions made elsewhere.
Step 6 — Wireframe (case-study-specific):
- Hero: the outcome stated upfront as a number. "[Client descriptor] achieved [outcome number] in [timeframe]" — no marketing fluff before the number.
- Quick fact strip (above fold): 3–4 data points —
Client: [descriptor],Industry: [vertical],Timeframe: [duration],Outcome: [metric]. Skimmable. - Problem section (300–500 words): what the client was experiencing. Specific. With dates if possible. Avoid generic "they wanted to grow."
- Intervention section (400–700 words): what we did, in chronological order. Specific tools, frameworks, hours invested if known. This is where AI-search-citation density matters most — readers + LLMs both pull from this section.
- Result section (300–500 words): the outcome metric, the time it took, what changed for the client beyond the headline number.
- Quote (required if
named-with-consent, optional if anonymized): one verbatim sentence from the client. Cited. - "What we'd do differently" section (required, 100–200 words): one thing about the engagement that didn't work or that we'd change. Single biggest trust-building section in the format.
- FAQ: 4–6 Qs — "Was this typical?", "How transferable is this?", "Pricing on engagements like this?"
- CTA: softer — "See if your situation maps to this one" rather than "Book a call."
Step 7 — Schema (case-study-specific):
Articlewithabout: { @type: "CreativeWork", name: "[Engagement name]" }andmentionsfor the industry.BreadcrumbListFAQPage- If the client is named with consent:
ReviewwithitemReviewed= our service,reviewBody= the quote,author= the client. - Do NOT use
Reviewschema for anonymized cases — schema requires identifiable author.
Step 8 — Voice (case-study-specific extras):
- Every number on the page MUST be in
stats.md. The skill refuses to fabricate or round. - No "incredible results" or "transformative outcome" — banned per universal voice rules. Use the number.
- The "what we'd do differently" section is non-skippable. If the story file doesn't have material for this, refuse and ask the user to add the introspection.
- One opinion max, backed by the outcome metric.
Refusal conditions
This skill refuses to ship if:
- No matching story exists in
stories.mdfor the given ID. - The story is missing
outcome_metric(must be a number, must be instats.md). - The story is missing
consentfield. - The "what we'd do differently" content is unwritable from the story file (no introspection available).
- A case study for this story already exists in
used-keywords.md.
Output
Standard _drafts/[slug]/ layout, with these additions:
story-source.md— the source story entry from stories.md, copied for traceability.numbers-citation.md— every number on the page mapped to itsstats.mdline.
Length target: 1,500–2,500 words.
Routine versioning + idempotency contract
Same as /blog. Idempotency key: (site, story-id, language). Skip re-run if _drafts/case-study-{slug}/ exists with today's date.