外链对比分析
对比自己与竞品的外链数量、引用域质量、锚文本分布,找出链接建设差距与机会。
涉及 API
| API | 用途 |
|---|---|
| 引用域查询 Live | 宏观对比引用域数量与质量 |
| 外链查询 Live | 深入分析高权重外链来源 |
| 锚文本 Live | 锚文本分布与过度优化检测 |
需要 API Key 具备
backlinksscope,见 外链分析 API 概览。
工作流
1. 确定对比对象(自己 + 2–3 竞品)
2. referring_domains → 引用域数量 & Top 域对比
3. backlinks → 竞品有、自己没有的高权重来源
4. anchors → 锚文本健康度对比
5. 输出 gap 报告 + 外链建设优先级Python 对比脚本
import requests
from dataclasses import dataclass
API_KEY = "smt_live_YOUR_KEY"
BASE = "https://api.seermartech.cn/v3/backlinks"
HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
DOMAINS = {
"mine": "mysite.com",
"competitor_a": "competitor-a.com",
"competitor_b": "competitor-b.com",
}
@dataclass
class DomainProfile:
domain: str
referring_domains: int
top_domains: list
top_anchors: list
def get_referring_domains(target: str, limit: int = 100) -> list:
resp = requests.post(
f"{BASE}/referring_domains/live",
headers=HEADERS,
json=[{"target": target, "limit": limit, "order_by": ["rank,desc"]}],
timeout=120,
)
resp.raise_for_status()
return resp.json()["tasks"][0]["result"][0]["items"]
def get_anchors(target: str, limit: int = 20) -> list:
resp = requests.post(
f"{BASE}/anchors/live",
headers=HEADERS,
json=[{"target": target, "limit": limit, "order_by": ["backlinks,desc"]}],
timeout=120,
)
resp.raise_for_status()
return resp.json()["tasks"][0]["result"][0]["items"]
def profile(label: str, domain: str) -> DomainProfile:
refs = get_referring_domains(domain)
anchors = get_anchors(domain)
return DomainProfile(
domain=domain,
referring_domains=len(refs),
top_domains=[r.get("domain") for r in refs[:5]],
top_anchors=[a.get("anchor") for a in anchors[:5]],
)
def find_gap(mine: DomainProfile, competitor: DomainProfile) -> list[str]:
"""找出竞品有、自己没有的引用域"""
my_refs = set(get_referring_domains(mine.domain, 200))
my_domains = {r.get("domain") for r in my_refs}
comp_refs = get_referring_domains(competitor.domain, 200)
return [r.get("domain") for r in comp_refs if r.get("domain") not in my_domains][:20]
# 运行对比
profiles = {label: profile(label, domain) for label, domain in DOMAINS.items()}
print("=== 引用域对比 ===")
for label, p in profiles.items():
print(f"{label:15} {p.domain:25} refs={p.referring_domains:4} top={p.top_domains[:3]}")
print("\n=== 锚文本 Top 5 ===")
for label, p in profiles.items():
print(f"{label}: {p.top_anchors}")
gap = find_gap(profiles["mine"], profiles["competitor_a"])
print(f"\n=== Gap 机会(竞品 A 有、我没有的域)===\n{gap[:10]}")TypeScript
const API_KEY = "smt_live_YOUR_KEY";
const BASE = "https://api.seermartech.cn/v3/backlinks";
async function getReferringDomains(target: string) {
const resp = await fetch(`${BASE}/referring_domains/live`, {
method: "POST",
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify([{ target, limit: 100, order_by: ["rank,desc"] }]),
});
const data = await resp.json();
return data.tasks[0].result[0].items;
}
async function compareDomains(mine: string, competitors: string[]) {
const myRefs = new Set((await getReferringDomains(mine)).map((r: { domain: string }) => r.domain));
for (const comp of competitors) {
const compRefs = await getReferringDomains(comp);
const gap = compRefs.filter((r: { domain: string }) => !myRefs.has(r.domain));
console.log(`Gap vs ${comp}:`, gap.slice(0, 10).map((r: { domain: string }) => r.domain));
}
}报告输出建议
| 模块 | 内容 |
|---|---|
| 引用域概览 | 自己 vs 竞品引用域数、高质量域(rank > 50)占比 |
| Gap 列表 | 竞品有、自己没有的 Top 20 引用域 |
| 锚文本健康度 | 品牌词 / 商业词 / 通用词比例对比 |
| 行动建议 | 优先 outreach 的域名类型(行业媒体、工具目录等) |
成本估算
| 操作 | 调用次数 | 参考费用 |
|---|---|---|
| 3 域 × referring_domains | 3 | ≈ ¥0.96 each |
| 3 域 × anchors | 3 | ≈ ¥0.96 each |
| 1 次 gap backlinks 深挖 | 1–5 | ≈ ¥0.96–5 |
| 完整对比 | ~9 次 | ≈ ¥9–16 |
最佳实践
- 定期对比:建议每季度跑一次完整外链对比
- limit 控制:初步对比
limit: 100足够;深挖 gap 时提高到 200–500 - nofollow 过滤:outreach 目标优先 dofollow 外链
- 结合 SERP:引用域 gap 大的竞品,往往 SERP 表现也更好,见 竞品 SERP 分析
- 权限:确保 Key 已开通 backlinks scope