网站收录

站内根本没有这个地址却被收录:404、410 与软 404 的核对顺序

索引里出现站内并不存在的地址,多半是服务端把不存在的页面当成了正常页面返回。本文按状态码确认、软 404 排查、兜底路由检查、残留入口清理的顺序,说明 404 与 410 该怎么用,以及为什么先改返回码再提交移除。

网站收录

站内根本没有这个地址却被收录:404、410 与软 404 的核对顺序

排查收录问题时,常遇到一种情况:索引里能看到某个地址,但站内根本没有这个页面,点开要么是 404,要么跳回首页,要么显示一片空白。这类地址出现的原因不止一种,处理方式也不一样。如果一上来就提交删除,往往过一段时间又会冒出来。下面按核对顺序梳理一遍。

第一步:确认这个地址返回的真实状态码

索引里的记录和实际返回状态可能不一致,先别急着下结论。用命令行或浏览器开发者工具看响应头里的状态码,而不是只看页面长得像不像 404。

  • 返回 404 或 410:服务器已经明确告知页面不存在,属于正常处理方式。
  • 返回 200 但内容为空或只剩框架:这类“软 404”最容易被当成有效页面收录。
  • 返回 301/302 跳到首页或列表页:搜索引擎会逐步把原地址替换成跳转目标,但如果跳转目标本身质量不高,原地址也可能保留。
  • 返回 5xx 或超时:这是临时状态,通常不会导致收录,但会让抓取计划被推迟。

软 404 为什么会被收录

搜索引擎判断页面是否存在,主要依据状态码,而不是页面上的文字。如果一个不存在的地址仍然返回 200,页面上写着“抱歉,没有找到内容”,对爬虫来说这依然是一个正常页面,只是内容很薄。薄内容多了,既占用抓取资源,也会拉低整站的质量评价。

常见的软 404 场景包括:

  • 自定义错误页直接返回 200。
  • 单页应用把所有未匹配路由都渲染成空壳页,状态码却是 200。
  • 商品下架或参数错误后,页面保留模板但没有任何数据。
  • 站内搜索无结果时,仍然输出完整的页面结构。
判断标准很简单:内容是不是真的不存在?如果是,就应该让状态码也表达“不存在”,而不是只在页面文案里提示。

框架和路由的兜底返回容易被忽略

有些站点为了体验一致,把任何未匹配的路径都交给同一个入口文件处理,再由前端决定展示什么。这种写法在浏览器里看不出问题,但爬虫拿到的是一个状态码 200 的空壳。核对时可以随机造几个明显不存在的地址,比如在路径后加一串随机字符,看返回码是否仍然是 200。

索引里的地址也可能来自站外

并非所有被收录的地址都由本站生成。常见来源有:

  • 历史遗留的旧 URL,改版后既没做跳转,也没返回 404。
  • 外部网站抓取了带参数的链接并长期保留。
  • 别人拼错或猜测的地址,被爬虫顺着外链尝试访问。
  • sitemap 或内链里残留的失效地址。

如果服务器对任意地址都返回 200,就等于主动告诉爬虫“这个地址是存在的”,收录自然会发生。

建议的处理顺序

  1. 统计被收录但站内不存在的地址,按返回码分组,先处理返回 200 的那一批。
  2. 修正服务端逻辑,让不存在的地址返回 404,已彻底移除的地址建议返回 410。
  3. 取消首页或列表页的兜底跳转。跳转会让状态变得模糊,不利于索引清理。
  4. 清理站内残留入口:sitemap、内链、导航、面包屑里指向失效地址的链接。
  5. 确认返回码正确之后,再提交移除。顺序反了容易反复出现。
  6. 观察两到四周,看索引中的地址数量是否逐步下降,不必每天重复提交。

几个常见误区

  • 用 robots.txt 屏蔽代替 404:robots 只阻止抓取,不会把已收录的地址从索引里拿掉,而且屏蔽之后爬虫也读不到 noindex 指令。
  • 给错误页加 noindex 但不改状态码:短期可行,但页面仍然占用抓取资源,长期还是应该返回正确状态码。
  • 把 404 全部改成 301 到首页:大量地址跳到首页会被视为软 404,效果和空壳页接近。
  • 频繁提交删除:状态码没改之前,提交只是临时清掉展示,之后可能再次出现。

结论可以简化成一句话:让状态码如实反映页面是否存在,再谈收录和清理。收录状态是抓取、索引、展示三个环节共同作用的结果,不存在的地址被收录,多数时候不是搜索引擎判断错了,而是服务器一直在说“我这里有一个正常页面”。