node.js 代码实现301跳转

之前专门有一篇博客介绍 nginx 设置不带www域名跳转带www域名上

为什么要这要做,可以从上面的博客得知原因.


后来还有一篇是介绍关于主域在搜索引擎中权重更高 ,

所以博客经过一段时间不带www域名跳转带www域名后,又相反的从带www跳转到不带www域名,只是因为主域权重更高,不想分流而已.


再后来还做了一件事,就是伪静态化,所以在我的博客就算翻页你也会看到url 是这样的 http://yijiebuyi.com/2.html

但是会出现一个问题,之前被搜索引擎收录的url跳转过来服务器找不到自然会报错.

所以博客的路由做了调整,兼容之前的老路由,同时支持新路由.


这样又导致一个问题,

就是一篇博客对应2个url,搜索引擎可能会全部抓取,最后更重要的是,搜索引擎对比内容发现一模一样,导致内容降权,自然不会有什么好的排名,这是最悲剧的,就是自己和自己的内容竞争,手足相残!


所以有了这篇,今天和大家介绍的是 node.js 实现代码级 301跳转,让2套路由统一,避免分权.

为什么要做301跳转? 这是搜索引擎认为最恰到的跳转,其他跳转搜索引擎会认为作弊嫌疑,具体内容请 google ,不会翻墙的请点击使用免费vpn


在博客启动页加一个方法:

app.get('/*', function(req, res, next) {
        if (req.url.length > 5 && req.url.indexOf('.html')<0) {
            url = ['http://', req.headers.host, req.url, '.html'].join('');
            res.redirect(301, url);
        } else
            next();
    });

这个方法类似一个过滤器,所有的url 请求都会被此方法过滤.

req.url.length > 5 这一句是为了避免拦截首页  这里的req.url=='/'
req.url.indexOf('.html')<0 此处判断链接是否包含有 .html 没有的话,就加上.html 然后进行 301跳转.

如果url已经包含有 .html 那么过滤器自动放行 next() 将会定位到指定的url 然后返回对应的html页面.


上面的方法同样适用于带www 和不带www 的 301跳转,稍做改动即可:

带www域名跳转到不带www域名:

app.get('/*', function (req, res, next) {  
  var haswww = req.headers.host.match(/^www\./)  
    , url = ['http://', req.headers.host.slice(4), req.url].join('');
  haswww ? res.redirect(301, url) : next();  
});


不带www域名跳转到带www域名:

app.get('/*', function (req, res, next) {  
  var haswww = req.headers.host.match(/^www\./)  
    , url = ['http://www.', req.headers.host, req.url].join('');
  haswww ? next() : res.redirect(301, url);  
});


回到顶部