出站链接审计:坏链、停放页与nofollow

站长大都做过这样的事:换友情链接的时候随手点了一下对方的站,发现能打开,就换上了;半年后偶然用工具扫一遍,才发现首页导出的几十个外链里,有六七个已经是「域名过期待售」的停放页,还有一个跳到了纯广告站。这一类问题不会让你的排名立刻掉下去,但它确实在持续消耗你页面传递出去的权重,而且会让搜索引擎对页面的「质量认知」打折扣。

外链管理和很多人理解的相反:重点不是去发外链,而是定期审计你自己页面上导出的链接。本文讲的是一套可以月度执行的审计流程,包括怎么发现坏链、怎么分类、怎么决定 nofollow 还是删除、以及 Disavow 到底该不该用。

一、先分清三种「外链」,处理方式完全不同

说「外链」的时候,很多人指的是三件不同的事,混淆会导致处理方向完全错位:

  • 出站链接:你的页面里指向别人网站的链接。这是本文重点,你能完全控制。
  • 入站链接:别人的页面指向你。只有删除请求和 Disavow 两种手段,而且后者主要针对垃圾外链。
  • 站内链接:自己的页面互相连。属于内链结构,不在本文范围。

出站链接的审计之所以重要,是因为它是你唯一能百分百负责的部分。搜索引擎判断一个页面是否可信时,会看它指向哪里——大量指向低质量站点的页面,很难被当作「有参考价值的资料页」。

二、把全站出站链接导出来

不用装昂贵的工具,一个小脚本就能把全站外链抓全。前提是你有站点地图(sitemap)或者能列出所有文章 URL:

#!/bin/bash
# 用法:./scan_outbound.sh urls.txt
while read -r url; do
  html=$(curl -sL --max-time 15 "$url")
  printf '%s' "$html" \
    | grep -oE 'href="https?://[^"]+"' \
    | sed 's/href="//;s/"$//' \
    | grep -vE 'zz1984[.]com' \
    | while read -r link; do
        echo -e "$url\t$link"
      done
done < urls.txt > outbound.tsv

要点在于 `grep -vE` 要把自己的域名排除掉,正则里用 `[.]` 而不是转义点号,避免 shell 转义歧义。跑完得到一张两列的 TSV:来源页、目标链接。

接着按域名聚合,看哪些域名出现得最多——这些就是最需要优先审计的:

cut -f2 outbound.tsv | awk -F/ '{print $3}' | sort | uniq -c | sort -rn | head -30

三、批量检查链接是否还活着

拿到链接列表后要做的是「状态检查」,不是「内容检查」。状态检查只需要发 HEAD 请求,比下载整个页面快得多:

#!/bin/bash
while read -r link; do
  code=$(curl -s -o /dev/null -w '%{http_code}' -L --max-time 10 \
         -A 'Mozilla/5.0 (compatible; LinkAudit/1.0)' "$link")
  echo -e "$code\t$link"
done < links.txt > status.tsv

结果要按状态码分成四类处理,每一类的含义完全不同:

  • 200:正常。但 200 不代表内容还在,停放页也是 200,需要第二步内容判断。
  • 301 / 302:检查最终落点是不是原站。如果跳到了完全无关的域名,视为失效。
  • 403 / 429:多半是对方防爬。这类不要直接判死,人工点开看一眼再决定。批量脚本最容易在这一类上误伤好链接。
  • 404 / 410:确实没了。404 处理成删除,410 表示对方已明确移除,同样删除或替换。

还有一个常被忽略的类型:域名已过期但服务器仍返回 200 的停放页。特征是页面标题里带「待售」「此域名可出售」「parked」之类,正文通常只有一段广告。判据可以这样写:

body=$(curl -sL --max-time 10 "$link")
printf '%s' "$body" | grep -qiE '域名.*(出售|转让)|domain.*(for sale|parked)|this domain is parked' \
  && echo "PARKED $link"

四、内容相关性:200 也可能不该留

链接还活着,不代表它值得留。第二层判断是内容是否还和你的页面主题相关。这一步无法全自动,但可以批量缩小范围:抓回目标页面的标题标签(<title>)和一级标题,和你的页面标题做一次肉眼比对。

