站点做久了,总有些地址会失效:产品下架、栏目合并、文章改名。失效本身很正常,问题在于服务器返回什么状态码。如果该说“这里没有了”的地址偏偏返回 200,访客看到的是空页面,搜索蜘蛛却当成正常内容处理,信号就错位了。
404、410 和软 404 的区别
404 表示这个地址当前没有对应内容,但不是永久性结论;410 表示内容已永久移除,意图更明确;软 404 则是页面 HTTP 状态码返回 200,可正文里写着“抱歉,找不到该内容”,或者干脆是一个空模板。三者里,软 404 最容易被忽略,因为它从状态码上看一切正常。
软 404 通常从哪里冒出来
- CMS 把任何不存在的路径都套进统一模板,渲染出一个空壳页面;
- 站内搜索无结果时,页面仍以 200 返回,只是列表为空;
- 列表页被翻到超出范围的页码,仍然显示一个空列表;
- 带筛选参数的组合地址没有匹配内容,页面照常渲染;
- 内容删除后,只在正文里加一句“该内容已下线”,状态码却没有改动。
自查时该看什么
- 抽查一批已知失效地址,用命令行工具或浏览器开发者工具确认返回状态码,而不是只看页面长相。
- 从服务器日志里筛出高频 404 地址,判断它们是外链带来的、旧版遗留的,还是站内链接写错的。
- 检查站内搜索、筛选、分页这几类动态页面,在无结果时返回的是 404 还是 200。
- 看 404 页面本身是否可用:有没有返回首页或相关栏目的入口,状态码是否正确返回。
- 批量检查内链与导航,确认没有指向已经不存在的地址。
处理原则
内容彻底不要了、也没有替代页面,就让地址老老实实返回 404 或 410;只是换了地址,就做一次到新地址的跳转,并且尽量一步到位,不要再串第二跳。批量清理时可以先从日志里出现次数多、外链多的地址下手,收益更直接。
另一个常被忽略的点是:404 页面不要做成自动跳转回首页。页面一打开就跳走,用户按回退键会被弹回去,体验很差,也容易让大量失效地址被当成重定向处理。
状态码是给机器读的,页面文案是给人看的,两者要一致。页面说“没有”,状态码也应该说“没有”。
把它变成常规动作
不必每次上线都全站扫描,但可以在栏目调整、批量下线、改版之后做一次抽查,并在监控里留意 404 数量的异常抬升。发现异常就顺藤摸瓜,多半能找到一批失效内链或错误配置。这类工作不产生新内容,却能减少访客迷路,也少浪费一些抓取资源。