{"id":"1803cb5c-c599-468e-93f6-370ebd3f7d1c","shortId":"HntYSF","kind":"skill","title":"seo-content-brief","tagline":"Generate a writer-ready SEO content brief from a target domain and topic. Pulls domain overview, competitors, keyword gaps, SERP analysis, related and question keywords, AI Search citations, and existing internal-link sources, then synthesises a complete editorial brief a freelan","description":"# Content Brief\n\nTurn a domain plus a topic intent into a complete content editor brief: target keyword, title options, H2/H3 structure, content gaps the current top results miss, internal linking plan, AI search angle, and estimated traffic potential.\n\n## Prerequisites\n\n- SE Ranking MCP server connected.\n- Claude's `WebFetch` tool available (used for top-3 content teardown).\n- User has provided: (a) target domain, (b) market/country (default: `us`), and optionally (c) a seed topic or intent. If no seed topic is given, discover the best opportunity from the keyword-gap step.\n\n## Process\n\n1. **Domain overview** `DATA_getDomainOverviewWorldwide`, `DATA_getDomainKeywords`\n   - Pull organic traffic, top countries, and top 100 organic keywords in the target market.\n   - Save the raw JSON and a human summary.\n\n2. **Competitor discovery** `DATA_getDomainCompetitors`\n   - Identify the top 5 organic competitors by shared keywords in the target market.\n   - Save a one-line positioning note per competitor.\n   - **Note:** the upstream API does not support `limit`/`offset`, so this call returns the full set (~60KB for popular domains) and the MCP harness writes it to a file. Read that file path, parse the `{data: [...]}` JSON, sort by `common_keywords` desc, and take the top 5.\n\n3. **Keyword gap analysis** `DATA_getDomainKeywordsComparison`\n   - Pull keywords the competitors rank for that the target domain does not.\n   - Filter: informational intent, search volume > 1,000/mo, keyword difficulty < 40.\n   - Save the filtered gap list sorted by volume.\n\n4. **Pick the best topic cluster**\n   - From the gaps, select one topic. Justify the pick with: traffic potential, difficulty, relevance to the target domain's product. Surface reasoning to the user before proceeding.\n\n5. **SERP and keyword deep-dive for the chosen topic**\n   - `DATA_getSerpResults` for the top 10 organic + SERP features (AIO, PAA, Featured Snippet, Video).\n   - `DATA_getRelatedKeywords` and `DATA_getSimilarKeywords` for expansion.\n   - `DATA_getKeywordQuestions` for People-Also-Ask and question-based variations.\n   - `DATA_getAiOverview` + `DATA_getAiOverviewLeaderboard` to see which brands LLMs cite today for the topic.\n\n6. **Top 3 content analysis** `WebFetch` (always) + `mcp__firecrawl-mcp__firecrawl_scrape` (when available)\n   - **WebFetch first** (free, instant): pull markdown for the top 3 ranking URLs. Extract H1/H2/H3 spine, word count per article, shared subtopics, gaps, and prose-level formatting patterns.\n   - **Firecrawl second** (3 Firecrawl credits — 1 per top-3 winner) — recovers what WebFetch's markdown can't show:\n     - From `metadata`: `<title>` length (the real string, not markdown's first heading), meta description length, `og:title`, `og:description`, `og:image`, `twitter:card`.\n     - From the returned `html`: every `<script type=\"application/ld+json\">` block. Parse and list `@type`s per winner (Article, FAQPage, BreadcrumbList, Product, etc.) — these become the \"schema baseline\" for the new article.\n     - On-page signals: hero-image presence, byline structure (`<a rel=\"author\">`, `<meta name=\"author\">`), table count, code-block count.\n   - **Classify the brief's template** against the 8-template map in `references/intent-template-map.md`. Cross-reference: (a) the dominant page type across the SERP top-10 (use the heuristics in `skills/seo-sxo/references/page-type-patterns.md`), (b) PAA patterns from step 5, (c) the keyword's intent classification from `DATA_getRelatedKeywords`. Pick one of: `ultimate-guide` / `how-to` / `listicle` / `explainer` / `comparison` / `review` / `best-of` / `landing-page`. If the SERP is split across types, follow the MIXED rule (see Tips). The chosen template determines the recommended H1/H2 outline shape and word-count floor — record both the template and a one-sentence justification in `BRIEF.md`.\n   - **If Firecrawl unavailable (or `--no-firecrawl` passed):** WebFetch portion runs unchanged. The brief's \"Top 3 winners — on-page benchmark\" subsection (see Output) emits `(skipped — Firecrawl required for schema/og:* on competitor pages)`. Template classification still runs from WebFetch + SERP data.\n\n7. **Internal linking plan**\n   - `DATA_getDomainKeywords` filtered to the target domain plus WebFetch of 5 high-ranking pages on topically adjacent queries.\n   - For each: propose an anchor text and the section of the new post it belongs in.\n\n8. **Synthesise the brief** (see Output Format).\n\n## Output format\n\nCreate a folder `seo-content-brief-{target-slug}-{YYYYMMDD}/` with the synthesised brief at the top level and step files in `evidence/`:\n\n```\nseo-content-brief-{target-slug}-{YYYYMMDD}/\n├── BRIEF.md                        (writer-ready synthesis — primary deliverable; inlines 01-domain-overview, 02-competitors, 06-internal-links into a \"Context\" section)\n└── evidence/\n    ├── 01-domain-overview.md       (DATA_getDomainOverviewWorldwide raw — preserved for reproducibility)\n    ├── 02-competitors.md           (DATA_getDomainCompetitors raw)\n    ├── 03-keyword-gaps.md          (DATA_getDomainKeywordsComparison filtered)\n    ├── 04-serp-and-keywords.md     (DATA_getSerpResults + related/question keywords)\n    ├── 05-content-analysis.md      (top-3 winners' H-spine + on-page benchmark)\n    └── 06-internal-links.md        (target domain pages + proposed anchors)\n```\n\nTop-level: `BRIEF.md` only — a freelance writer should not need to open anything else. Step files preserve the raw API/scrape outputs in `evidence/` for reproducibility / to back up the editor brief.\n\n`BRIEF.md` follows this shape:\n\n```markdown\n# Content Brief: {proposed title}\n\n**Template type:** {one of: ultimate-guide / how-to / listicle / explainer / comparison / review / best-of / landing-page / MIXED}\n**Why this template:** {one-sentence justification grounded in SERP top-10 page-type majority + PAA pattern + keyword intent}\n\n## Target keyword\n- Primary: {kw} ({volume}/mo, KD {kd}, intent: informational)\n- Secondary: {kw1} ({volume}), {kw2} ({volume}), {kw3} ({volume})\n\n## Title options\n1. {title option 1}\n2. {title option 2}\n3. {title option 3}\n\n## Meta description (150-160 chars)\n{draft}\n\n## Suggested structure\n\n### H1: {proposed H1}\n\n#### H2: {section 1}\nCover: {bullets of what to include}\nCite: {sources to link out to}\n\n#### H2: {section 2}\n...\n\n## Gaps the current top 3 miss\n- {gap 1, with evidence}\n- {gap 2, with evidence}\n- {gap 3, with evidence}\n\n## Top 3 winners — on-page benchmark (Firecrawl)\n\n| Signal | Winner 1 | Winner 2 | Winner 3 | Required for parity |\n|---|---|---|---|---|\n| `<title>` length (chars) | {n} | {n} | {n} | {target} |\n| Meta description length | {n} | {n} | {n} | {target} |\n| `og:image` present | {✓/✗} | {✓/✗} | {✓/✗} | {yes/no} |\n| `twitter:card` | {value} | {value} | {value} | {value} |\n| JSON-LD types | {Article, …} | {…} | {…} | {must include} |\n| Byline structure (DOM) | {✓/✗} | {✓/✗} | {✓/✗} | {yes/no} |\n| Word count (rendered) | {n} | {n} | {n} | {target range} |\n\n(Or: `Top-3 on-page benchmark: skipped — Firecrawl not installed.`)\n\n## Internal linking plan\n| From existing page | Anchor text | Target section |\n|---|---|---|\n| {url} | {anchor} | {section} |\n\n## AI Search angle\n- LLMs currently cite {brands} for this query.\n- To earn mentions: {specific actions, e.g., add a comparison table, cite a primary study, include a structured data block}.\n\n## Deliverables\n- Word count target: {n}\n- Tone and voice: {guidance from domain overview}\n- Required assets: {images, schema, examples}\n\n## Traffic potential\n- Conservative: ~{n}/mo at position 5\n- Target: ~{n}/mo at position 1-3\n\n## Raw data references\n- evidence/01-domain-overview.md\n- evidence/02-competitors.md\n- evidence/03-keyword-gaps.md\n- evidence/04-serp-and-keywords.md\n- evidence/05-content-analysis.md\n- evidence/06-internal-links.md\n```\n\n## Tips\n\n- Respect SE Ranking Data API rate limit: 10 requests per second. Iterate sequentially, do not fan out across 20 keywords in parallel.\n- **Firecrawl cost.** Step 6's competitor benchmark adds 3 Firecrawl credits per run (1 per top-3 winner). Pass `--no-firecrawl` to skip it (the brief still ships, just without the on-page benchmark table).\n- If the user only provides a domain and no topic, run step 3 first and present the top 3 gap opportunities before deciding.\n- Keep the brief self-contained. A freelance writer should not need to open the raw-data files unless they want to double-check something.\n- Do not hallucinate keyword difficulty or volume. If an endpoint returns null, mark the field unknown in the brief rather than guessing.\n- If the topic triggers AI Overviews, the AI Search angle section is mandatory, not optional. Growth in this era requires being citable by LLMs.\n- If the SERP top-10 has mixed page types (e.g. 4 listicles + 4 comparisons + 2 explainers), treat as MIXED and produce a hybrid brief that explains the consultant's chosen template + why; don't force-pick one when the SERP itself is split. Record `MIXED` in the `Template type` line and use the `Why this template` line to justify the hybrid choice (which template's outline shape you're inheriting and which secondary patterns you're folding in).","tags":["seo","content","brief","skills","seranking","agent-skills","ai-search","anthropic","backlinks","claude","claude-code","claude-plugin"],"capabilities":["skill","source-seranking","skill-seo-content-brief","topic-agent-skills","topic-ai-search","topic-anthropic","topic-backlinks","topic-claude","topic-claude-code","topic-claude-plugin","topic-claude-skills","topic-content-brief","topic-ga4","topic-keyword-research","topic-mcp"],"categories":["seo-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/seranking/seo-skills/seo-content-brief","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add seranking/seo-skills","source_repo":"https://github.com/seranking/seo-skills","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 9 github stars · SKILL.md body (9,188 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:08:36.036Z","embedding":null,"createdAt":"2026-05-18T13:14:09.387Z","updatedAt":"2026-05-18T19:08:36.036Z","lastSeenAt":"2026-05-18T19:08:36.036Z","tsv":"'-3':100,419 '000/mo':265 '1':138,264,416 '10':326 '100':152 '2':167 '3':241,370,392,413 '4':277 '40':268 '5':175,240,310 '6':368 '60kb':210 'ai':31,79 'aio':330 'also':347 'alway':374 'analysi':26,244,372 'angl':81 'api':197 'articl':401 'ask':348 'avail':96,382 'b':109 'base':352 'best':129,280 'brand':361 'brief':4,12,45,49,62 'c':115 'call':205 'card':450 'chosen':319 'citat':33 'cite':363 'claud':92 'cluster':282 'common':233 'competitor':22,168,177,193,250 'complet':43,59 'connect':91 'content':3,11,48,60,69,101,371 'count':399 'countri':149 'credit':415 'current':72 'data':141,143,170,229,245,321,335,338,342,354,356 'deep':315 'deep-div':314 'default':111 'desc':235 'descript':441,446 'difficulti':267,295 'discov':127 'discoveri':169 'dive':316 'domain':16,20,52,108,139,213,256,300 'editor':61 'editori':44 'estim':83 'everi':455 'exist':35 'expans':341 'extract':395 'featur':329,332 'file':222,225 'filter':259,271 'firecrawl':377,379,411,414 'firecrawl-mcp':376 'first':384,438 'format':409 'free':385 'freelan':47 'full':208 'gap':24,70,135,243,272,285,404 'generat':5 'getaioverview':355 'getaioverviewleaderboard':357 'getdomaincompetitor':171 'getdomainkeyword':144 'getdomainkeywordscomparison':246 'getdomainoverviewworldwid':142 'getkeywordquest':343 'getrelatedkeyword':336 'getserpresult':322 'getsimilarkeyword':339 'given':126 'h1/h2/h3':396 'h2/h3':67 'har':217 'head':439 'html':454 'human':165 'identifi':172 'imag':448 'inform':260 'instant':386 'intent':56,120,261 'intern':37,76 'internal-link':36 'json':162,230 'justifi':289 'keyword':23,30,64,134,154,180,234,242,248,266,313 'keyword-gap':133 'length':431,442 'level':408 'limit':201 'line':189 'link':38,77 'list':273 'llms':362 'markdown':388,425,436 'market':158,184 'market/country':110 'mcp':89,216,375,378 'meta':440 'metadata':430 'miss':75 'note':191,194 'offset':202 'og':443,445,447 'one':188,287 'one-lin':187 'opportun':130 'option':66,114 'organ':146,153,176,327 'overview':21,140 'paa':331 'pars':227 'path':226 'pattern':410 'peopl':346 'people-also-ask':345 'per':192,400,417 'pick':278,291 'plan':78 'plus':53 'popular':212 'posit':190 'potenti':85,294 'prerequisit':86 'proceed':309 'process':137 'product':302 'prose':407 'prose-level':406 'provid':105 'pull':19,145,247,387 'question':29,351 'question-bas':350 'rank':88,251,393 'raw':161 'read':223 'readi':9 'real':433 'reason':304 'recov':421 'relat':27 'relev':296 'result':74 'return':206,453 'save':159,185,269 'scrape':380 'se':87 'search':32,80,262 'second':412 'see':359 'seed':117,123 'select':286 'seo':2,10 'seo-content-brief':1 'serp':25,311,328 'server':90 'set':209 'share':179,402 'show':428 'skill' 'skill-seo-content-brief' 'snippet':333 'sort':231,274 'sourc':39 'source-seranking' 'spine':397 'step':136 'string':434 'structur':68 'subtop':403 'summari':166 'support':200 'surfac':303 'synthesis':41 'take':237 'target':15,63,107,157,183,255,299 'teardown':102 'titl':65,444 'today':364 'tool':95 'top':73,99,148,151,174,239,325,369,391,418 'topic':18,55,118,124,281,288,320,367 'topic-agent-skills' 'topic-ai-search' 'topic-anthropic' 'topic-backlinks' 'topic-claude' 'topic-claude-code' 'topic-claude-plugin' 'topic-claude-skills' 'topic-content-brief' 'topic-ga4' 'topic-keyword-research' 'topic-mcp' 'traffic':84,147,293 'turn':50 'twitter':449 'upstream':196 'url':394 'us':112 'use':97 'user':103,307 'variat':353 'video':334 'volum':263,276 'webfetch':94,373,383,423 'winner':420 'word':398 'write':218 'writer':8 'writer-readi':7","prices":[{"id":"21591456-3d7f-41a7-a96f-bc2cecbc96b1","listingId":"1803cb5c-c599-468e-93f6-370ebd3f7d1c","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"seranking","category":"seo-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:14:09.387Z"}],"sources":[{"listingId":"1803cb5c-c599-468e-93f6-370ebd3f7d1c","source":"github","sourceId":"seranking/seo-skills/seo-content-brief","sourceUrl":"https://github.com/seranking/seo-skills/tree/main/skills/seo-content-brief","isPrimary":false,"firstSeenAt":"2026-05-18T13:14:09.387Z","lastSeenAt":"2026-05-18T19:08:36.036Z"}],"details":{"listingId":"1803cb5c-c599-468e-93f6-370ebd3f7d1c","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"seranking","slug":"seo-content-brief","github":{"repo":"seranking/seo-skills","stars":9,"topics":["agent-skills","ai-search","answer-engine-optimization","anthropic","backlinks","claude","claude-code","claude-plugin","claude-skills","content-brief","ga4","generative-engine-optimization","keyword-research","mcp","mcp-server","search-console","seo","seo-tools","seranking","site-audit"],"license":"mit","html_url":"https://github.com/seranking/seo-skills","pushed_at":"2026-05-11T20:07:40Z","description":"Claude SEO Skills — production Claude Agent Skills for the SE Ranking MCP server. Content briefs, AI Search share of voice, audits, backlink gaps, keyword clusters, schema, sitemap, GEO, and more.","skill_md_sha":"87e433b9be465c2794bed035e5e16dabb3388729","skill_md_path":"skills/seo-content-brief/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/seranking/seo-skills/tree/main/skills/seo-content-brief"},"layout":"multi","source":"github","category":"seo-skills","frontmatter":{"name":"seo-content-brief","description":"Generate a writer-ready SEO content brief from a target domain and topic. Pulls domain overview, competitors, keyword gaps, SERP analysis, related and question keywords, AI Search citations, and existing internal-link sources, then synthesises a complete editorial brief a freelance writer can start from immediately. Use when the user asks for a content brief, blog brief, article outline, editor brief, or wants to capture organic traffic their competitors have."},"skills_sh_url":"https://skills.sh/seranking/seo-skills/seo-content-brief"},"updatedAt":"2026-05-18T19:08:36.036Z"}}