From nodeshub-seo-skills
Tracks keyword ranking positions for a domain over time using NodesHub SERPdata API. Saves daily snapshots and compares changes.
How this skill is triggered — by the user, by Claude, or both
Slash command
/nodeshub-seo-skills:nod-rank-trackerThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Track keyword positions for a domain using NodesHub SERPdata API.
Track keyword positions for a domain using NodesHub SERPdata API.
# Track a single keyword
python3 .claude/skills/nod-rank-tracker/scripts/track.py example.com "seo tools" --gl us --hl en
# Track multiple keywords from a file (one per line)
python3 .claude/skills/nod-rank-tracker/scripts/track.py example.com --file keywords.txt --gl us --hl en
# Compare with previous snapshot
python3 .claude/skills/nod-rank-tracker/scripts/track.py example.com --file keywords.txt --gl us --hl en --compare
Cost: 1 token per keyword. Check balance: python3 .claude/skills/nod-nodeshub-api/scripts/balance.py
Requires NODESHUB_API_KEY. Run:
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.
data/rank-history/{domain}/{YYYY-MM-DD}.json--compare flag or previous data exists## Rank Tracker: example.com
**Date:** 2024-01-15 | **Keywords:** 10 | **Tokens used:** 10
### Rankings
| Keyword | Position | Change | URL |
|---------|----------|--------|-----|
| seo tools | #3 | +2 ↑ | /blog/seo-tools |
| keyword research | #7 | -1 ↓ | /tools/keyword |
| rank tracker | — | new | — |
### Summary
- **Ranking:** 8/10 keywords
- **Top 3:** 3 keywords
- **Top 10:** 6 keywords
- **Improved:** 4 | **Declined:** 2 | **Stable:** 2
Snapshots saved to: data/rank-history/{domain}/{YYYY-MM-DD}.json
{
"domain": "example.com",
"date": "2024-01-15",
"gl": "us",
"hl": "en",
"keywords": {
"seo tools": {"position": 3, "url": "/blog/seo-tools"},
"keyword research": {"position": 7, "url": "/tools/keyword"}
}
}
| Param | Description |
|---|---|
domain | Domain to track (required) |
keyword | Single keyword to track |
--file | File with keywords (one per line) |
--gl | Country code (default: us) |
--hl | Language code (default: en) |
--compare | Compare with most recent previous snapshot |
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
To generate, use render_report_section(snapshot, previous) from track.py,
then create_report() or append_section() from report.py:
from report import create_report, append_section
section_html = render_report_section(snapshot, previous)
path = create_report("Rank Tracker", sections=[section_html])
Consolidation (keep under 50 lines): Before adding a new entry, check file length. If over 50 lines:
LEARNED-archive.md if worth preservingnpx claudepluginhub senuto/nodeshub-seo-skills --plugin nodeshub-seo-skillsTracks competitor domains across keyword sets using NodesHub SERPdata API. Identifies who ranks for target keywords and tracks position changes over time.
Tracks keyword rankings, SERP positions, and AI visibility over time. Compares snapshots, measures position deltas, and flags ranking drops for SEO monitoring.
Sets up and runs rank tracking with Ahrefs MCP: picks keywords to track, segments them by purpose, sets baselines, defines alert thresholds, and establishes a reporting cadence.