Help us improve
Share bugs, ideas, or general feedback.
From nodeshub-seo-skills
Generates data-driven SEO content briefs by combining SERP competitor analysis, keyword expansion, and competitor content crawling via NodesHub and Jina Reader APIs.
npx claudepluginhub senuto/nodeshub-seo-skills --plugin nodeshub-seo-skillsHow this skill is triggered — by the user, by Claude, or both
Slash command
/nodeshub-seo-skills:nod-content-briefThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
You generate comprehensive, data-driven content briefs by combining NodesHub SERPdata (competitor analysis), Query Fan-out (keyword expansion), and **Jina Reader** (competitor content crawling) APIs.
Produces structured content briefs with SEO research, competitor analysis, and search intent classification to help writers create ranking content.
Generates writer-ready SEO content briefs from a target domain and topic, pulling competitor insights, keyword gaps, SERP analysis, and AI search citations to create a complete editorial brief.
Audits content against live SERP data using NodesHub APIs and Jina Reader to identify keyword gaps, missing topics, and optimization opportunities by comparing your page against competitor content.
Share bugs, ideas, or general feedback.
You generate comprehensive, data-driven content briefs by combining NodesHub SERPdata (competitor analysis), Query Fan-out (keyword expansion), and Jina Reader (competitor content crawling) APIs.
# Generate research data for a brief
python3 .claude/skills/nod-content-brief/scripts/research.py "target keyword" --gl us --hl en
# With reasoning mode for deeper keyword expansion
python3 .claude/skills/nod-content-brief/scripts/research.py "target keyword" --gl us --hl en --mode reasoning
Cost: ~8.5 tokens (standard) or ~31 tokens (reasoning) per brief = 1 SERPdata + 1 Fan-out.
Requires NODESHUB_API_KEY. Optional: JINA_API_KEY for competitor content crawling.
python3 .claude/skills/nod-nodeshub-api/scripts/check_setup.py
If NodesHub is not set up: Walk the user through the full process: (1) Get API key from nodeshub.io (API Playground). (2) Save to .claude/settings.local.json under env.NODESHUB_API_KEY, or run python3 .claude/skills/nod-nodeshub-api/scripts/save_key.py YOUR_KEY. (3) Point to nod-nodeshub-api setup for details. (4) Have them run check_setup.py again to verify.
Jina Reader fetches competitor page content as clean markdown. Used to analyze what top-ranking pages actually contain.
# API: https://r.jina.ai/{URL}
# Key stored in .claude/settings.local.json under env.JINA_API_KEY
# Free tier: 20 RPM without key, 200 RPM with key (10M free tokens)
Graceful degradation: If Jina is unavailable, brief generation still works — just without competitor content analysis.
After getting SERP results, crawl top competitor URLs to analyze their actual content:
# Jina Reader API — URL to clean markdown
curl "https://r.jina.ai/{COMPETITOR_URL}" \
-H "Authorization: Bearer $JINA_API_KEY" \
-H "X-Return-Format: markdown"
Use the crawled content to:
The research.py script returns combined data:
{
"keyword": "...",
"serp": {
"organic_results": [...],
"serp_features": [...],
"dominant_intent": "...",
"domains": [...]
},
"fanout": {
"related_queries": [...],
"questions": [...],
"topic_leaders": [...]
},
"tokens_used": 8.5
}
Based on top-ranking content patterns:
| Dominant Type | Suggested Structure |
|---|---|
| How-to guides | Step-by-step with H2 per step |
| Listicles | Numbered items with H2 per item |
| In-depth guides | Topical sections with H2/H3 hierarchy |
| Comparisons | Feature-by-feature with tables |
| Product pages | Benefits → Features → Social proof → CTA |
Derive from:
## Content Brief: [Primary Keyword]
**Target:** [keyword] | **Intent:** [type] | **Difficulty:** [easy/medium/hard]
**Audience:** [who this content is for]
### Search Landscape
- **Total results:** [X]
- **SERP features:** [list]
- **Dominant content type:** [guide/listicle/comparison/...]
- **Top domains:** [domain1, domain2, domain3]
### Target Keywords
**Primary:** [keyword]
**Secondary:**
- [keyword 2]
- [keyword 3]
**Questions to Answer:**
- [question 1 — from PAA/Fan-out]
- [question 2]
- [question 3]
### Competitor Analysis (Top 5)
| # | Title | Domain | Strengths | Gaps |
|---|-------|--------|-----------|------|
| 1 | ... | ... | ... | ... |
### Suggested Structure
**H1:** [suggested title]
**H2:** [section 1 — from top patterns]
- Key points to cover
**H2:** [section 2 — from PAA]
- Key points to cover
**H2:** [section 3 — from Fan-out]
- Key points to cover
**H2:** FAQ
- [question 1]
- [question 2]
### Content Requirements
- **Word count:** [X-Y words] (competitor average: [Z])
- **Must include:** [topics present in all top results]
- **Differentiation:** [what's missing from current results]
- **Media:** [images/video/tables/infographics needed]
- **Internal links:** [suggest pages to link to/from]
### SEO Checklist
- [ ] Primary keyword in H1, first paragraph, URL
- [ ] Secondary keywords naturally distributed
- [ ] All PAA questions addressed
- [ ] Schema markup: [Article/FAQ/HowTo]
- [ ] Meta title: [suggestion, <60 chars]
- [ ] Meta description: [suggestion, <160 chars]
| Brief Type | Mode | Tokens | Use Case |
|---|---|---|---|
| Quick brief | standard | 8.5 | Blog posts, quick content |
| Deep brief | reasoning | 31 | Pillar content, high-value pages |
| Batch (5 briefs) | standard | 42.5 | Content calendar planning |
When outputting briefs as HTML, use branding from assets/branding/brand-config.json (company logo, colors, fonts). Import from branding import load_brand, render_header, render_footer, brand_css. Falls back to defaults if not configured. See assets/branding/README.md.
After collecting data, ask the user:
"Add results to an HTML report?"
- New report — creates a branded HTML report in
reports/- Existing report — appends a section to a chosen report
- Skip — no report
Use render_report_section(result_data) from research.py, then create_report() or append_section() from report.py.
nod-serp-analysis — deeper SERP analysis for individual keywords
nod-keyword-research — broader keyword expansion and clustering
Token-efficient research workflows
Consolidation (keep under 50 lines): Before adding a new entry, check file length. If over 50 lines:
LEARNED-archive.md if worth preserving