网站建设

SEO分享:彻底禁止搜索引擎抓取/收录动态页面或指定路径的方法

Jager · 6月1日 · 2015年 · · · 11560次已读

最近张戈博客收录出现异常,原因并不明朗。我个人猜测存在如下几个直接原因:

  • 更换主题,折腾时带来过多错误页面或间歇性访问错误;
  • 直接线上折腾 Nginx 缓存和缩略图,可能导致间歇性大姨妈;
  • 新发文章瞬间被转载,甚至是整站被采集,可能导致“降权”;
  • 百度居然开始收录动态页面,而且还在持续抓取动态页面。

对于前三个,已发生的已无法改变,要发生的也无法阻止。对于转载和采集,我也只能在 Nginx 加入 UA 黑名单和防盗链机制,略微阻碍一下了,但是实际起不到彻底禁止作用,毕竟整个天朝互联网大环境就是这样一个不好的风气,很多人都不愿意花时间、用心写文章,喜欢不劳而获的转载甚至是篡改抄袭。

对于第四点,真是忍无可忍。我很想对百度说,我忍你很久了。明明 robots 里面加入了禁止抓取这些动态地址和某些路径,但是蜘蛛依然每天抓取,而且还收录了!收录也没事,关键收录了动态地址居然不收录静态地址了??这是要闹咋样啊?

案例①:

SEO分享:彻底禁止搜索引擎抓取/收录动态页面或指定路径的方法

案例②:

SEO分享:彻底禁止搜索引擎抓取/收录动态页面或指定路径的方法

案例③:
SEO分享:彻底禁止搜索引擎抓取/收录动态页面或指定路径的方法

以上案例中的地址,我通过百度站长平台的 robots 检验结果都是被禁封的,真不知道百度怎么想的:

SEO分享:彻底禁止搜索引擎抓取/收录动态页面或指定路径的方法

所以,我决定用极端手段,彻底禁止这些不听话的蜘蛛抓取那些我不想被收录的页面!robots 协议显然还是太温柔了!下面看张戈怎么放大招吧!

一、Nginx 规则

张戈博客用的是 Nginx,所以直接在 server  中新增如下规则即可:

#################################################
#   禁止蜘蛛抓取动态或指定页面规则 By 张戈博客       #
#   原文地址:https://zhang.ge/5043.html       #
#   申    明:转载请尊重版权,保留出处,谢谢合作!     #
#################################################

