去年 11 月,我闲着没事翻了翻百度搜索资源平台的后台,看到”死链提交”那个菜单旁边有个红色数字——37。
点进去一看,好家伙,37 条死链,全部指向一些我根本没印象的页面。赶紧在浏览器里打开其中一条,白屏,404。那一刻,后背一凉。
我之前一直不理解为什么有些页面明明收录了、排名也有了,突然就掉了。后来才知道,死链这东西,百度比你还敏感。它爬着爬着发现你网站有一堆打不开的链接,第一反应不是你粗心,而是”这个站是不是没人维护了?”
下面是我花了一整个周末排查死链、分析原因、批量修复的完整过程。以我自己的站 wujianzhan.com 为例,从发现到清零,每个步骤都写下来了。
第一步:先搞清楚死链在哪,别瞎猜
我当时以为死链就是”删了文章忘了删链接”那么简单。结果排查完发现,死链的来源五花八门。
死链接最常见的几种来源:
| 来源 | 典型场景 | 我的站出现了多少 |
|---|---|---|
| 删过的文章/页面 | 测试文章删了,但别处有链接指向它 | 11 条 |
| 改了固定链接 | 文章 URL 从 /old-slug 改成了 /new-slug,没做 301 | 8 条 |
| 分类/标签页 | 删了某个分类,但侧边栏还在链它 | 5 条 |
| 图片附件页面 | WordPress 默认会生成附件页,删了图片但附件页还在 | 7 条 |
| 外部链接失效 | 你引用了别人的文章,人家删了 | 3 条 |
| 插件生成的页面 | 某个插件卸载后留下了垃圾 URL | 3 条 |
加起来 37 条,一条不多一条不少。最让我崩溃的是那 8 条改了固定链接的——我明明记得自己改过,但当时偷懒没做 301 重定向。结果这些旧 URL 搜索引擎还在索引,用户点进去就是 404。
第二步:用 Screaming Frog 把全站死链翻个底朝天
百度站长工具会告诉你死链列表,但它只告诉你”百度发现了哪些死链”。问题是,百度没发现的死链呢?你不管了吗?
所以我用了 Screaming Frog——一个桌面端的网站爬虫工具。免费版能爬 500 个 URL,对我这个 200 多篇文章的站来说够用了。
用法很简单:下载安装,输入你的域名,点 Start。它就会像蜘蛛一样把你整个网站爬一遍。爬完之后,点”Response Codes” → 选”Client Error (4xx)”,所有 404 页面就列出来了。
Screaming Frog 给我的发现比百度平台多了 12 条。 其中有 5 条是图片附件页面,3 条是某个已卸载插件留下的 /wp-content/plugins/xxx/ 路径,4 条是我在文章里手工写的链接但打错了字。
百度平台没报这些,不是因为它们不存在,是因为百度蜘蛛还没来得及爬。如果不主动查,这些死链迟早会被百度发现,到时候又是一波掉排名。
操作小贴士: Screaming Frog 爬完之后,别只看 404。把 301 重定向、302 重定向也筛一遍。有些”重定向链”可能跳了两三次才到目标页面,这种”重定向链太长”也会影响爬虫效率。
第三步:分类处理,别每条死链都套同一个方案
把所有死链导出成 Excel 之后,我按类型分了四波,分别处理。
第一波:改了固定链接的 → 做 301 重定向
这是最高优先级的,因为旧 URL 可能还有外链和搜索流量。我用的是 WordPress 的 Redirection 插件,把旧 URL 一条条映射到新 URL。
比如我之前有篇文章 URL 从 /wordpress-speed-up-tips/ 改成了 /website-speed-optimization/,就在 Redirection 插件里加一条:
源 URL: /wordpress-speed-up-tips/
目标 URL: /website-speed-optimization/
插件会自动处理 301 跳转,不需要改 Nginx 配置。设置完之后,一定要在浏览器里实际访问一下旧 URL,确认能跳到新页面,而且要看一下跳转后的状态码是 200,不是又跳到一个 404。
第二波:删过的文章/测试页面 → 分情况处理
如果删掉的文章确实没价值、也没有外链,直接让 404 继续返回 404 就行。404 不是罪,搜索引擎也理解”有些页面就是删了”。
但如果删掉的文章被其他正常文章内链引用过,那就要把那些内链找出来,换成指向现有相关文章的链接。这个我用的是 Screaming Frog 的”Inlinks”功能——点一个死链 URL,看哪些页面链到了它,然后逐个修改。
第三波:图片附件页 → 直接禁用 WordPress 附件页
WordPress 默认会给每张上传的图片生成一个独立的附件页面,URL 形如 /your-post/image-name/。这些页面基本没有内容,只有一张图,对 SEO 来说是纯垃圾。
我加了一段代码到主题的 functions.php 里,让所有附件页直接 301 跳转到图片文件本身:
function redirect_attachment_to_file() {
if (is_attachment()) {
global $post;
if ($post && $post->post_parent) {
wp_redirect(get_permalink($post->post_parent), 301);
exit;
} else {
wp_redirect(home_url(), 301);
exit;
}
}
}
add_action('template_redirect', 'redirect_attachment_to_file');
第四波:外部链接失效 → 更新或删除
外链失效是最无奈的。我引用了别人的文章,人家删了,我也没办法。能找替代链接的就替换,找不到的就把超链接去掉,保留文字。
第四步:去百度站长平台提交死链,主动告诉百度”我修好了”
修完所有死链之后,回到百度搜索资源平台。先从”死链提交”里下载之前那份死链列表,然后逐一验证。
验证方法: 在浏览器里打开每条死链,确认:
- 如果做了 301 → 跳转成功,且目标页面状态码 200
- 如果删了但没价值 → 页面返回 404 或 410(Gone)
- 404 页面本身要写清楚”这个页面不存在了”,并给出导航链接,别让用户看到白屏
验证完之后,分两种情况提交:
死链已经修复的(做了 301 的): 不用提交死链,百度下次抓取时会自动更新。但可以手动去”普通收录”里提交新的 URL,加快百度更新索引。
死链确实不存在的(页面已删除): 在百度站长平台”死链提交”里,上传一个包含所有死链 URL 的 TXT 文件(每行一条 URL),然后点提交。百度收到后会在下次抓取时验证,确认确实是 404/410 之后,从索引中删除。
我自己提交之后,大概过了一周,原来的 37 条死链全部从百度索引里清掉了。
死链预防:别等出事了再查
折腾完这一轮,我现在养成了几个习惯:
- 每次改文章固定链接,立刻做 301。 这个没什么好说的,偷懒一时爽,排错火葬场。
- 每月跑一次 Screaming Frog。 花十分钟,爬全站,看有没有新增的 404。比等百度平台通知强一万倍。
- 删文章之前,先查内链。 Screaming Frog 的 Inlinks 功能,或者 WordPress 的 Broken Link Checker 插件都行。删之前看一眼,有没有其他文章链着它。
- 在百度站长平台开”死链通知”。 百度现在支持站内信通知死链变化,开了之后有新增死链会主动推送,不用你自己天天去看。
死链不是大问题,但死链多了、长期不处理,在百度眼里就是”垃圾站”的信号。你辛辛苦苦写内容、做外链,最后被几十条死链拖了后腿,你说冤不冤?
首发于 wujianzhan.com。
