Help us improve
Share bugs, ideas, or general feedback.
From seo-skills
Audits a domain's full backlink profile: referring domains, anchor text distribution, authority distribution, IP/subnet diversity, growth/decay trend, and toxic-candidate flagging. Produces a health score and reviewable disavow candidate list.
npx claudepluginhub seranking/seo-skills --plugin seo-skillsHow this skill is triggered — by the user, by Claude, or both
Slash command
/seo-skills:seo-backlinks-profileThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
A complete backlink profile audit for a domain. Surfaces composition (where do links come from?), quality (what's the authority distribution?), diversity (concentrated in a few IPs/subnets, or spread out?), trajectory (growing or decaying?), and risk (which links look manipulative?). Output includes a health score and a reviewable disavow-candidate list — never an auto-disavow.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
Implements vector databases with Pinecone, Weaviate, Qdrant, Milvus, pgvector for semantic search, RAG, recommendations, and similarity systems. Optimizes embeddings, indexing, and hybrid search.
Share bugs, ideas, or general feedback.
A complete backlink profile audit for a domain. Surfaces composition (where do links come from?), quality (what's the authority distribution?), diversity (concentrated in a few IPs/subnets, or spread out?), trajectory (growing or decaying?), and risk (which links look manipulative?). Output includes a health score and a reviewable disavow-candidate list — never an auto-disavow.
This skill consults only the SE Ranking backlink index. We don't blend Ahrefs / Moz / Majestic / DataForSEO / Common Crawl into the same report. That's a deliberate choice, not a limitation:
If your workflow specifically requires multi-source blending (large agencies, link-builders billing on link counts), this skill is the wrong tool — use a vendor that aggregates multiple indexes. For everyone else, single-source produces the more honest report.
WebFetch tool optional (for spot-checking flagged toxic candidates).mcp__firecrawl-mcp__firecrawl_scrape optional (for the new step 8b — link-source verification).Validate target & preflight. See skills/seo-firecrawl/references/preflight.md for the canonical 3-stage preflight (credit balance, Firecrawl availability, Google APIs). Skill-specific notes:
--verify-sources is passed, step 8b (link-source verification) scrapes top-20 referring domains' linking pages to verify each link is still present and what rel it carries (dofollow / nofollow / sponsored / UGC), ~20 Firecrawl credits per run. Default off; pass --no-firecrawl to skip even if available.Profile summary DATA_getBacklinksSummary
Referring domains DATA_getBacklinksRefDomains
Anchor distribution DATA_getBacklinksAnchors
Authority distribution DATA_getBacklinksAuthority and DATA_getDistributionOfDomainAuthority
IP and subnet diversity DATA_getReferringIps, DATA_getReferringIpsCount, DATA_getReferringSubnetsCount
referring_domains / unique_subnets. Healthy: ~3–10. Unhealthy: many domains share few subnets (PBN signal).Growth / decay trend DATA_getNewLostBacklinksCount, DATA_getNewLostRefDomainsCount
Lost links list DATA_listNewLostBacklinks, DATA_listNewLostReferringDomains
8b. Optional: live link-source verification mcp__firecrawl-mcp__firecrawl_scrape
--verify-sources is passed (default off — credit-conscious).html for <a href> matching the target domain. Capture: link still present (true/false/page-404), rel attribute (dofollow if absent or empty, else the literal value: nofollow, ugc, sponsored, or combinations), surrounding context (anchor text + 50 chars before/after).evidence/08b-source-verification.md:
rel attribute differs from what SE Ranking flagged.rel=nofollow discovered post-hoc upgrades the toxic-candidate signal for that referring domain.Toxic candidate detection (heuristic — see Tips for the rules)
risk_score and triggers (which heuristic rules fired).Synthesise PROFILE.md
Create a folder seo-backlinks-profile-{target-slug}-{YYYYMMDD}/ with:
seo-backlinks-profile-{target-slug}-{YYYYMMDD}/
├── PROFILE.md (synthesised report — primary deliverable; inlines summary, authority distribution, diversity, trend)
├── 02-referring-domains.md (top N with authority — load-bearing reference for outreach/audit)
├── 03-anchors.md (anchor distribution + classification — load-bearing reference)
├── disavow-candidates.csv (toxic-flagged rows for review — load-bearing CSV)
└── evidence/
├── 01-summary.md (DATA_getBacklinksSummary top-line — raw step output)
├── 04-authority-distribution.md (histogram — raw step output)
├── 05-diversity.md (IPs + subnets + concentration — raw step output)
├── 06-trend.md (last 6 months new/lost — raw step output)
├── 07-losses-sample.md (recent lost backlinks)
└── 08b-source-verification.md (only if --verify-sources ran: live link + rel attribute checks for top-20 sources)
Step files 01, 04, 05, 06 are inlined as sections in PROFILE.md; the copies in evidence/ preserve raw step output for reproducibility. 02-referring-domains.md, 03-anchors.md, and disavow-candidates.csv stay at top level — outreach/audit teams consult them directly.
PROFILE.md follows this shape:
# Backlinks Profile: {domain}
> Snapshot dated {YYYY-MM-DD}
## Health score: **{n}/100**
| Dimension | Score | Notes |
|---|---|---|
| Authority distribution | {n}/20 | {comment} |
| Anchor diversity | {n}/20 | {comment} |
| IP/subnet diversity | {n}/20 | {comment} |
| Growth trajectory | {n}/20 | {comment} |
| Toxic candidate ratio | {n}/20 | {comment} |
## Top-line numbers
| Metric | Value |
|---|---|
| Backlinks | {n} |
| Referring domains | {n} |
| Dofollow / nofollow | {n}% / {n}% |
| Unique IPs | {n} |
| Unique subnets | {n} |
| Domain : subnet ratio | {ratio} |
| New ref-domains last 30d | {n} |
| Lost ref-domains last 30d | {n} |
| Toxic candidates flagged | {n} ({% of total}) |
## Authority distribution
| DA bucket | Domains | % |
|---|---|---|
| 70+ | {n} | {%} |
| 50–69 | {n} | {%} |
| 30–49 | {n} | {%} |
| 10–29 | {n} | {%} |
| 0–9 | {n} | {%} |
## Anchor distribution
| Class | Count | % | Healthy range | Status |
|---|---|---|---|---|
| Branded | {n} | {%} | 30–60% | {✓/⚠} |
| Generic | {n} | {%} | 15–30% | {✓/⚠} |
| Naked URL | {n} | {%} | 10–25% | {✓/⚠} |
| Partial-match | {n} | {%} | 10–20% | {✓/⚠} |
| Exact-match commercial | {n} | {%} | <5% | {✓/⚠ over-optimised} |
| Image-alt-derived | {n} | {%} | <10% | {✓/⚠} |
## Trend (last 6 months)
| Month | New backlinks | Lost backlinks | Net |
|---|---|---|---|
| {M-5} | {n} | {n} | {n} |
| {M-4} | {n} | {n} | {n} |
| ... |
## Toxic candidates ({n} flagged)
See `disavow-candidates.csv`. Top 10 by risk_score:
| Domain | Authority | Triggers | Risk |
|---|---|---|---|
| {domain} | {DA} | {DA<10, sitewide>5, exact-match-anchor} | High |
| ... |
**⚠ NEVER AUTO-DISAVOW.** Hand this list to a human for review. Disavow a domain only after confirming the link is manipulative AND the domain is not delivering referral traffic AND removal requests have failed.
## Recommended next steps
1. {Action}
2. {Action}
3. {Action}
disavow-candidates.csv columns: domain,authority,backlinks_count,sitewide_links,top_anchor,anchor_class,risk_score,triggers,sample_url
--verify-sources is passed (one scrape per top-20 source domain)..xyz, .click, .work historically; verify against current spam-domain reports).seo-backlink-gap for prospecting (gap analysis vs competitors).seo-drift to track profile composition over time.