| name | off-page-seo |
| description | Backlink + distribution checklist that expands a site's KD ceiling beyond what on-page work alone can earn. Use when the user mentions 'backlinks', 'off-page SEO', 'directory submissions', 'guest posts', 'outreach targets', 'link building', 'submit to directories', 'get listed in listicles', 'Product Hunt launch backlinks', or asks 'how do I get more domain authority'. Generates a prioritized, researched target list across directories, listicles, and guest-post candidates — does NOT submit anything on the user's behalf. Pairs with `mktg-backlink-prospector` agent for parallel research. Distinct from `seo-machine` (on-page programmatic) and `seo-audit` (technical diagnostic). The off-page half of the SEO operation. |
| category | seo |
| tier | nice-to-have |
| reads | ["brand/positioning.md","brand/competitors.md","brand/audience.md","brand/voice-profile.md"] |
| writes | [] |
| triggers | ["backlinks","off-page seo","directory submissions","guest posts","outreach targets","link building","submit to directories","get listed in listicles","domain authority"] |
Off-Page SEO
On-page work caps out around DR + 20 in achievable KD targets. Off-page work expands that ceiling. This skill generates a prioritized backlink target list across three lanes — directories, listicles, guest posts — and a starter-stack checklist of universal SaaS submission flows. It does not submit anything. The user (or the user's outreach team) does the actual submission.
The off-page half of the SEO operation. Pairs with seo-machine (on-page programmatic sprint) — ship pages with seo-machine, queue outreach with this skill, run them in parallel.
On Activation
- Load brand context:
positioning.md, competitors.md, audience.md, voice-profile.md. Missing files are fine.
- Surface what loaded:
Brand context loaded:
├── Positioning ✓/✗ (drives outreach angle + value-add framing)
├── Competitors ✓/✗ (target list source — Recipe F runs on them)
├── Audience ✓/✗ (selects niche-specific directories + communities)
└── Voice Profile ✓/✗ (shapes outreach email tone if user chains into cold-email)
- If
competitors.md is missing, prompt the user for 3-7 direct competitors before running Recipe F (the researched-target-list recipe needs competitor domains as input).
- Check for
.seo/backlink-targets.json in the current project. If present, this is a re-run — show the user the existing target counts and ask whether to refresh or just present the existing list.
When to use vs adjacent skills
| Skill | When | When NOT |
|---|
off-page-seo (this) | Building a prioritized backlink target list + universal starter-stack checklist | Doing actual outreach (use cold-email for that) |
seo-machine | On-page programmatic sprint (alternatives, comparison, use-case pages) | Off-page work — this skill |
seo-audit | Diagnosing on-site technical issues | Building backlink target lists |
cold-email (in direct-response-copy) | Writing the outreach emails after target list exists | Generating the target list itself |
startup-launcher | Launch-day platform submissions (Product Hunt, BetaList, etc.) | Ongoing backlink work post-launch |
The Starter Stack (universal SaaS submission flow)
Every new site should be submitted to these by week 4. Most are free; all are worth a one-time submission. This is the mechanical work — checklist, not creative.
Directories (submit and check off)
| Directory | DR (approx) | Notes |
|---|
| Product Hunt | 90+ | Single biggest launch-day backlink + traffic source. Coordinate with startup-launcher. |
| G2 | 88+ | Becomes a destination for "[brand] reviews" searches; needs screenshot + verification email. |
| Capterra / GetApp / Software Advice | 80+ | Gartner Digital Markets — same submission flow across all three. |
| SaaSHub | 65+ | Quick win, free. |
| AlternativeTo | 80+ | List as alternative to top 5 competitors. Required free submission. |
| BetaList | 70+ | Only if pre-launch or recently launched. |
| Indie Hackers | 75+ | Products section. Founder-friendly community. |
| TopAlternatives.com / SimilarSiteSearch / Slant.co | 50–65 | Niche but cumulatively useful. |
| Crunchbase | 92+ | Even free profile gets DR pass-through. |
Community surfaces (selective)
| Surface | When to engage | Hard rule |
|---|
| Niche subreddits | Find via Exa search "site:reddit.com [audience] [problem]" or Ahrefs site-explorer on reddit.com for your keywords | Engage genuinely for 2+ weeks before mentioning the product. Never just post a link. |
| Slack/Discord communities | For your audience persona | Join 3-5, contribute substantively for 2 weeks before mentioning. |
| Hacker News | For technical products | Show HN posts can drive enormous traffic spikes — require a real launch story, not "we built another SaaS." |
Founder outreach (slow-burn channel)
- Founder link trades with complementary (non-competitive) products. Reach out to 5-10 founders of products your audience also uses. Offer mutual blog mentions, "tools we love" pages, or guest posts.
- Guest posts on DR 30+ niche blogs. Find via Recipe F (competitor referring-domains). Pitch 1-2 strong posts per month — not spray-and-pray.
Recipe F — Researched Target List
Use Exa MCP (mktg default) or Ahrefs MCP (if connected) to surface high-value link opportunities your competitors already have. The target list is built FROM your competitors' existing backlinks.
Exa path (mktg default)
For each top-3 competitor:
mcp__exa__web_search_advanced_exa
query: "[competitor-domain] -site:[competitor-domain]"
filter: linksTo:[competitor-domain]
limit: 50
Then for each result, scrape the page (Exa crawling_exa or firecrawl) and extract: domain, page title, anchor text. Filter to DR≥30 sites via a separate exa__company_research_exa lookup, OR by manual triage of well-known authority domains.
Ahrefs appendix (only if you have a paid sub)
If mcp__ahrefs__subscription-info-limits-and-usage returns data AND you want numeric precision on referring-domain DR, run:
mcp__ahrefs__site-explorer-referring-domains
target: <competitor-domain>
where: domain_rating >= 30 AND traffic_dofollow >= 100
order_by: domain_rating:desc
limit: 100
This replaces only the DR-proxy step in the Exa path above. Ahrefs MCP is not in mktg's chained-in ecosystem — keep this as a footnote, not a default.
Then for each candidate domain (Exa-path or Ahrefs-path), filter manually into buckets:
| Bucket | Signal |
|---|
| Directory candidates | Site name matches "[category] directory", "best of [category]", "[category] tools", "alternatives to [tool]" |
| Listicle candidates | Blog posts titled "Top X [category] in YYYY" — pitch yourself for inclusion |
| Guest-post candidates | Looks like a blog (*.com/blog/... URLs), DR 30+, posts on your niche topic |
| Skip | PR wires, paid networks, irrelevant niches, sites that link to everyone in the space |
Output schema (.seo/backlink-targets.json)
{
"generated_at": "YYYY-MM-DD",
"research_backend": "exa" | "ahrefs" | "manual",
"directories": [
{ "domain": "g2.com", "dr": 88, "url_to_submit": "https://www.g2.com/products/new", "competitor_uses": ["hootsuite", "buffer"] }
],
"listicles": [
{ "domain": "thedigitalprojectmanager.com", "dr": 65, "url": "https://...", "topic": "Best Twitter monitoring tools", "competitor_listed": "hootsuite" }
],
"guest_posts": [
{ "domain": "indiehackers.com/blog", "dr": 81, "topic_fit": "founder-led marketing" }
]
}
This file lives at the project root under .seo/ and is read by the mktg-backlink-prospector agent on future runs to avoid duplicate prospecting.
Parallel research via mktg-backlink-prospector agent
When the user wants a fresh target list and there are 3+ competitors to research, /cmo should spawn the mktg-backlink-prospector agent rather than running Recipe F inline. The agent fans out competitor-by-competitor research in parallel, returns the consolidated .seo/backlink-targets.json, and frees /cmo's context for the next decision.
See agents/research/backlink-prospector.md for the spawn contract.
Phase template (when seo-machine sprint integration is wanted)
When the user is also running a seo-machine sprint, off-page phases land near the end of the tracker:
### Phase N — Starter-stack directory submissions
**Why:** baseline backlinks from high-DR directories. Cap at 2-3 hours of submission work.
**Scope:**
- [ ] Product Hunt — coordinate launch with startup-launcher
- [ ] G2 — submit product page
- [ ] Capterra — submit product page
- [ ] SaaSHub
- [ ] AlternativeTo — list as alternative to: <competitor-1>, <competitor-2>, ...
- [ ] Indie Hackers — claim product page
- [ ] Crunchbase — basic profile
**Files modified:** none (external work). Track status in `.seo/off-page-status.md`.
### Phase N+1 — Listicle outreach (top 10 targets)
**Why:** "Top X [category]" listicles already rank for our target keywords. Getting added is faster than displacing them.
**Targets (from .seo/backlink-targets.json):**
1. example.com/best-twitter-monitoring-tools (DR 65)
2. example.com/top-social-listening-tools-2026 (DR 72)
3. ... (top 10)
**Action:**
- [ ] For each, find the author via byline or about page
- [ ] Chain into `direct-response-copy` (cold-email mode) for the outreach email
- [ ] Send personalized note: short pitch + screenshot proof of value + link to demo
- [ ] Track reply status in `.seo/off-page-status.md`
**Verification:** 3+ listicles update to include the product within 60 days.
What this skill explicitly does NOT do
- Auto-submit anywhere. Submission flows often need real human review (G2 needs screenshot + URL + verification email; Product Hunt needs a launch coordinator).
- Generate outreach emails. Use
direct-response-copy (cold-email mode) for that. This skill produces the target list; the email writer is a separate skill.
- Track ongoing referring-domain growth. That's a weekly check-in task the user owns; this skill just provides the initial target list and refreshes it on demand.
- Run paid networks or link buys. Black-hat. mktg policy: white-hat only.
Honest caveats
Off-page work is slower and more uncertain than on-page work. A great alternatives page ranks within 30–90 days. A great backlink campaign might produce 3 useful links in the first month, 10 in three months. Don't gate the on-page sprint on off-page progress. Ship pages; queue outreach in parallel.
The compounding effect is also lumpy: one DR 80+ listicle is worth ten DR 30 directories. Prioritize quality over quantity in the target list — 10 well-researched targets beat 100 spray-and-pray submissions.
Anti-patterns
| Don't | Why |
|---|
| Submit to every directory you find | Low-DR directories don't move the needle; cumulative time cost is high, return is low. Stick to the curated starter stack + Recipe F targets. |
| Mass-pitch the same email to 50 listicle authors | Personalization rate-determines reply rate. 10 personalized pitches outperform 100 templated ones by 5–10× in reply rate. |
| Reciprocal link schemes ("you link to me, I link to you") | Google penalizes these patterns at scale. Founder link trades are different (they're editorial decisions); blind reciprocal exchanges are not. |
| Paid links from PBNs (private blog networks) | Black-hat, manually reviewed by Google, results in penalty when caught. Never. |
| Outreach without value-add | A pitch that's just "please add me" gets ignored. Lead with a screenshot, a stat, or a useful angle the author missed. |
| Gate the on-page sprint on backlink growth | Backlink campaigns are 3–6 month timelines. On-page work compounds in parallel — never let outreach uncertainty stop page shipping. |
Cross-references
agents/research/backlink-prospector.md — parallel-fan-out research agent that builds .seo/backlink-targets.json
skills/seo-machine/references/off-page.md — the sibling reference doc inside seo-machine's run-time bundle
skills/competitive-intel/SKILL.md — produces brand/competitors.md, the seed input for Recipe F
skills/direct-response-copy/SKILL.md (cold-email mode) — writes the outreach emails once the target list exists
skills/startup-launcher/SKILL.md — coordinates launch-day submission to 56 platforms (overlap on Product Hunt + BetaList; this skill handles the ongoing post-launch off-page work)