404 不是错误,是正常状态:页面确实不存在,就该返回 404。真正伤害站点的是软 404——页面已删除却返回 200 并显示「内容不存在」,以及把所有死链都跳回首页。前者让爬虫反复抓空页,后者让权重全堆在首页。
三种状态的区别
- 200:页面正常
- 404:页面不存在(可用,但不要滥用)
- 410:页面已永久删除(比 404 更明确,爬虫放弃更快)
软 404 是第四种:HTTP 状态 200,但内容是「抱歉,页面不存在」。爬虫会把它当正常页面收录,浪费抓取预算。
删除页面的正确做法
内容确实不要了:返回 410,或者 301 到最相关的新页面。前者干脆,后者能留住一点权重。
不要 301 到首页。搜索引擎把「全站死链跳首页」视为软 404 的一种,而且用户点进来发现不是他要的,会立刻退出。
合并页面的做法
两篇内容讲同一件事,合成一篇,旧地址 301 到新地址。合并时把旧页面的独有信息带过去,别只做跳转。
临时下线
维护、改版期间临时不可用:返回 503 并带 Retry-After,不要用 404,也不要让页面空着返回 200。
404 页面本身要有用
最好的 404 页给三条路:回首页、看服务、搜关键词。加上一句人话,比「页面不存在」友善得多。
定期查死链
内链、外链、图片、脚本都可能失效。每月跑一次全站链接检查,比出事后再查省事。内链维护见内链结构。
三种自动检查
死链靠人工点不现实,三种检查可以自动化:
- 构建时校验:生成后扫描所有内链,比对实际文件(本项目每次构建都会做,报「死链」就是这一步)
- 抓取时校验:用爬虫工具定期跑一遍全站,输出 404 清单
- 访问时校验:读服务器日志里的 404,按出现次数排序
第三种最接近真实:它反映的是用户与外部链接实际访问了什么,而不是你以为的站内结构。
三种都做的话,频率可以分别是:每次发布、每月、每周。