seo-backlinks

Installation

$npx skills add AgriciDaniel/claude-seo --skill seo-backlinks

Summary

Analyze a domain's complete backlink profile (referring domains, anchor text, toxicity, quality distribution) using available APIs. Detects over-optimization signals, toxic link patterns, competitor gaps, and link-building opportunities. Can execute with free sources (Moz, Bing) or premium (DataForSEO).

SKILL.MD

Backlink Profile Analysis

Source Detection

Before analysis, detect available data sources:

  1. DataForSEO MCP (premium): Check if dataforseo_backlinks_summary tool is available
  2. Moz API (free signup): python scripts/backlinks_auth.py --check moz --json
  3. Bing Webmaster (free signup): python scripts/backlinks_auth.py --check bing --json
  4. Common Crawl (always available): Domain-level graph with PageRank
  5. Verification Crawler (always available): Checks if known backlinks still exist

Run python scripts/backlinks_auth.py --check --json to detect all sources at once.

If no sources are configured beyond the always-available tier:

  • Still produce a report using Common Crawl domain metrics
  • Suggest: "Run /seo backlinks setup to add free Moz and Bing API keys for richer data"

Quick Reference

CommandPurpose
/seo backlinks <url>Full backlink profile analysis (uses all available sources)
/seo backlinks gap <url1> <url2>Competitor backlink gap analysis
/seo backlinks toxic <url>Toxic link detection and disavow recommendations
/seo backlinks new <url>New and lost backlinks (DataForSEO only)
/seo backlinks verify <url> --links <file>Verify known backlinks still exist
/seo backlinks setupShow setup instructions for free backlink APIs

Analysis Framework

Produce all 7 sections below. Each section lists data sources in preference order.

1. Profile Overview

DataForSEO: dataforseo_backlinks_summary → total backlinks, referring domains, domain rank, follow ratio, trend.

Moz API: python scripts/moz_api.py metrics <url> --json → Domain Authority, Page Authority, Spam Score, linking root domains, external links.

Common Crawl: python scripts/commoncrawl_graph.py <domain> --json → in-degree (referring domain count), PageRank, harmonic centrality.

Scoring:

MetricGoodWarningCritical
Referring domains>10020-100<20
Follow ratio>60%40-60%<40%
Domain diversityNo single domain >5%1 domain >10%1 domain >25%
TrendGrowing or stableSlow declineRapid decline (>20%/quarter)

2. Anchor Text Distribution

DataForSEO: dataforseo_backlinks_anchors

Moz API: python scripts/moz_api.py anchors <url> --json

Bing Webmaster: python scripts/bing_webmaster.py links <url> --json (extract anchor text from link details)

Healthy distribution benchmarks:

Anchor TypeTarget RangeOver-Optimization Signal
Branded (company/domain name)30-50%<15%
URL/naked link15-25%N/A
Generic ("click here", "learn more")10-20%N/A
Exact match keyword3-10%>15%
Partial match keyword5-15%>25%
Long-tail / natural5-15%N/A

Flag if exact-match anchors exceed 15% -- this is a Google Penguin risk signal.

3. Referring Domain Quality

DataForSEO: dataforseo_backlinks_referring_domains

Moz API: python scripts/moz_api.py domains <url> --json → domains with DA scores

Common Crawl: python scripts/commoncrawl_graph.py <domain> --json → top referring domains (domain-level, no authority scores)

Analyze:

  • TLD distribution: .edu, .gov, .org = high authority. Excessive .xyz, .info = low quality
  • 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: dataforseo_backlinks_bulk_spam_score + toxic patterns from reference

Moz API: Spam Score from python scripts/moz_api.py metrics <url> --json (1-17% scale, >11% = high risk)

Verification Crawler: python scripts/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 references/backlink-quality.md for the full 30 toxic patterns and disavow criteria.

5. Top Pages by Backlinks

DataForSEO: dataforseo_backlinks_backlinks with target type "page"

Moz API: python scripts/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: dataforseo_backlinks_referring_domains for both domains, then compare

Bing Webmaster (unique!): python scripts/bing_webmaster.py compare <url1> <url2> --json — the only free tool with built-in competitor comparison

Moz API: Compare DA/PA between domains via python scripts/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: dataforseo_backlinks_backlinks with date filters for 30/60/90 day changes

Verification Crawler: For known links, verify current status with python scripts/verify_backlinks.py

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:

FactorWeightSources (preference order)Confidence
Referring domain count20%DataForSEO > Moz > CC in-degree1.0 / 0.85 / 0.50
Domain quality distribution20%DataForSEO > Moz DA distribution1.0 / 0.85
Anchor text naturalness15%DataForSEO > Moz > Bing anchors1.0 / 0.85 / 0.70
Toxic link ratio20%DataForSEO > Moz spam score1.0 / 0.85
Link velocity trend10%DataForSEO only1.0
Follow/nofollow ratio5%DataForSEO > Bing details1.0 / 0.70
Geographic relevance10%DataForSEO > Bing country1.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"

When only CC is available, cap maximum score at 70/100. A numeric score with fewer than 4 data sources is misleading — it implies poor health when the reality is we simply lack data.

Output Format

Backlink Health Score: XX/100 (or INSUFFICIENT DATA)

SectionStatusScoreData Source
Profile Overviewpass/warn/failXX/100Moz (0.85)
Anchor Distributionpass/warn/failXX/100Moz (0.85)
Referring Domain Qualitypass/warn/failXX/100CC (0.50)
Toxic Linkspass/warn/failXX/100Moz Spam (0.85)
Top PagesinfoN/AMoz (0.85)
Link Velocitypass/warn/failXX/100DataForSEO only

Critical Issues (fix immediately)

High Priority (fix within 1 month)

Medium Priority (ongoing improvement)

Link Building Opportunities (top 10)

Error Handling

ErrorCauseResolution
No sources configuredNo API keys, no DataForSEORun /seo backlinks setup
Moz rate limitFree tier: 1 req/10sWait 10 seconds, retry. Built into script.
Bing site not verifiedSite not verified in BingVerify at https://www.bing.com/webmasters
CC download timeoutLarge graph file, slow connectionUse --timeout 180 flag
DataForSEO unavailableExtension not installedRun ./extensions/dataforseo/install.sh
No backlink data returnedDomain too new or very smallNote: small sites may have <10 backlinks

Fallback cascade:

  1. DataForSEO available? → Use as primary (confidence: 1.0)
  2. Moz configured? → Use for DA/PA/spam/anchors (confidence: 0.85)
  3. Bing configured? → Use for links/competitor comparison (confidence: 0.70)
  4. Always: Common Crawl for domain-level metrics (confidence: 0.50)
  5. Always: Verification crawler for known link checks (confidence: 0.95)
  6. Nothing works? → "Run /seo backlinks setup to configure free APIs"

Pre-Delivery Review (MANDATORY)

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):

  • skills/seo/references/backlink-quality.md -- Detailed toxic link patterns and scoring methodology (shared reference, load when analyzing toxic links or spam scores)
  • skills/seo/references/free-backlink-sources.md -- Source comparison, confidence weighting, setup guides (shared reference, load when configuring free backlink APIs)