软 404:页面活着,收录死了

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

上面那篇说 404 要从日志里挖,这一篇说一个日志挖不出来的更阴险的坑:软 404。它的定义 Google 官方写得很清楚——一个 URL 返回的是 200 成功状态码,但页面内容却在告诉用户“这个页面不存在”,有时甚至是没有主内容的空页面。从 HTTP 协议看它一切正常,从内容看它已经死了。

软 404 的常见诱因官方也列了:缺少服务端包含文件、数据库连接中断后输出了空壳模板、站内搜索无结果页、关键 JS 文件没加载出来。危害有两层:一是用户点进来看到的是错误提示,体验被坑;二是搜索引擎的算法识别出这是错误页后把它从索引剔除,收录数默默缩水,而且这类 URL 还会被反复抓取,白白消耗抓取预算——Google 的抓取预算文档把“消除 soft 404 错误”列为正式的最佳实践条目。

// 诱因一:数据库断连后输出空壳页
// 错误做法:异常被吞掉,模板照常渲染,返回 200
// 正确做法:明确返回 503,让蜘蛛知道现在不可用
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$db = new mysqli("localhost", "user", "pass", "blog");
} catch (mysqli_sql_exception $e) {
http_response_code(503);
header("Retry-After: 3600");
exit("service unavailable");
}

第二类高发区是站内搜索无结果页和标签空页。用户搜了个不存在的词,程序返回一个“抱歉没有找到”的页面,状态码却是 200——这就是教科书级的软 404。修法很简单:判定无结果时老实返回 404。

// WordPress 主题 search.php 顶部加一句
<?php if ( ! have_posts() ) { http_response_code(404); } ?>

# 自定义 404 页是给用户看的,状态码必须是 404
# nginx 里确保:
error_page 404 /404.html;

怎么找自己站上的软 404?两个渠道交叉:服务端看 Google Search Console 的“网页索引编制”报告,软 404 会单独列出,百度资源平台的对应问题是“页面低质/空短”;客户端用网址检查工具的“测试实际网址”,看 Google 渲染出来的页面是不是空白或报错——有些页面源码正常但 JS 依赖的资源被 robots.txt 屏蔽了,渲染出来就是空页,同样会被判成软 404。

# 服务器侧自查:抓取量大但疑似空内容的目标 URL
grep "Googlebot" /var/log/nginx/access.log \
| awk '$9 == 200 {print $7}' | sort | uniq -c | sort -rn \
| head -30 > crawled_200.txt
# 对照业务人工抽查:搜索页、标签页、翻页页重点看

# 验证状态码是否已修正
curl -sI "https://www.你的网址.com/?s=不存在的词" | head -1
# 期望输出:HTTP/1.1 404 Not Found

处置结论就是官方给的三分支:内容没了,回 404 或 410;内容搬家了,301 到新地址;内容明明还在却被误判,去查渲染——通常是关键资源被屏蔽、页面过慢或内容太薄。修完在 Search Console 里点“验证修正情况”,Google 会重新检查这批 URL。软 404 这个坑的隐蔽性在于站长自己访问永远看不出来,因为它对浏览器一切正常,只有搜索平台报告和渲染检查能照出原形。

相关阅读:软 404 比 404 更隐蔽,也更该进例行排查。《SEO 自动化总清单:日、周、月、季各该跑什么》把收录质量类检查归入每周组,总纲收藏一张,巡检不漏项。

相关文章

A5创业网 版权所有

返回顶部