网站死链怎么处理?检测、404与提交的完整闭环

来源:互联网 时间:2026-09-20

死链就是点开返回404、或者彻底打不开的页面。一个站跑个一年半载,删文章、改路径、换程序,死链悄悄攒下一堆。死链多了,爬虫爬到一半撞墙,抓取预算浪费在无效页面上,好页面反而没被好好抓。处理死链要形成“检测—404—提交”的闭环,下面一步步来,缺一环都不算做完。

一、检测:先把死链全找出来

现象:站长自己只逛首页和几篇热门文,根本不知道深处一堆404。死链往往藏在老栏目、旧专题、被删的商品页、改版后遗留的旧URL里,肉眼翻不完。

原因:内容迭代时没有同步清理链接,或者改版后旧URL失效但内链还指向它,日积月累就成了一窝死链。

做法:用站点地图配合请求把全站URL扫一遍,逐个看返回码。下面这段把你的页面清单读进来,依次请求并打印非200的地址,跑完就得到一份死链清单,按这份清单处理即可。

# 读取页面清单,逐个请求并打印非200的地址,产出死链清单
import urllib.request
from urllib.error import HTTPError, URLError

URLS = [ # 改成你的 sitemap 解析结果或页面列表
"https://www.example.com/",
"https://www.example.com/old/2019-post.html",
"https://www.example.com/product/discount.html",
]

for u in URLS:
try:
code = urllib.request.urlopen(
urllib.request.Request(u, headers={"User-Agent": "Mozilla/5.0"}), timeout=10
).getcode()
except HTTPError as e:
code = e.code
except URLError:
code = "连接异常"
if code != 200:
print("死链:", u, "返回", code)

跑完看输出的非200清单,按返回码分类:404的是页面被删、500或502的是服务器问题、301的是该并的没并。这份清单就是下一步的处理依据,别看完就关,要逐条消化。

二、404页:让用户和爬虫都看懂

现象:点开死链直接白屏,或悄悄跳回首页,用户懵、爬虫也懵,还以为页面正常。

原因:没有规范的404页面,或者404被错误地设成返回200(软404),爬虫以为这是个正常页反复抓,死链永远清不掉。

做法:做一个真正的404页:返回码必须是404,页面上给搜索框、热门栏目、返回首页的入口。确认服务器对不存在的URL返回404而不是200。下面这段验证:给几个已知死链地址,打出返回码,确认都是404而非200。

# 验证死链是否真的返回404(而非软404的200)
import urllib.request
from urllib.error import HTTPError, URLError

DEAD = [ # 改成你确认已删除的地址
"https://www.example.com/old/2019-post.html",
"https://www.example.com/product/discount.html",
]
for u in DEAD:
try:
code = urllib.request.urlopen(
urllib.request.Request(u, headers={"User-Agent": "Mozilla/5.0"}), timeout=10
).getcode()
except HTTPError as e:
code = e.code
except URLError:
code = "连接异常"
print(u, "=>", code, "OK" if code == 404 else "需检查")

跑完确认死链返回码是404。如果发现返回200,说明服务器配成了软404,要去改——比如Nginx里对不存在路径兜底返回了200页面,死链会被当正常页反复收录,永远清不干净。

三、提交:把死链清单交给搜索引擎

现象:死链清了,但搜索引擎还记着旧URL,隔三差五来抓,浪费抓取预算,好页面反而排不上队。

原因:搜索引擎的索引里有旧记录,你不主动告诉它,它会自己慢慢发现,过程很慢还占预算,期间死链一直在消耗抓取配额。

做法:把死链清单整理成txt或xml,在百度搜索资源平台的“死链提交”里上传。平台提供死链提交工具,提交后旧URL会逐步从索引里清掉。下面这段把死链清单写成 deadlinks.txt,一行一个URL,直接上传用。

# 把死链清单写成 deadlinks.txt,一行一个URL,用于平台死链提交

dead = [

"https://www.example.com/old/2019-post.html",

"https://www.example.com/product/discount.html",

]

with open("deadlinks.txt", "w", encoding="utf-8") as f:

f.write("\n".join(dead) + "\n")

print("deadlinks.txt 已生成,共", len(dead), "条")

跑完得到 deadlinks.txt,上传到平台死链提交入口。提交后一周回来看处理进度,已处理的会标记为完成,未处理的再排查是不是还有内链指向它。

四、闭环:改版必做链接映射

现象:每次改版都新生成一批死链,陷入“清—生—清”的死循环,永远清不完。

原因:改版只管新结构,不管旧URL的去向,旧链没人接,自然批量变死链。

做法:改版时做一张“旧URL到新URL”映射表,能合并的用301跳过去(见网站301跳转那篇),不能保留的进死链清单提交。把“改版先出映射表”写进流程,死链才不会越积越多,闭环才算真正合上。

检测、规范404、提交平台、改版映射,四步连起来才是死链处理的完整闭环,只做前两步等于白做。

相关阅读:

《站里死链越积越多?不处理会拖累整站的抓取》

《网站内链怎么优化?锚文本、层级与权重传导的实操》

《网站301跳转怎么做?配置方式与权重传递要点》

相关文章

A5创业网 版权所有

返回顶部