Help us improve
Share bugs, ideas, or general feedback.
From nodeshub-seo-skills
Analyzes Google SERP for any keyword via NodesHub SERPdata API, extracting organic results, SERP features, competitor domains, and search intent. Useful for SEO analysis and content gap identification.
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-serp-analysisThis 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 analyze Google search results using NodesHub SERPdata API to provide actionable SEO intelligence.
Analyzes search engine results pages (SERPs) to map features, layout, ranking factors, search intent, AI Overviews, and snippet opportunities for a given query.
Provides a shared Python API client for NodesHub, enabling SERP extraction, keyword expansion, and intent classification. Use for checking API balance, testing endpoints, or troubleshooting connectivity.
Produces evidence-backed SERP analysis for a keyword: competitor comparison, target page gaps, player score interpretation. Use before topic cluster or content brief work.
Share bugs, ideas, or general feedback.
You analyze Google search results using NodesHub SERPdata API to provide actionable SEO intelligence.
# Single keyword analysis
python3 .claude/skills/nod-nodeshub-api/scripts/serpdata.py "keyword" --gl us --hl en
# Raw JSON for deeper analysis
python3 .claude/skills/nod-nodeshub-api/scripts/serpdata.py "keyword" --gl us --hl en --raw
Cost: 1 token per keyword. Check balance: python3 .claude/skills/nod-nodeshub-api/scripts/balance.py
Requires NODESHUB_API_KEY in environment. Run:
python3 .claude/skills/nod-nodeshub-api/scripts/check_setup.py
If missing, see nod-nodeshub-api setup.
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.
serpdata.py with --raw flagFor each result in top 10, extract:
| Feature | What it reveals |
|---|---|
| People Also Ask | Related questions users have — content expansion opportunities |
| AI Overview | Google's AI summary — what content gets cited |
| Knowledge Panel | Entity recognition — brand/topic authority signals |
| Local Pack | Local intent — needs local SEO strategy |
| Videos | Video intent — YouTube/video content opportunity |
| Top Stories | News intent — freshness matters |
| Related Searches | Semantic connections — keyword expansion ideas |
| Featured Snippet | Direct answer opportunity — structure content for position 0 |
Classify based on what you see:
Rate difficulty based on:
## SERP Analysis: [keyword]
**Settings:** gl=[country], hl=[language], device=[device]
**Total results:** [count]
### Dominant Intent
[informational/commercial/transactional/navigational] — [evidence]
### SERP Features Present
- [Feature]: [insight]
### Top 10 Organic Results
| # | Domain | Title | Type | Notes |
|---|--------|-------|------|-------|
| 1 | ... | ... | ... | ... |
### Domain Distribution
- [domain.com]: positions [X, Y] — [pattern]
### Content Patterns
- Dominant format: [listicle/guide/tool/...]
- Average title length: [X chars]
- Title patterns: [common structures]
### Opportunities
1. [Gap or angle not covered by current results]
2. [SERP feature not being targeted]
3. [Content type missing from results]
### Recommendations
1. [Specific, actionable recommendation]
2. [...]
| Param | Values | Notes |
|---|---|---|
--gl | us, pl, de, uk, fr, es... | Country — affects local results |
--hl | en, pl, de, fr, es... | Language — affects interface/results language |
--device | desktop, mobile | Different SERP layouts and features |
For full country/language list: python3 .claude/skills/nod-nodeshub-api/scripts/params.py countries
--raw for full analysis — the pretty output is just a previewsnippets_data carefully — SERP features are the richest insight sourceAfter 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
To generate, use the render_report_section(data) function from this skill's script,
then create_report() or append_section() from report.py:
from report import create_report, append_section
section_html = render_report_section(analysis_data)
# New report:
path = create_report("SERP Analysis", sections=[section_html])
# Or append to existing:
path = append_section("reports/existing.html", section_html)
nod-keyword-research — expand keywords before analyzing SERPs
nod-content-brief — turn SERP analysis into content brief
API response quirks or undocumented fields
Consolidation (keep under 50 lines): Before adding a new entry, check file length. If over 50 lines:
LEARNED-archive.md if worth preserving