Claude-seo-skills seo-content-brief
git clone https://github.com/lionkiii/claude-seo-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/lionkiii/claude-seo-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/seo-content-brief" ~/.claude/skills/lionkiii-claude-seo-skills-seo-content-brief && rm -rf "$T"
skills/seo-content-brief/SKILL.mdSEO Content Brief Generator
Produces a structured, copy-pasteable content brief for writers by analyzing live SERP data from Ahrefs. When a site parameter is provided and GSC MCP is available, overlays current ranking position and click data for targeted improvement guidance.
Note: SERP analysis is inlined here — skills cannot call each other as sub-routines in Claude Code.
References
@skills/seo/references/mcp-degradation.md @skills/seo/references/ahrefs-api-reference.md @skills/seo/references/gsc-api-reference.md
Inputs
: The target keyword for the content brief (required). Example:keyword"best crm for startups"
(optional): GSC property URL to overlay existing ranking data. Accepts both formats:site- Domain property:
sc-domain:example.com - URL prefix:
orhttps://example.com/https://www.example.com/
- Domain property:
MCP Check
Primary check (required):
- Use ToolSearch with query
+ahrefs - If tools returned → Ahrefs MCP is available, proceed to Execution
- If no tools returned → display the Ahrefs MCP error template from
and stopreferences/mcp-degradation.md
Optional GSC check (only if
parameter was provided):site
- Use ToolSearch with query
+google-search-console - If tools returned → GSC MCP is available, will overlay ranking data in Step 3
- If no tools returned → note "GSC data unavailable — brief generated from SERP data only" and proceed
Execution
Step 1 — SERP Analysis (INLINE)
Note: SERP analysis is inlined here because Claude Code skills cannot call each other as sub-routines. The following replicates the seo-serp logic directly.
1a. Use ToolSearch with query
serp-overview to inspect the tool definition
and discover its parameter names. The keyword parameter may be named
keyword, query, or term — do not assume. Use the exact parameter name
found in the schema for the call.
1b. Call
mcp__claude_ai_ahrefs__serp-overview using the discovered parameter
name with the user's keyword as the value.
Returns: list of ranking pages with fields that may include
url,
domain_rating, traffic, traffic_cost, position, title.
From the results, extract:
- Top 10 URLs, DR scores, and traffic estimates for the SERP table
- Content type pattern (guides, tool pages, listicles, comparisons, etc.)
- Average DR of top 10 for SERP difficulty assessment
Step 2 — Keyword Volume Data
Call
mcp__claude_ai_ahrefs__keywords-explorer-overview with the keyword to
get search volume and keyword difficulty score.
If this tool is unavailable or returns an error, note "Volume data unavailable" and proceed — the brief can still be generated from SERP data.
Key fields to extract:
volume (monthly searches), difficulty (KD 0–100).
Step 3 — GSC Overlay (only if
parameter provided AND GSC MCP available)site
Use ToolSearch to discover the exact GSC tool name prefix at runtime (it varies by MCP registration alias). Look for a tool matching
query_search_analytics.
Call the GSC
query_search_analytics tool with:
: the value of thesiteUrl
parameter (e.g.,site
)sc-domain:example.com
: 28 days ago (YYYY-MM-DD)startDate
: today (YYYY-MM-DD)endDate
:dimensions["query"]- Filter or search for the specific keyword in results
Extract for the keyword:
clicks, impressions, ctr, position.
If the keyword is not found in GSC data → note "Keyword not yet ranking in GSC for this property — brief targets a new ranking opportunity."
If GSC is unavailable → skip this step and note in output.
Step 4 — Generate Brief
Synthesize findings into a structured content brief:
- From SERP data: identify dominant content type, derive H2 structure from top-ranking titles, extract semantic keyword signals from titles/descriptions, identify differentiation gaps (what's missing or underserved)
- From keyword data: set word count target (correlate with SERP average; without data, use content type defaults: guide 2000–3500w, comparison 1500–2500w, tool page 1000–2000w, listicle 1500–2500w)
- From GSC data (if available): frame as position improvement rather than new ranking
Step 5 — CRITICAL: Monetary conversion
Any fields ending in
_cost, _value, or cpc from Ahrefs are in CENTS.
Divide by 100 before display. Format as USD with comma thousands separators.
Also: GSC
ctr is a decimal (0.0523 = 5.23%). Multiply by 100 for display.
Output Format
The output must be copy-pasteable for content writers with no further editing needed:
## Content Brief: "{keyword}" **Generated:** {YYYY-MM-DD} **Keyword Volume:** {volume} searches/month (from Ahrefs){| — volume data unavailable} **Keyword Difficulty:** {KD score}/100{| — KD data unavailable} **SERP Difficulty:** {Low|Moderate|High|Very high} (avg DR of top 10: {avg_dr}) --- ### Current Position (GSC data) {If GSC data available and keyword found:} You currently rank #{position} for this keyword with {clicks} clicks/month ({impressions} impressions, {ctr}% CTR). Target: Move from #{position} to top 3. {If GSC data available but keyword not found:} This keyword is not yet ranking in GSC for {site}. Brief targets a new ranking opportunity. {If no site parameter provided or GSC unavailable:} No GSC data — provide `site` parameter to overlay your current ranking position. --- ### What's Ranking Now | # | URL | DR | Est. Traffic | Content Type | |---|-----|----|-------------|--------------| | 1 | example.com/page... | 72 | 8,200 | {type} | | 2 | competitor.com/article... | 65 | 5,100 | {type} | | 3 | site.com/guide... | 58 | 3,400 | {type} | | 4 | domain.com/resource... | 71 | 2,900 | {type} | | 5 | blog.com/post... | 44 | 1,800 | {type} | --- ### Recommended Structure **Target word count:** {X,XXX–X,XXX words} (based on {SERP content type pattern|content type default}) **Content type:** {article|guide|comparison|tool page|listicle} — {why, based on SERP} **Target URL slug:** `/{keyword-slug}` **Suggested H2 structure:** 1. {H2 derived from top-ranking content patterns — what they all cover} 2. {H2} 3. {H2} 4. {H2} 5. {H2 — consider this for differentiation} --- ### Semantic Keywords to Include Based on top-ranking title and description analysis: - {keyword or phrase seen repeatedly in top results} - {keyword or phrase} - {keyword or phrase} - {keyword or phrase} - {keyword or phrase} --- ### Differentiation Angle {2–3 sentences: What are the top-ranking pages doing? What's missing, underserved, or poorly covered? What unique angle would stand out in this SERP — a specific audience, use case, data depth, format, or perspective not yet covered?} --- *Brief generated from Ahrefs SERP data{+ GSC data for {site}| — no GSC data (provide site= for ranking overlay)}.* *Data reflects SERP as of {YYYY-MM-DD}.*
Error — Ahrefs MCP Not Available
If the primary Ahrefs MCP check fails, display this message and stop:
## Ahrefs MCP Not Available The `/seo content-brief` command requires the Ahrefs MCP, which is not currently connected. SERP data is required to generate a content brief. **What you can do:** - Use `/seo audit <url>` for a full static SEO analysis without live SERP data - Use `/seo technical <url>` for technical SEO issues without keyword data - Manually provide target URLs to analyze for content patterns **To connect Ahrefs MCP:** - Ensure the Ahrefs MCP is registered at user scope in ~/.claude/mcp.json - Verify with: cat ~/.claude/mcp.json | grep -i ahrefs - Ahrefs MCP must be registered at user scope (not project scope) to work in subagents
Error — GSC MCP Not Available (non-blocking)
If the optional GSC check fails (only relevant when
site parameter was provided):
## Google Search Console MCP Not Available GSC data for {site} is unavailable — the GSC MCP is not currently connected. Proceeding with SERP-only brief. No current ranking position data will be included. **To connect GSC MCP:** - Install and configure a Google Search Console MCP server (see README for setup) - Add it to ~/.claude/mcp.json at user scope (NOT project scope) - Re-run `/seo content-brief {keyword} site={site}` to get the full brief with ranking overlay
Error — Both Ahrefs and GSC Unavailable
If both MCPs fail (Ahrefs is required — stop):
Display the Ahrefs MCP Not Available error above. The brief cannot be generated without Ahrefs SERP data regardless of GSC availability.