自定义404错误页 - 动态页面怎样确认可见内容

📍 WDQWDWQD987AAAAA:216.73.217.14
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /669f6a784829.html
📄

自定义404错误页 - 动态页面怎样确认可见内容

动态页面返回自定义404错误页时,确认可见内容的关键不是看浏览器里显示了什么,而是看服务器返回的HTTP状态码和HTML正文是否同时正确。只返回200状态码的“404页面”对搜索引擎来说是一个正常页面,不是错误页;只返回404状态码但正文为空,用户看到的就是一片空白。两者必须同时成立,才算一个可用的自定义404错误页。

先看状态码,再看正文

动态站点常见的做法是:请求一个不存在的地址,程序捕获异常后渲染404模板,但响应头仍然是200。这种页面在浏览器里看起来正常,搜索引擎却会把它当作有效内容收录。确认方法是查看响应头中的状态码,而不是只看页面外观。

假设例子:一个动态路由的排查过程

假设某站点用动态路由处理文章页,地址形如/post/123。当123不存在时,程序渲染了一个“内容不存在”的模板。排查时发现:页面能看到提示文字,但状态码是200。这说明可见内容存在,但语义错误。

修正步骤可以这样执行:

  1. 在渲染404模板之前,先设置响应状态码为404,再输出HTML。
  2. 确认模板中不包含指向不存在内容的链接,也不自动跳转到首页。
  3. 重新请求一个不存在的地址,检查状态码与页面文字是否同时正确。
  4. 再请求一个真实存在的地址,确认它仍然返回200,避免误伤正常页面。

常见错误是只改模板文字,不改状态码;或者用前端路由把404渲染成200,服务器完全不知情。动态页面尤其容易出现后者,因为内容由客户端脚本生成,服务器只返回一个空壳。

可见内容的检查项

确认可见内容时,可以从以下几个方面逐项核对:

动态渲染带来的额外判断

如果页面内容由JavaScript在客户端生成,服务器返回的初始HTML可能没有可见文字。这时要区分两种情况:一种是服务器返回404且正文为空,用户看到空白;另一种是服务器返回200,脚本再渲染出提示。后者对搜索引擎和部分抓取环境并不友好。

更稳妥的做法是让服务器直接返回404状态码,并在初始HTML中放入提示文字。这样即使脚本没有执行,可见内容仍然存在。判断结果时,以服务器返回的原始响应为准,而不是以脚本执行后的画面为准。

下一步可以直接选一个当前不存在的动态地址,分别用浏览器网络面板和命令行请求一次,记录状态码与正文,再决定是改状态码、改模板,还是两者都改。

图1 图2

nginx