backlink-gap — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited backlink-gap (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Identify the highest-leverage backlink prospects — domains that link to multiple competitors but not to you — and rank them by an opinionated priority score that combines authority, link-overlap signal, downstream traffic, and topical relevance. Produces a numbered output bundle ready for outreach handoff.
Heavy skill. Grep before Read any referenced file, then Read only matched ranges with offset + limit. List ${CLAUDE_PLUGIN_DATA}/<brand>/ before opening files. On re-invocation mid-session, skip files already in context.
Don't use when you just need backlink quantity numbers (use the brand's connected backlink MCP directly) or when you need anchor-text analysis of your own profile (that's a separate audit — covered in seo-audit).
~/.claude-marketing/brands/_active-brand.json for the active slug, then load ~/.claude-marketing/brands/{slug}/profile.jsonskills/context-engine/industry-profiles.md for industry-specific link-quality thresholds (YMYL industries should set higher --min-dr)skills/context-engine/compliance-rules.md to filter out blocked publishers (e.g., PBN-style or paid-link networks the brand has explicitly banned)| Input | Source | Required? |
|---|---|---|
| Our backlinks CSV | Export from connected backlink MCP (Ahrefs / Semrush / SE Ranking / Moz) for the brand's primary domain | yes |
| Competitor backlinks CSVs (2+) | Same exporter, one per competitor (2 minimum for the link-overlap signal; 3-5 is the sweet spot) | yes |
| Min DR / DA filter | CLI flag, brand-profile default, or industry standard | optional |
| Top-N count | How many prospects to surface | optional |
One competitor is allowed (the script warns rather than errors) but the resulting "shared signal" is noise — single-competitor gap analysis is really just "who links to them" rather than "who consistently links in our space."
All outputs go to ${CLAUDE_PLUGIN_DATA}/{brand}/seo/backlink-gap/{YYYY-MM-DD}/.
{brand}.tld and each competitor via brand's connected backlink MCP. Budget guard: if the MCP exposes credit cost, sum estimated cost and ask "Continue? (y/N — default N)" before fetching when total > 200 credits. python "scripts/backlink_gap.py" \
--ours "${CLAUDE_PLUGIN_DATA}/{brand}/seo/backlink-gap/{date}/02-ours.csv" \
--competitors "${CLAUDE_PLUGIN_DATA}/{brand}/seo/backlink-gap/{date}/03-comp-*.csv" \
--min-dr {brand.profile.min_link_dr or 20} \
--top 100 \
--out "${CLAUDE_PLUGIN_DATA}/{brand}/seo/backlink-gap/{date}/04-gap-run.json"quality_scorecard from 04-gap-run.json. If status: needs_review, diagnose:data_freshness: fail → input CSV(s) older than 90 days. Re-pull data; backlink graphs decay fast.sample_size: fail → any input < 50 unique referring domains. Either the domain is too new or the export was truncated. Re-export with no row limit.competitor_coverage: warn → only 1 competitor. Add at least 1 more for genuine overlap signal.link_overlap_signal: fail → fewer than 5 referring domains link to ≥2 competitors. Either competitors are poorly chosen (they don't share a content space with each other) or the data is incomplete. Re-choose competitors.skills/context-engine/brand-voice-controls.md.${CLAUDE_PLUGIN_DATA}/{brand}/seo/backlink-gap/2026-06-04/
├── 00-input.md
├── 01-data-pull.md
├── 02-ours.csv
├── 03-comp-{competitor1}.csv
├── 03-comp-{competitor2}.csv
├── ...
├── 04-gap-run.json
├── 05-quality-scorecard.md
├── 06-prospect-shortlist.md
├── 07-broken-link-candidates.md
├── 08-outreach-templates.md
└── PLAN.md| Gate | What it checks | Why it matters |
|---|---|---|
| data_freshness | All input CSVs have mtime within 90 days | Backlink graphs decay fast — stale data sends you chasing dead links |
| sample_size | Each input has ≥ 50 unique referring domains | Below this, the gap math has too little signal to rank |
| competitor_coverage | ≥ 2 competitor CSVs supplied | The "shared signal" is what separates real prospects from noise |
| link_overlap_signal | ≥ 5 referring domains link to ≥ 2 of the competitors | If no domains shared, your competitors aren't actually competing in the same content space |
status: ready requires all four gates pass (competitor_coverage: warn does not block — it's a soft signal).
priority = 0.40 × DR_normalised
+ 0.25 × link_count_normalised (how many competitors this domain links to)
+ 0.20 × traffic_normalised
+ 0.15 × topical_relevanceWhy link_count is weighted higher than traffic: a domain that links to 3/3 competitors is unambiguously in your space and willing to link. A high-traffic domain that only links to 1 might just be a tier-1 publisher who happens to have covered one of you in passing.
This skill is a producer in a longer chain:
/digital-marketing-pro:competitor-analysis — picks the right competitors/digital-marketing-pro:digital-pr — consumes 06-prospect-shortlist.md + 08-outreach-templates.md/digital-marketing-pro:pr-pitch — drafts individual pitches per prospect/digital-marketing-pro:performance-report — quarterly re-runs of this skill feed the "links gained" KPI07-broken-link-candidates.md list first.--min-dr 40 to filter out low-authority publishers that could damage E-E-A-T.seo-specialist (primary) — interpretation of prospect qualitycompetitive-intel — competitor-set selection rationale (Step 1)pr-outreach — outreach template drafting (Step 8)brand-guardian — banned-publisher filter at Step 6/digital-marketing-pro:competitor-analysis — pick the competitors for this audit/digital-marketing-pro:digital-pr — runs the actual outreach/digital-marketing-pro:seo-drift — re-run quarterly to track delta/digital-marketing-pro:seo-audit — broader site-level audit including own-profile healthscripts/backlink_gap.py — the underlying gap engine~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.