死链不处理,权重白送给别人
你有没有试过:内容写得挺用心,流量却悄悄掉了?我上个月就栽在这上面——辛辛苦苦优化了两个月的栏目页,排名稳稳在前三,结果某天突然掉到二十开外。后台一翻,百度站长平台弹出一条红字:“检测到大量死链,影响站点质量评估”。点进去一看,全是去年下架商品留下的链接,没人管,蜘蛛天天撞门,撞多了,搜索引擎真以为我家网站“没人值守”。
死链不是小毛病。它不像错别字那样只碍眼,而是直接让搜索引擎怀疑:“这站还活着吗?链接都打不开,内容靠谱吗?”今天不讲大道理,就带你用最实在的办法,把藏得最深的死链揪出来,再一口气批量清掉。
为什么你的死链检测工具总漏掉关键链接?
Xenu、Screaming Frog这些工具你肯定用过。跑完报告,密密麻麻列一堆404,但你手动点开几个,又发现不少“漏网之鱼”——明明打不开,工具却没报。问题不在工具不行,而在它只看“能走到的地方”。
它爬的是你网站内部能连通的路径。可死链还有另外两种藏法:一是别人外链指向你已删除的页面;二是JS动态生成的URL,工具压根没执行JS,自然看不到;三是旧sitemap里还留着的地址,早被删光了,但文件里还躺着。
举个真事:帮一个做母婴电商的客户做排查,Screaming Frog扫出187条死链。我顺手点了下百度站长平台的“死链查询”,跳出2300多条。细看才发现,其中近一半是育儿博主、社区论坛从2021年起引用的老活动页,链接还在,页面早没了。这些外链,站内根本没跳转入口,工具当然找不到。
所以,单靠一个数据源等于蒙眼找钉子。至少盯三个地方:
- 百度/Google站长平台里的“用户真实访问产生的404”
- 你自己服务器的访问日志(蜘蛛和用户撞墙的原始记录)
- 爬虫工具跑出来的“站内可达路径中的404”
三处一对,才能看清哪些是真死链,哪些只是暂时打不开。
批量提交死链的3个方法,哪个最快见效?
方法一:站长平台手动粘贴提交
进百度资源平台 → 左侧菜单点“死链提交” → 把整理好的URL一行一个粘进去。单次最多3000条,适合小站或紧急补救。注意:提交前务必确认每个链接返回的是404或410,如果页面还能打开(比如误配了重定向),百度会直接忽略。
方法二:用sitemap.xml“温柔告知”
在你的sitemap.xml里加几行,把死链也列进去,像这样:
<url>
<loc>https://example.com/out-of-stock-product</loc>
<priority>0</priority>
</url>
然后重新提交sitemap。百度不会立刻删,但会标记这些URL为“低优先级”,后续逐步清理索引。这个方法不需要改服务器配置,适合懂一点XML结构的人。
方法三:Robots.txt + 301跳转组合拳
把所有要下线的页面统一放到一个目录,比如/archived/,然后在robots.txt里加上:
Disallow: /archived/
同时,对每个死链做301跳转,目标不是首页,而是最相关的替代页面——老教程跳新教程,旧产品跳同类新品。这样既保住了权重流转,又不让蜘蛛反复碰壁。
真实情况是:我帮一个知识付费站先用了方法一,提交5000条,两周后只剩1200条被处理。后来改用方法二+方法三同步推进,三周内死链数从4800压到不到300。节奏明显快了。
如何用服务器日志精准定位死链来源?
很多人不知道,你服务器每天记下的访问日志,就是最真实的“死链发生现场”。用户点错了、外链失效了、蜘蛛迷路了……全在里面。
用GoAccess或AWStats打开日志,筛选状态码为404的请求,再按Referer字段排序,你会看到:
- 某个知乎回答链接指向你三年前删掉的专题页
- 某个微信公众号文章里的URL,现在返回404
- 甚至是你自己旧文章里写的“点击查看案例”,案例页早就没了
操作其实很简单:
- 登录服务器,找到
access.log(Nginx)或access_log(Apache) - 运行这条命令(复制粘贴就能用):
grep " 404 " access.log | awk '{print $7, $11}' | sort | uniq -c | sort -rn | head -50
它会输出访问频次最高的50个404地址,以及它们的来源页(Referer)。
3. 逐个看:如果是外链,考虑是否联系对方更新;如果是你自己文章里的内链,马上回去改掉。
删除页面时,一个细节决定权重生死
删页面不是删文件就完了。你直接删,服务器默认返回404——这相当于跟搜索引擎说:“我不知道,你看着办。” 它可能缓存很久,也可能反复来试。
更明确的做法是分两种情况处理:
- 永久下线:返回
410 Gone。百度识别到这个状态码,会更快从索引中剔除,实测响应时间比404缩短不少。 - 内容迁移:必须用301跳转,且目标页要高度相关。别把100个不同类目的死链全跳首页,百度看得见,也会反感。
还有一个实操细节:批量设410,别手工一条条配。Nginx用户可以在配置里加一段:
location ~ ^/old-article/ {
return 410;
}
或者用.htaccess(Apache):
Redirect 410 /old-page.html
脚本化处理,省事还不容易出错。
死链监控的自动化方案,我踩过的坑
想自动扫,又怕搞崩服务器?我最早设了个cron任务,每周全站爬一遍,结果每次运行,网站卡顿半小时。后来改成“只查重点”:
- 每天只检查当天被访问过的URL(从日志里取)
- 加上流量Top 500的页面(从统计后台导出)
- 用curl批量测状态码,404就记下来,自动推送到待处理清单
但真上手才发现两个坑:
- 百度站长平台API有频率限制:每小时最多提交3000条,超了会临时封接口。脚本里得加个
sleep 2控制节奏。 - 脚本自己也会“制造”死链——比如硬编码了一个测试URL,结果上线后被删了,脚本一跑就报错。所以必须包上try-catch,失败就跳过,记日志,别让它中断整个流程。
一个今天就能执行的步骤
现在,立刻,关掉其他网页,打开百度资源平台。
→ 点左侧“搜索服务” → “死链查询” → 切换到“最近30天” → 全选列表 → 复制所有URL,粘贴进一个叫dead-from-baidu.txt的文本文件里。
接着,登录你的服务器(或宝塔/AMH等面板),找到访问日志,运行这行命令:
grep " 404 " access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -200 > dead-from-log.txt
把两个txt文件合并去重,得到一份“真实待处理清单”。
→ 用Screaming Frog再跑一次(设置只检查这份清单里的URL),导出最新状态。
→ 把仍返回404的URL挑出来,对应到文件或路由:静态页直接删并设410;动态页在Nginx/Apache里加规则;外链则列个表,下周发邮件给合作方更新。
最后,打开百度资源平台“死链提交”页,把这份清单一次性粘进去。
不用等明天,就现在。死链不会因为你读完这篇文章才开始伤害你的排名。