Analyze a site's backlink profile, anchors, toxic signals, competitors, gaps, and disavow candidates. Use only when links or referring domains are the requested focus.
Keywords Everywhere:"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run keywordseverywhere_api.py rank <domain> --json → 0-10 Open PageRank (open_page_rank), a global rank, and a referring-domain count (referring_domains), per the current API; no anchors or individual links. Use as a fallback when Moz isn't configured; do not use in place of Moz when both are available.
Common Crawl:"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run commoncrawl_graph.py <domain> --json → PageRank, harmonic centrality, and low-confidence rank/presence data.
Scoring:
Metric
Good
Warning
Critical
Referring domains
>100
20-100
<20
Follow ratio
>60%
40-60%
<40%
Domain diversity
No single domain >5%
1 domain >10%
1 domain >25%
Trend
Growing or stable
Slow decline
Rapid decline (>20%/quarter)
2. Anchor Text Distribution
DataForSEO:backlinks_anchors
Moz API:"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run moz_api.py anchors <url> --json
Bing Webmaster:"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run bing_webmaster.py links <url> --json (extract anchor text from link details)
Healthy distribution benchmarks:
Anchor Type
Target Range
Over-Optimization Signal
Branded (company/domain name)
30-50%
<15%
URL/naked link
15-25%
N/A
Generic ("click here", "learn more")
10-20%
N/A
Exact match keyword
3-10%
>15%
Partial match keyword
5-15%
>25%
Long-tail / natural
5-15%
N/A
Flag if exact-match anchors exceed 15% as a review heuristic; it may indicate unnatural or link-spam patterns.
3. Referring Domain Quality
DataForSEO:backlinks_referring_domains
Moz API:"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run moz_api.py domains <url> --json → domains with DA scores
Common Crawl:"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run commoncrawl_graph.py <domain> --json → domain-level rank/presence data, no verified referring-domain counts
Country distribution: Match target market. 80%+ from irrelevant countries = PBN signal
Domain rank distribution: Healthy profiles have links from all authority tiers
Follow/nofollow per domain: Sites that only nofollow = limited SEO value
4. Toxic Link Detection
DataForSEO:backlinks_bulk_spam_score + toxic patterns from reference
Moz API: Raw vendor spam_score from "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run moz_api.py metrics <url> --json (source-label the value; apply thresholds only if verified against current Moz docs)
Verification Crawler:"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run verify_backlinks.py --target <url> --links <file> --json (verify suspicious links still exist)
High-risk indicators (flag immediately):
Links from known PBN (Private Blog Network) domains
Unnatural anchor text patterns (100% exact match from a domain)
Links from penalized or deindexed domains
Mass directory submissions (50+ directory links)
Link farms (sites with 10K+ outbound links per page)
Paid link patterns (footer/sidebar links across all pages of a domain)
Medium-risk indicators (review manually):
Links from unrelated niches
Reciprocal link patterns
Links from thin content pages (<100 words)
Excessive links from a single domain (>50 backlinks from 1 domain)
Load ../seo/references/backlink-quality.md for the full 30 toxic patterns and disavow criteria.
5. Top Pages by Backlinks
DataForSEO:backlinks_backlinks with target type "page"
Moz API:"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run moz_api.py pages <domain> --json
Find:
Which pages attract the most backlinks
Pages with high-authority links (link magnets)
Pages with zero backlinks (internal linking opportunities)
404 pages with backlinks (redirect opportunities to reclaim link equity)
6. Competitor Gap Analysis
DataForSEO:backlinks_referring_domains for both domains, then compare
Bing Webmaster:"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run bing_webmaster.py compare <url1> <url2> --json
only when both properties are registered and accessible to the same Bing API
account. For arbitrary competitors, use DataForSEO, Moz, or Common Crawl.
Moz API: Compare DA/PA between domains via "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run moz_api.py metrics <url> --json for each
Output:
Domains linking to competitor but NOT to target = link building opportunities
Domains linking to both = validate existing relationships
Domains linking only to target = competitive advantage
Top 20 link building opportunities with domain authority
7. New and Lost Backlinks
DataForSEO only:backlinks_backlinks with date filters for 30/60/90 day changes
Verification Crawler: For known links, verify current status with "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run verify_backlinks.py --target <url> --links <file> --json
Note: Free sources cannot track new/lost links over time. If this section is requested without DataForSEO, inform the user: "Link velocity tracking requires the DataForSEO extension. Free sources provide point-in-time snapshots only."
Red flags:
Sudden spike in new links (possible negative SEO attack)
Sudden loss of many links (site penalty or content removal)
Declining velocity over 3+ months (content not attracting links)
Backlink Health Score
Calculate a 0-100 score. When mixing sources, apply confidence weighting:
Factor
Weight
Sources (preference order)
Confidence
Referring domain count
20%
DataForSEO > Moz
1.0 / 0.85
Domain quality distribution
20%
DataForSEO > Moz DA distribution
1.0 / 0.85
Anchor text naturalness
15%
DataForSEO > Moz > Bing anchors
1.0 / 0.85 / 0.70
Toxic link ratio
20%
DataForSEO > Moz spam score
1.0 / 0.85
Link velocity trend
10%
DataForSEO only
1.0
Follow/nofollow ratio
5%
DataForSEO > Bing details
1.0 / 0.70
Geographic relevance
10%
DataForSEO > Bing country
1.0 / 0.70
Data sufficiency gate: Count how many of the 7 factors have at least one data source available.
4+ factors with data: Produce a numeric 0-100 score (redistribute missing weights proportionally)
Fewer than 4 factors: Do NOT produce a numeric score. Instead display:
Backlink Health Score: INSUFFICIENT DATA (X/7 factors scored)
Show individual factor scores that ARE available with their source and confidence.
Recommend: "Configure Moz API (free) for a scoreable profile. Run /seo backlinks setup"
MUST NOT: score what you did not measure
When Common Crawl is the only available source, you MUST NOT produce a numeric
score of any kind -- not a health score, not a per-factor score, not an
"approximate" or "estimated" figure. Common Crawl supplies rank and presence
signals only. Report low-confidence rank/presence data and the literal string
Not Assessed in place of every number.
A finding written with source: not-assessed MUST NOT carry a numeric score.
A numeric score with fewer than 4 data sources is misleading: it implies poor
health when the reality is that we simply lack data.
Validation gate (required, not optional)
This rule has been stated in this skill before and was violated anyway, so it is
now checkable. Before writing any backlink output, run the validator:
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run validate_backlink_report.py --report <report>.json --json
Pass the sources you actually collected (cc_data, moz_data, bing_data,
dataforseo_data, scoring_factors, and your findings list). The
source_score_consistency check fails the report with status: FAIL when:
a numeric score is present but no scoreable source (Moz, Bing, or DataForSEO)
supplied data -- i.e. the Common-Crawl-only case, and
any finding marked source: not-assessed carries a numeric score, value,
or health_score.
If the validator returns status: FAIL, do not present the report. Fix the
findings -- replace the offending numbers with Not Assessed -- and re-run until
it passes.
Output Format
Backlink Health Score: XX/100 (or INSUFFICIENT DATA)
DataForSEO available? → Use as primary (confidence: 1.0)
Moz configured? → Use for DA/PA/spam/anchors (confidence: 0.85)
Bing configured? → Use for registered-property links and comparison only
when both properties are accessible (confidence: 0.70)
Moz not configured but Keywords Everywhere is? → Use for a Profile Overview
rank-only fallback (confidence: 0.60; single metric, no link counts/anchors)
Always: Common Crawl for domain-level metrics (confidence: 0.50)
Always: Verification crawler for known link checks (confidence: 0.95)
Before presenting any backlink analysis to the user, run this checklist internally.
Do NOT skip this step. Fix any issues found before showing the report.
Fact-Check Every Claim
Schema claims: Did parse_html return @type for each block? If any @type is missing,
re-check, it may use @graph wrapper (valid JSON-LD, not malformed).
"link_removed" findings: Is the page JS-rendered? If unverifiable_js, say so, never
report a JS-rendered page as "link removed" (that's a false negative).
H1 findings: Are any H1s in the h1_suspicious list? If so, note they are likely
counters/stats, not semantic headings.
Reciprocal links: If site A links to site B AND B links back to A, flag it as a
reciprocal link pattern. Check outbound links against verified inbound sources.
Health score: Are 4+ of 7 factors scored? If not, report INSUFFICIENT DATA, never
show a misleading numeric score.
Verify Data Source Labels
Every metric in the report has a source label (e.g., "Parsed (0.95)", "CC (0.50)")
Every "not found" result distinguishes between "not crawled" vs "below threshold" vs "error"
Social media pages flagged as unverifiable_js (not link_removed)
Cross-Check Consistency
Platform detection matches actual signals (check for wp-content, shopify CDN, etc.)
Referring domain count in summary matches the actual verified links list
No claim is presented without a data source backing it
If ANY check fails, fix the finding before presenting. Never present inferred data as fact.
Post-Analysis
After completing any backlink analysis command, always offer:
"Generate a professional PDF report? Use /seo google report"
Reference Documentation
Load on demand (do NOT load at startup):
${CLAUDE_PLUGIN_ROOT}/skills/seo/references/backlink-quality.md -- Detailed toxic link patterns and scoring methodology (shared reference, load when analyzing toxic links or spam scores)
Comprehensive SEO analysis for any website or business type. Full site audits, single-page analysis, technical SEO (crawlability, indexability, Core Web Vitals with INP), schema markup, content quality (E-E-A-T), image optimization, sitemap analysis, and GEO for AI Overviews/ChatGPT/Perplexity. Industry detection for SaaS, e-commerce, local, publishers, agencies. Triggers on: SEO, audit, schema, Core Web Vitals, sitemap, E-E-A-T, AI Overviews, GEO, technical SEO, content quality, page speed. Use this hub only when the SEO domain is clear and the requested workflow is not; otherwise use the exact retained leaf or command.
Audit and fix agent readiness: the Lighthouse Agentic Browsing fraction, accessibility tree for agents, robots.txt and Content-Signal for AI agents, WAF treatment of agent traffic, llms.txt, Markdown delivery, ai-catalog.json, /.well-known discovery files, and WebMCP tools. Exclude AI citability and brand signals (seo-geo) and commerce protocol depth (seo-ecommerce).
Ahrefs API analyst (extension). Reads referring domains, backlinks, organic keywords, and content explorer data via the tested @ahrefs/mcp@0.0.11 server. Pairs with seo-backlinks for multi-source confidence weighting.
Run a full-site SEO audit and return a scored, prioritized report. Use only for site-wide checks; use seo-page for one URL or seo-technical for a technical-only review.
Bing Webmaster Tools + IndexNow extension. Microsoft Copilot citations are fed by the Bing index; this skill makes Bing visibility, link data, and IndexNow URL submission first-class.
Cluster keywords by SERP overlap and design hub-and-spoke content architecture with internal links. Use for planning only; use the blog-cluster command to execute article production.