冰凌汇编

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 110|回复: 0
收起左侧

[网路配置] SEO优化,禁止搜索引擎抓取动态链接,彻底禁止搜索引擎抓取403

[复制链接]
bingling 发表于 2022-5-4 16:58:55
禁止搜索引擎抓取网页的方法有很多种,就目前形式上看一般站长都适用于robots.txt屏蔽,但是robots的一大好处就是谷歌和百度的搜索引擎的蜘蛛都是遵循 robots.txt 给出的规则来在你的网站上爬行,但是虽然按照规则进行抓取,但由于某些原因还是可能会从网站中收录这些被禁止的内容,第二大好处就是是可以限止不需要的搜索引掣来你的网站爬行,以缓解服务器的宝贵带宽资源,如邮件服务器、Erp服务器,这类服务对搜索引擎是没有任何意义的;比如淘保网站就用robots限止了蜘蛛的爬行。

站长就目前技术来分析,,我们可以通过PHP代码,Nginx,Apache规则进行百分之百拦截蜘蛛抓取

明明已经在robots.txt屏蔽,但是搜索引擎还是抓取了,,这真实头疼,我们从这几个案列中可以分析

案列1:
SEO优化,禁止搜索引擎抓取动态链接,彻底禁止搜索引擎抓取403 - bingling_冰凌汇编

案列2:
SEO优化,禁止搜索引擎抓取动态链接,彻底禁止搜索引擎抓取403 - bingling_冰凌汇编




案列3:
SEO优化,禁止搜索引擎抓取动态链接,彻底禁止搜索引擎抓取403 - bingling_冰凌汇编

以上案例中的地址,我通过百度站长平台的 robots 检验结果都是被禁封的,真不知道百度怎么想的:
SEO优化,禁止搜索引擎抓取动态链接,彻底禁止搜索引擎抓取403 - bingling_冰凌汇编

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

下面介绍方法
一、Nginx 规则写法:
[Asm] 纯文本查看 复制代码
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 错误,暂时先放弃了,有时间再来调整!

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

[Asm] 纯文本查看 复制代码
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 代码写法:
[Asm] 纯文本查看 复制代码
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优化,禁止搜索引擎抓取动态链接,彻底禁止搜索引擎抓取403 - bingling_冰凌汇编

点开看看可以发现真的是返回 404:
SEO优化,禁止搜索引擎抓取动态链接,彻底禁止搜索引擎抓取403 - bingling_冰凌汇编

任何事情有好的一面也有不好的一面,robots.txt 在给网站带来以上好处的同时也会存在一定的风险:第一就是给那些不怀好意思的攻击者指明了你网站的目录结构和私密数据所在的位置,虽然现在我们的服务器安全提高了好多,但任何事情我们都要做到防范于未然。
冰凌汇编免责声明
以上内容均来自网友转发或原创,如存在侵权请发送到站方邮件9003554@qq.com处理。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|站点统计|Archiver|小黑屋|RSS|冰凌汇编 ( 滇ICP备2022002049号 滇公网安备 53032102000029号)|网站地图

GMT+8, 2022-10-6 22:04 , Processed in 0.124966 second(s), 8 queries , Redis On.

冰凌汇编 - 建立于2021年12月20日

Powered by Discuz! © 2001-2022 Comsenz Inc.

快速回复 返回顶部 返回列表