一、Nginx 规则
直接在 server 中新增如下规则即可:
################################################# # 禁止蜘蛛抓取动态或指定页面规则 By # ################################################# server { listen 80; server_name zhangge.net; index index.html index.htm index.php default.html default.htm default.php; root /home/wwwroot/zhangge.net; #### 新增规则【开始】 #### #初始化变量为空 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; } #### 新增规则【结束】 #### #以下规则略...
server
{
listen 80 ;
server_name zhangge .net ;
index index .html index .htm index .php default .html default .htm default .php ;
root / home / wwwroot / zhangge .net ;
#### 新增规则【开始】 ####
#初始化变量为空
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更彻底地禁止蜘蛛抓取指定路径代码 * 使用说明:将一下代码添加到主题目录的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比robots更彻底地禁止蜘蛛抓取指定路径代码 By 张戈博客
* 原文地址:http://zhangge.net/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 当中即可。
四、测试效果
测试效果很简单,直接利用百度站长平台的抓取诊断工具即可:
点开看看可以发现真的是返回404:
最后,结合张戈博客之前分享的《SEO技巧:Shell脚本自动提交网站404死链到搜索引擎》即可将这些无用的收录全部删除:
有朋友说我这个是黑帽手法,用户可以访问,而搜索引擎却404,很适合淘宝客网站的商品外链。是什么手法我不清楚,我只知道实用就好!特别是张戈博 客那些外链,都是用/go?url=这个路径来跳转的,现在这样处理后,就算搜索引擎不遵循robots硬是要抓取,就只能抓到404了!