竞争对手外链分析与反向工程
High Contrast
Dark Mode
Light Mode
Sepia
Forest
2 min read358 words

竞争对手外链分析与反向工程

不需要凭空发明外链策略——竞争对手已经证明哪些路径有效,你只需要走同一条路。

外链逆向工程流程

graph TD IDENTIFY[识别竞争对手 Top3] --> EXPORT[导出外链数据] EXPORT --> FILTER[过滤低质量链接] FILTER --> CLASSIFY[分类来源类型] CLASSIFY --> PRIORITIZE[按获取难度排序] PRIORITIZE --> OUTREACH[外联获取] OUTREACH --> TRACK[追踪结果] CLASSIFY --> TYPE1[内容引用型] CLASSIFY --> TYPE2[资源页型] CLASSIFY --> TYPE3[访客博客型] CLASSIFY --> TYPE4[目录收录型] style FILTER fill:#e3f2fd,stroke:#1565c0,stroke-width:2px style PRIORITIZE fill:#c8e6c9,stroke:#388e3c,stroke-width:2px

外链机会分析器

"""
竞争对手外链分析与机会评分
"""
from dataclasses import dataclass, field
from enum import Enum
class LinkType(Enum):
EDITORIAL = "编辑引用"      # 内容中自然引用
RESOURCE = "资源页收录"     # /resources /links 页面
GUEST_POST = "访客文章"     # 作者撰稿
DIRECTORY = "目录收录"      # 行业目录
FORUM = "论坛/社区"         # 讨论帖
BROKEN = "失效链接替换"     # 对方页面有死链
@dataclass
class BacklinkOpportunity:
domain: str
url: str
link_type: LinkType
domain_authority: int   # 0-100
referring_traffic: int  # 月均流量估算
do_follow: bool
competitor_count: int   # 几个竞争对手已有这个链接
difficulty: str         # easy / medium / hard
class LinkProspectScorer:
"""外链机会评分"""
@staticmethod
def score(opp: BacklinkOpportunity) -> int:
score = 0
# DA 权重
if opp.domain_authority >= 70:
score += 35
elif opp.domain_authority >= 50:
score += 25
elif opp.domain_authority >= 30:
score += 15
else:
score += 5
# Do-follow 加权
if opp.do_follow:
score += 20
# 竞争对手数量(越多越值得争取)
score += min(opp.competitor_count * 8, 25)
# 获取难度(简单的优先)
difficulty_map = {"easy": 20, "medium": 10, "hard": 5}
score += difficulty_map.get(opp.difficulty, 0)
return score
@classmethod
def prioritize(cls, opps: list[BacklinkOpportunity]) -> list[dict]:
scored = [
{
"domain": o.domain,
"类型": o.link_type.value,
"DA": o.domain_authority,
"得分": cls.score(o),
"难度": o.difficulty,
"竞对数": o.competitor_count,
"DoFollow": "✅" if o.do_follow else "❌",
"获取策略": cls._strategy(o),
}
for o in opps
]
return sorted(scored, key=lambda x: x["得分"], reverse=True)
@staticmethod
def _strategy(o: BacklinkOpportunity) -> str:
strategies = {
LinkType.EDITORIAL: "创作比竞对更深度的内容,主动告知网站编辑",
LinkType.RESOURCE: "发邮件告知你有更完整的同类资源,申请收录",
LinkType.GUEST_POST: "提交投稿意向,提供 3 个独特选题",
LinkType.DIRECTORY: "直接提交信息,通常 1–2 天审核",
LinkType.FORUM: "参与讨论并自然提及,避免明显广告味",
LinkType.BROKEN: "用 broken link checker 找到死链,告知网主并推荐替换链接",
}
return strategies.get(o.link_type, "个性化外联")
class GapAnalyzer:
"""Link Gap 分析 — 竞对有但我没有的外链域名"""
@staticmethod
def find_gaps(
my_domains: set[str],
competitor_domains: dict[str, set[str]],
) -> list[dict]:
"""找出多个竞对共有但我没有的域名"""
all_comp_domains: dict[str, int] = {}
for comp_name, domains in competitor_domains.items():
for d in domains:
all_comp_domains[d] = all_comp_domains.get(d, 0) + 1
gaps = [
{"域名": d, "竞对覆盖数": count, "优先级": "高" if count >= 2 else "中"}
for d, count in all_comp_domains.items()
if d not in my_domains
]
return sorted(gaps, key=lambda x: x["竞对覆盖数"], reverse=True)
# 演示
opportunities = [
BacklinkOpportunity("searchengineland.com", "/article/seo-tools", LinkType.EDITORIAL, 85, 450000, True, 3, "hard"),
BacklinkOpportunity("seotools-directory.com", "/directory/", LinkType.DIRECTORY, 42, 12000, True, 2, "easy"),
BacklinkOpportunity("marketingblog.io", "/resources/", LinkType.RESOURCE, 55, 28000, True, 3, "medium"),
BacklinkOpportunity("webmaster-forums.net", "/thread/seo", LinkType.FORUM, 38, 35000, False, 1, "easy"),
BacklinkOpportunity("contentwriters.co", "/guest-post/", LinkType.GUEST_POST, 61, 18000, True, 2, "medium"),
BacklinkOpportunity("oldsite.com", "/dead-link-page/", LinkType.BROKEN, 47, 9000, True, 0, "medium"),
]
scorer = LinkProspectScorer()
ranked = scorer.prioritize(opportunities)
print("=== 外链机会优先级排序 ===")
print(f"{'域名':30s} {'类型':12s} {'DA':4s} {'得分':4s} {'难度':8s} {'策略'}")
print("-" * 100)
for r in ranked:
print(f"{r['domain']:30s} {r['类型']:12s} {r['DA']:4d} {r['得分']:4d} {r['难度']:8s} {r['获取策略'][:40]}")
print("\n=== Link Gap 分析 ===")
gap_analyzer = GapAnalyzer()
my = {"seotools-directory.com", "moz.com"}
competitors = {
"对手A": {"searchengineland.com", "marketingblog.io", "seotools-directory.com"},
"对手B": {"searchengineland.com", "contentwriters.co", "webmaster-forums.net"},
"对手C": {"marketingblog.io", "contentwriters.co", "blog.hubspot.com"},
}
gaps = gap_analyzer.find_gaps(my, competitors)
for g in gaps[:5]:
print(f"  [{g['优先级']}] {g['域名']} — {g['竞对覆盖数']} 个竞对有链接")

外链质量过滤标准

指标 高质量阈值 低质量信号
DA/DR ≥ 30 < 10 且大量广告
相关性 同行业/话题 完全不相关
流量 月均 > 1000 UV 0 流量(链接农场)
链接类型 Do-Follow 大量 No-Follow 无意义
网站安全 HTTPS,无恶意软件 被 Google 手动处罚

行动清单

下一章07-本地SEO/01-GoogleBusiness与NAP — 实体业务的本地搜索优化策略。