动态页面返回自定义404错误页时,确认可见内容的关键不是看浏览器里显示了什么,而是看服务器返回的HTTP状态码和HTML正文是否同时正确。只返回200状态码的“404页面”对搜索引擎来说是一个正常页面,不是错误页;只返回404状态码但正文为空,用户看到的就是一片空白。两者必须同时成立,才算一个可用的自定义404错误页。
动态站点常见的做法是:请求一个不存在的地址,程序捕获异常后渲染404模板,但响应头仍然是200。这种页面在浏览器里看起来正常,搜索引擎却会把它当作有效内容收录。确认方法是查看响应头中的状态码,而不是只看页面外观。
curl -I https://example.com/not-exist,观察第一行是否包含404。假设某站点用动态路由处理文章页,地址形如/post/123。当123不存在时,程序渲染了一个“内容不存在”的模板。排查时发现:页面能看到提示文字,但状态码是200。这说明可见内容存在,但语义错误。
修正步骤可以这样执行:
常见错误是只改模板文字,不改状态码;或者用前端路由把404渲染成200,服务器完全不知情。动态页面尤其容易出现后者,因为内容由客户端脚本生成,服务器只返回一个空壳。
确认可见内容时,可以从以下几个方面逐项核对:
如果页面内容由JavaScript在客户端生成,服务器返回的初始HTML可能没有可见文字。这时要区分两种情况:一种是服务器返回404且正文为空,用户看到空白;另一种是服务器返回200,脚本再渲染出提示。后者对搜索引擎和部分抓取环境并不友好。
更稳妥的做法是让服务器直接返回404状态码,并在初始HTML中放入提示文字。这样即使脚本没有执行,可见内容仍然存在。判断结果时,以服务器返回的原始响应为准,而不是以脚本执行后的画面为准。
下一步可以直接选一个当前不存在的动态地址,分别用浏览器网络面板和命令行请求一次,记录状态码与正文,再决定是改状态码、改模板,还是两者都改。