搜索全站
Google SEO 8 分钟阅读

断链重建实操:找死链、做替代内容、联系站长的完整流程

断链重建是转化率最高的白帽外链手法之一。本文给出找死链的三条路径、替代内容的制作标准、联系邮件的写法,以及用 Python 批量检测站点外链存活的完整脚本。

U
UFO_PF 2018-05-20 · 阅读 8 分钟
断链 GOOGLE SEO
阅读提示
本文约 3,156 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:别人的死链,是你的机会

每个维护了三年以上的资源页,都会积累一批 404 链接。对站长来说这是维护负担,对你来说是现成的机会——那个位置已经被证明「值得放一个链接」,缺的只是一个能打开的目标。断链重建的转化率通常高于冷邮件求链接,因为你不是索取,而是在帮对方修一个 bug。难点在三个环节:去哪里找到这些死链、用什么内容去替代、怎么开口。

原理分析:为什么断链重建有效

资源页的链接是编辑选择的结果,说明该主题下这个位置有价值。链接失效意味着两件事同时发生:访客体验受损、页面维护者知道有问题但没时间修。你的介入同时解决了这两点,所以回复率天然更高。

需要区分两类死链机会:

类型 定义 难度 转化率
真死链 目标 URL 返回 404/410 或域名已过期 低 高
软死链 返回 200 但内容已下线、跳转首页、内容无关 中 中
域名可注册 原域名已过期且可重新注册 高 低(且有风险)

第三类不建议采用,重新注册过期域名做跳转属于典型灰产手法,与链接垃圾政策冲突。前两类才是正道。

判定死链时要注意状态码的语义:404 是未找到,410 是永久删除,两者都是明确的失效信号;301/302 跳转要看最终落地页是否与原主题相关,跳到首页的属于软死链;403 可能是屏蔽爬虫而非页面不存在,需要人工复核。

保姆级实操

步骤一:锁定候选资源页
找那些「链接列表型」的页面。检索式可以这样构造:

# 目标:找中文/英文资源页(在浏览器搜索框使用)
# "关键词" + "resources" / "推荐阅读" / "useful links" / "相关资源"
# intitle:resources "关键词"
# "关键词" inurl:links

每个主题筛出 20–40 个候选页,优先选教育机构、行业协会、政府站点、老牌博客这类维护频率低的页面,死链率最高。

步骤二:批量检测页面上的外链是否失效
用 Python 抓取页面外链并并发检测:

import concurrent.futures as cf
import re, requests
from bs4 import BeautifulSoup

HEADERS = {"User-Agent": "Mozilla/5.0 (compatible; BrokenLinkAudit/1.0)"}
PAGES = [
    "https://example.org/resources/web-performance",
    "https://example.edu/useful-links/wordpress",
]

def extract_links(page):
    try:
        r = requests.get(page, headers=HEADERS, timeout=20)
        if r.status_code != 200:
            return page, []
        soup = BeautifulSoup(r.text, "html.parser")
        out = [a["href"] for a in soup.find_all("a", href=True)
               if a["href"].startswith("http")]
        return page, out
    except Exception:
        return page, []

def probe(url):
    try:
        r = requests.head(url, headers=HEADERS, timeout=15,
                          allow_redirects=True)
        return url, r.status_code, r.url
    except Exception as e:
        return url, 0, str(e)

with cf.ThreadPoolExecutor(max_workers=16) as ex:
    pages = dict(ex.map(extract_links, PAGES))
    all_links = sorted({u for v in pages.values() for u in v})
    results = list(ex.map(probe, all_links))

for url, code, final in results:
    if code in (404, 410) or code == 0:
        print(f"[DEAD] {code} {url} -> {final}")

步骤三:人工复核软死链
脚本只能判断状态码,跳转首页、内容主题漂移、页面变成广告页这些要人工看。这一步不能省,否则会发出错误的提醒邮件。

步骤四:制作替代内容
替代页必须比原链接更「适合那个位置」:主题完全对口、内容长期稳定(不要放有时效性的新闻)、页面是纯内容而不是落地页、没有强营销语气。如果手上没有合适的页面,就现写一篇,别拿不太相关的页面凑数。

步骤五:确定联系人
优先找页面所属栏目的编辑、站点「关于」页里的邮箱、whois 里的联系邮箱(注意隐私脱敏后可能不可用)。找不到邮箱时用站点的联系表单。

步骤六:写邮件
结构固定为四句:指出具体位置(第几组链接里的哪一条)、说明它现在的状态(404)、给出你的替代资源一句话介绍、明确请对方替换。不要用营销口吻,不要附多个链接让对方选。

步骤七:跟进与记录
一周后跟进一次,仍无回复就放弃。所有候选页、检测结果、发送日期、回复状态记进台账,避免重复触达同一站点。

常见踩坑

  1. 用 requests.get 全量下载页面,被对方站点限流甚至封 IP,应优先用 HEAD 并控制并发。
  2. 把 403 一律当死链,实际上很多站点只是屏蔽了非浏览器 UA。
  3. 替代内容用的是产品页或落地页,站长一眼看出是营销,不会替换。
  4. 邮件里没写清是哪个链接失效,站长无法快速验证,直接忽略。
  5. 同一站点被不同同事重复触达,被拉黑。
  6. 案例:某团队用脚本扫了 300 个资源页,把 1200 条 403 全当死链发邮件,其中 900 条其实是 Cloudflare 的 UA 拦截。邮件发出后被多个站长公开吐槽,品牌受损,后续真正有价值的触达也难推进。
  7. 替代页面 URL 后来被自己改掉,导致刚拿到的链接又变成新的死链。

总结

断链重建能否跑通,取决于三点:候选页是否真的维护滞后(死链多)、替代内容是否比原链接更合适、邮件是否让站长三秒内看懂问题。执行顺序是先用 HEAD 批量筛状态码,再人工复核软死链,最后才是发送邮件。脚本只负责第一轮筛选,人工判断不能省。这条路径属于 外链建设方法盘点 里风险最低的几类之一;拿到链接后要用 外链质量评估维度 筛一遍,锚文本的写法则遵循 锚文本策略 的分布原则。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。