IsaacZ 发表于 2025-1-14 01:37:44

通过修改 Nginx 配置文件修复失效链接的404指向


经过多次升级,点拨论坛的一些古早链接早已不可访问,曾经做过一个单独的404页面给点击这些失效链接的访问者以友好的提示:





以前我用的是宝塔自带的 404重定向功能,以为如下设置就能实现404的状态:



但实际上这个重定向使用的是301永久重定向方法,用 httpstatus.io 检查的结果是 301 转 200(文件存在),不是真正的 404:



当有大量失效链接都指向同一个200页面时,不可避免地对网站SEO产生损害:



使用 301 重定向将大量失效链接指向一个 200 状态码的页面会对 SEO 产生以下伤害:

[*]索引混乱:搜索引擎会索引大量重复内容。
[*]权重分散:原页面的权重被稀释,影响目标页面的排名。
[*]用户体验下降:用户点击失效链接时,看到与预期内容无关的页面。
[*]抓取预算浪费:搜索引擎浪费抓取预算在无效链接上。


要解决这个问题,就需要将所有失效链接的访问请求重定向到 404.html 的同时还能够返回404状态码,告诉搜索引擎此页面已经不存在。具体做法为:

进入宝塔文件管理,打开 /www/server/panel/vhost/nginx/ 目录下的 www.dianbo.org.conf 这个动态配置文件,在#HTTP_TO_HTTPS_END 后面加上以下代码:

<div>      # 自定义404页面配置(添加到其他位置)
    error_page 404 /404.html;
    location = /404.html {
      internal;
    }</div>




通过这样设置之后,所有的失效链接就都不再跳转,直接返回404了,同时还能显示我自定义的友好提示页面,完美!

static/image/hrline/line8.png



这样设置之后,我又想到另外一个失效链接密集的地方,就是10年前发布的大量网盘链接(迅雷快传、115等)、随着网盘本体的倒下都已经不可访问。这些链接曾经被我批量替换成 https://deadlink.dianbo.org/xxx 的格式,而二级域名 deadlink.dianbo.org 被我绑定到了一个单独的网站上,用以实现:每当用户点击了失效链接 https://deadlink.dianbo.org/xxx 的时候,都被重定向到 https://deadlink.dianbo.org/404.html。


同样,之前我用的是宝塔自带的 404重定向功能:




现在知道了它实际上把失效链接通过 301 转到了 200(文件存在),并没有返回 404,那就也需要通过修改配置文件的方法将所有失效链接的访问请求重定向到 404.html 的同时再返回404状态码,告诉搜索引擎此页面已经不存在。具体做法为:

找到 /www/server/panel/vhost/nginx/deadlink.dianbo.org.conf 这个动态配置文件,在#SSL-END 这一行后面加上以下代码:
# 将所有请求重定向到 404.html,并返回404状态码
error_page 404 /404.html;
location = /404.html {
    internal;
}

location / {
    try_files $uri $uri/ =404;
}

修改后检测结果理想,正确地返回了 404状态码:



同时,又能显示自定义的 404 页面,给访问者以友好提示:




完美!

static/image/hrline/4.gif.

总结:宝塔自带的重定向只适合用于更换主域名后的 301 重定向,不适合来做 404 重定向。


页: [1]
查看完整版本: 通过修改 Nginx 配置文件修复失效链接的404指向