server
    {
    listen 80;
    server_name zhang.ge;
    index index.html index.htm index.php default.html default.htm default.php;
    root  /home/wwwroot/zhang.ge;
    #### 新增规则【开始】 ####
    #初始化变量为空
    set $deny_spider "";
    #如果请求地址中含有需要禁止抓取关键词时,将变量设置为 y:
    if ($request_uri  ~* "\?replytocom=(\d+)|\?p=(\d+)|/feed|/date|/wp-admin|comment-page-(\d+)|/go") {
         set $deny_spider 'y';
    }
    #如果抓取的 UA 中含有 spider 或 bot 时,继续为变量赋值(通过累加赋值间接实现 nginx 的多重条件判断)
    if ($http_user_agent ~* "spider|bot") {
     set $deny_spider "${deny_spider}es";
    }
    #当满足以上 2 个条件时,则返回 404,符合搜索引擎死链标准
     if ($deny_spider = 'yes') {
         return 403; #如果是删除已收录的,则可以返回 404
         break;
     }
     #### 新增规则【结束】 ####
#以下规则略...

Ps:就是将上述代码中“新增规则【开始】”到“新增规则【结束】”内容添加到我们网站的 Nginx 配置-- server 模块 中的 root 指令之后即可。

二、 Apache 规则

Apache 测试了半天总是 500 错误,暂时先放弃了,有时间再来调整!

我自己测试写的规则如下,感兴趣的朋友可以自行测试看看,也许是我环境的问题。

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (^$|spider|bot) [NC]
RewriteCond %{REQUEST_URI} (/\?replytocom=(\d+)|\?p=(\d+)|\/feed|\/date|\/wp-admin|wp-includes|\/go|comment-page-(\d+)) [NC]
RewriteRule ^(.*)$ - [F]

Ps:大概思路和 Nginx 一致,既匹配了蜘蛛 UA,又匹配了禁止关键词的抓取,直接返回 403(如何返回 404,有知道的朋友请留言告知下,测试成功的朋友也敬请分享一下代码,我实在没时间折腾了。)

三、PHP 代码版

/**
* PHP 比 robots 更彻底地禁止蜘蛛抓取指定路径代码 By 张戈博客
* 原文地址:https://zhang.ge/5043.html
* 申   明:原创代码,转载请注保留出处,谢谢合作!
* 使用说明:将一下代码添加到主题目录的 functions.php 当中即可。
*/
ob_start("Deny_Spider_Advanced");
function Deny_Spider_Advanced() {
    $UA = $_SERVER['HTTP_USER_AGENT'];
    $Request_uri = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
    $Spider_UA  = '/(spider|bot|)/i'; //定义需要禁止的蜘蛛 UA,一般是 spider 和 bot
    //禁止蜘蛛抓取的路径,可以参考自己的 robots 内容,每个关键词用分隔符隔开,需注意特殊字符的转义
    $Deny_path  = '/\?replytocom=(\d+)|\?p=(\d+)|\/feed|\/date|\/wp-admin|wp-includes|\/go|comment-page-(\d+)/i';
    //如果检测到 UA 为空,可能是采集行为
    if(!$UA) {
        header("Content-type: text/html; charset=utf-8");
        wp_die('请勿采集本站,因为采集的站长木有小 JJ!');
    } else {
        //如果发现是蜘蛛,并且抓取路径匹配到了禁止抓取关键词则返回 404
        if(preg_match_all($Spider_UA,$UA) && preg_match_all($Deny_path,$Request_uri)) {
             //header('HTTP/1.1 404 Not Found');  
             //header("status: 404 Not Found");       
             header('HTTP/1.1 403 Forbidden'); //可选择返回 404 或者 403(有朋友说内链 404 对 SEO 不太友好)
             header("status: 403 Forbidden");
              
              
        }
    }
}

使用很简单,将上述 PHP 代码添加到主题目录下放 functions.php 当中即可。

四、测试效果

测试效果很简单,直接利用百度站长平台的抓取诊断工具即可:

SEO分享:彻底禁止搜索引擎抓取/收录动态页面或指定路径的方法

 

点开看看可以发现真的是返回 404:

SEO分享:彻底禁止搜索引擎抓取/收录动态页面或指定路径的方法

最后,结合张戈博客之前分享的《SEO 技巧:Shell 脚本自动提交网站 404 死链到搜索引擎》即可将这些无用的收录全部删除:

SEO分享:彻底禁止搜索引擎抓取/收录动态页面或指定路径的方法

有朋友说我这个是黑帽手法,用户可以访问,而搜索引擎却 404,很适合淘宝客网站的商品外链。是什么手法我不清楚,我只知道实用就好!特别是张戈博客那些外链,都是用/go?url=这个路径来跳转的,现在这样处理后,就算搜索引擎不遵循 robots 硬是要抓取,就只能抓到 404 了!

好了,本文就分享到这,这种做法和张戈博客之前分享的《SEO 分享:彻底禁止搜索引擎收录非首选域名的方法》一样,属于极端优化做法,实施后,我们的索引肯定会大量下降,因为很多垃圾索引或收录都将被删除,但是这是良性的做法,因为优质且不重复的内容才是提高排名的王道!

54 条回应
  1. 麦购穿衣打扮 2015-6-1 · 20:58

    沙发,学习了,很不错

  2. 阿里书籍 2015-6-1 · 21:17

    经常折腾主题很容易被降权 深有体会

  3. 微部落博客 2015-6-1 · 21:42

    很佩服博主,技术型,不知能否有幸换个友链

    • avatar
      Jager 2015-6-2 · 12:38

      你加完告诉我一声。

      • 微部落博客 2015-6-2 · 12:43

        谢谢博主,我已经添加贵站友链了

        • avatar
          Jager 2015-6-2 · 12:57

          已添加,首页有CDN缓存,刷新需要一些时间。

          • 微部落博客 2015-6-2 · 12:58

            谢谢,我也是你的中国博客联盟的忠实粉丝,一起加油!

            • avatar
              Jager 2015-6-2 · 12:59

              是大家的博客联盟 :mrgreen:

              • 微部落博客 2015-6-2 · 13:00

                恩恩,是的,我在联盟找到很多站长朋友呢,很好的平台

                • avatar
                  Jager 2015-6-2 · 13:01

                  多交流,多学习,多进步。

              • JACK的机器人 2015-6-2 · 16:47

                哎,你的博客联盟;不,是大家的博客联盟

  4. aladd 2015-6-2 · 0:13

    又是沙发。
    3月开始我站点也开始收动态网址了,当时有个垃圾采集站疯狂来复制,百度搜TITLE我自己的都被压下来了,或者干脆不显示。 因为我实在除了更新就没有进行SEO优化,所以我就不知道收录动态网址为哪般。。 现在慢慢百度也开始放出来静态了,唯一上火的就是发8篇只放出来1篇,以前基本都可以放出来。 不知道是不是因为被采集了一段时间的缘故~~

    • avatar
      Jager 2015-6-2 · 7:36

      沙发被早抢了,你看到的是缓存 :mrgreen:
      我也觉得采集和转载对源站是有影响的。

  5. 菊部受审 2015-6-2 · 10:15

    不知道百度现在能不能识别noindex

    • 美丽约 2015-6-2 · 17:28

      百度貌似不能识别noindex

  6. 威客百科 2015-6-2 · 11:26

    做的好的网站为啥都有被k,封的风险?

    • avatar
      Jager 2015-6-2 · 12:58

      百度的心思,难以琢磨

    • JACK的机器人 2015-6-2 · 16:49

      百度想坑你,从来不商量

  7. 美丽约 2015-6-2 · 17:27

    既然博主将”取消回复“加上了”nofollow“,为什么不把”回复“也加上呢,还有首页的”发表评论“···

    • avatar
      Jager 2015-6-3 · 12:43

      多谢提醒,主题更新频繁,还没来得及。

  8. 陈军吧 2015-6-2 · 20:47

    请勿采集本站,因为采集的站长木有小JJ! :arrow: :cry:

  9. 陈军吧 2015-6-2 · 20:51

    赶快更新文章啊,大哥!我佩服你的技术!

  10. 海南特产大全 2015-6-2 · 23:07

    很多时候百度是在作调整,所以暂时性抽风也正常。采集盛行就是因为网站流量排名与原创关系不大,一个新闻热点,那些门户站都在转载整编是为啥。就如博主一样,把博客弄出品牌口碑,如卢松松,月光博客这类就很成功了,很多时候,无须敏感的在意搜索引擎SEO。纯属个人观点~~

    • avatar
      Jager 2015-6-3 · 1:11

      很中肯,赞一个。只是不爽百度不遵循robots协议。

  11. 小小白 2015-6-3 · 0:32

    请问你的右边的显示隐藏文章目录怎么实现的

    • avatar
      Jager 2015-6-3 · 12:42

      这也是主题自带功能

  12. 威客百科 2015-6-3 · 12:36

    楼主好棒

  13. 夏日博客 2015-6-3 · 13:41

    百度很不给力,有些动态链接我在roots里面也禁止了的,但百度不鸟你,该怎么收录就怎么收录,完全没当回事。

  14. 西贝博客 2015-6-4 · 9:44

    这个是不是很危险?

  15. 胡歌网摘 2015-6-4 · 15:48

    对你这样处理,我保持谨慎态度,不推荐。
    有一点你要注意,一个网站/页面里面太多链接(并且是内链)是404,会导致你网站/页面被减分。

    • avatar
      Jager 2015-6-4 · 16:52

      听你这么一说,确实也是这个理。回头考虑取消,然后使用canonical标签来避免重复页问题。

      • 胡歌网摘 2015-6-5 · 14:05

        canonical正解,不过对于bd也没什么太大作用,聊胜于无。

  16. 极品飞鸽 2015-6-7 · 10:40

    签到成功!签到时间:上午9:13:42[color=black][color=fuchsia][color=peru][color=slategray][/color][/color][/color][/color],每日签到,生活更精彩哦~

  17. 极品飞鸽 2015-6-7 · 10:40

    学习了

  18. 极品飞鸽 2015-6-7 · 10:42

    学习了, 好

  19. 小小白 2015-6-7 · 10:43

    真好

  20. 爆笑段子 2015-6-9 · 9:17

    我也发现了,度娘有时候收录动态网址

  21. 寇玉鑫博客 2015-6-9 · 17:48

    百度一直都不遵守搜索引擎协议,所以把谷歌打出中国了

    • avatar
      Jager 2015-6-9 · 22:05

      就怕垄断。。

  22. 北京秀才 2015-6-14 · 19:10

    :razz: 前来支持,博主的文章写的都挺不错的,看了几篇很涨知识,会常来的,望回访:www.seolseo.com

  23. 求赢SEO 2015-7-22 · 9:50

    织梦的functions.php文件存放在什么位置?

  24. 谢三诗 2015-7-22 · 17:51

    记得在seo密码里面曾经看过,在2013年的时候谷歌已经开始出现了收录动态的页面。这是因为当时谷歌已经能够分析出这些页面了。没想到现在百度也能做相关的分析了。还真是慢啊。

  25. H5页面制作 2016-6-14 · 13:57

    学习 谢谢分享

  26. 美健品联盟网 2016-7-8 · 18:57

    很少看到这么认真的讲解和分享经验的文章了! :smile: 签到成功!签到时间:下午6:47:28,每日签到,生活更精彩哦~

  27. 迅雷电影下载 2017-5-8 · 19:48

    博主,第三个方法,能和先前的常规伪静态规则一起使用吗?
    还有,你的这个WP使用的是什么主题?好喜欢你这评论区的打字效果……

    • avatar
      Jager 2017-5-9 · 21:50

      可以兼容使用。
      begin主题

  28. 安妮 2017-10-5 · 20:29

    博主,你这种方法可以添加在所有网站上吗?对腾讯的爬虫有没有效果?望解惑,谢谢!

    • avatar
      Jager 2017-10-6 · 19:08

      这是禁止某些特定页面被抓取,不是指整个网站。

  29. MAY 2018-12-17 · 16:21

    最后一句有点问题:优质且不重复的内容才是提高排名的王道!

    • avatar
      Jager 2019-1-1 · 16:42

      笔误笔误。。

  30. 本质游戏 2020-10-16 · 12:24

    既然是程序猿,你可以直接搞一个字符集加密来杜绝采集啊,参考起点中文。
    有能力采你的不屑于采集,没能力的也采不了。

  31. 很苦的人 2020-12-5 · 11:59

    请教博主,dede指定栏目怎么实现彻底屏蔽蜘蛛,将以上php代码粘贴到根目录index.php无效,iis的这么实现,求指点!!

  32. 佛系软件 2021-4-14 · 11:13

    不行啊,后台禁止访问,前台页面空白,php版本的

  33. WWE 2021-5-16 · 11:45

    大佬,你这个刚测试不对了,添加你写的NGINX代码后所有的页面百度蜘蛛都抓取不到了