实际操作中按三档处理就够了:

  • 强相关:同主题的技术博客、官方文档、开源项目主页。保留,而且最好确认链接文字准确描述了目标内容。
  • 弱相关:同类但不同领域,或内容已大幅改版。可以保留但加 `nofollow`,或者替换成更贴切的链接。
  • 不相关或已变质:原来的技术博客变成了博彩、贷款、下载站,或者原域名被别的业务接管。这类必须处理,优先删除或替换。

第三种情况在个人站里其实很常见。一个 2019 年的技术贴换了一个现在看起来还行的域名,几年后域名到期被抢注,变成导流页——这就是为什么审计要定期做,而不是一次性做。

五、四种处理手段,用哪个

发现一条有问题的外链,有四种处理方式。选择顺序从强到弱是:

一、替换。这是最好的处理。原链接死了,但那段话还需要一个出处,就找一个内容等价的新链接替上去。既能修复问题,又不损失页面的完整性。判断标准是「这段话少了引用还成不成立」,不成立就该替换。

二、删除。适合那些纯粹是「顺便提一句」的链接,删掉不影响语义。删的时候注意整句是否还通顺,别留下「可以参考这里」却没有链接的断句。

三、加 nofollow。适合内容仍需保留、但不想给权重的场景。写法是:

<a href="https://example.com/page" rel="nofollow noopener" target="_blank">示例</a>

注意 `nofollow` 只影响权重传递,不影响点击。它不该被当成「处理坏链接」的万能药——一条指向垃圾站的链接,加 nofollow 之后依然在告诉读者「这里值得一看」。真正变质的链接应该删,而不是打标签。

四、留 410 页面 / 保持不动。如果链接指向的页面确实存在但暂时不可访问,可以观察一两个月再说。频繁改动链接本身对页面也有成本。

把四种手段做成一张判定表会更省事:链接 404 且语义依赖它 → 替换;404 但只是顺带提及 → 删除;200 但内容变质 → 删除;200 且弱相关 → nofollow;200 且强相关 → 保留。

六、Disavow 该不该用

Disavow(拒绝链接工具)针对的是入站垃圾外链,不是出站链接。它对出站链接完全无效——这一点每年都有人在站长群里问,值得写清楚。

关于入站垃圾外链要不要 Disavow,目前的主流判断是:

  • 不用主动做。搜索引擎对「被动获得的低质量链接」有识别能力,绝大多数垃圾外链不会导致处罚。花时间做 Disavow 对排名的正向作用几乎没有。
  • 需要做的情况只有两种:一是收到人工处罚通知(手动操作),二是明显有组织的负面 SEO 攻击(短时间内大量锚文本堆砌指向同一关键词)。
  • 做的时候只提交被认定的那批域名,不要「宁可错杀」地把大量正常域名也加进去。误拒正常链接的损失远大于忽略几条垃圾链接。

换句话说,Disavow 是一个「收到通知后的应对工具」,不是一个「日常优化手段」。把精力放在出站链接审计上,收益更确定。

七、把审计变成月度例行

一次性审计做完,三个月后又会积累新的坏链。要让它持续有效,就得固化节奏。我的做法是把整个流程拆成三个可执行的动作,写在月度清单里:

  • 每月一次状态扫描:跑第二节和第三节的两个脚本,只看 404、410 和停放页。十分钟出结果。
  • 每季度一次内容抽检:按域名出现频次取前 20 个域名,人工点开看内容是否变质。这一步必须人工。
  • 每次发布新文章后:新写的文章里的外链在发布前就过一遍,别等积累到月度扫描才处理。

执行三个月后,可以把每次的结果存下来做趋势对比。一个健康的站点,坏链数量应该稳定在个位数;如果每次扫描都能扫出十几个新坏链,说明站点的外链策略本身需要调整,比如少链向个人博客、多链向官方文档和开源项目主页——后者的生命周期长得多。

八、小结

外链审计的价值常常被低估,因为它不像「发一篇新文章」那样有立即可见的产出。但它属于那种「做了没人夸、不做会慢慢积累」的基础工作。核心就三句话:定期把出站链接全量导出来扫一遍,按状态码和内容相关性分档,然后按「替换优先、删除其次、nofollow 最后」的顺序处理。至于 Disavow,除非收到人工处罚,否则不用碰。把这三件事变成月度习惯,比每年想起来做一次大扫除有效得多。

Last modification:November 4th, 2026 at 07:26 pm

Leave a Comment