方法一
var r = document.referrer; r = r.toLowerCase(); //轉為小寫 var aSites = new Array('google.','baidu.','sm.','soso.','so.','360.','yahoo.','youdao.','sogou.','gougou.'); var b = false; for (i in aSites){ if (r.indexOf(aSites[i]) > 0){ b = true; break; } } if(b){ //是蜘蛛訪問 }
其中,aSites為蜘蛛關鍵字數組,把你需要判斷的蜘蛛關鍵字列入其中即可,如果某些不想判斷,直接刪除。
方法二
var regexp=/\.(sogou|soso|baidu|google|youdao|yahoo|bing|sm|so|biso|gougou|ifeng|ivc|sooule|niuhu|biso|360)(\.[a-z0-9\-]+){1,2}\//ig; var where =document.referrer; if(regexp.test(where)){ //是蜘蛛訪問 }
其中,regexp為蜘蛛關鍵字列表,與方法一不同的是,本方法用正則表達式替代數組,其代碼相對簡潔方便。
以上2種方法是Javascript判斷是否蜘蛛訪問的核心,在具體使用中可以有不同的版本,但都是根據document.referrer來判斷的。方法大家都知道了,但眾所周知,搜索引擎蜘蛛并不識別Javascript內容,如果你想要根據js判斷來進行跳轉或者輸出內容就不可取了,那么到底應該怎么用呢?舉例如下:
一、給蜘蛛看而不是給用戶看的內容
比如,黑鏈……當然,還有其他應用,這里就以黑鏈為例。應用原理其實很簡單,針對用戶讓其不可見(display:none)即可。如下:
<div id="blackLinks"> <a href="http://www.kredytypozyczki.net">致遠建站</a> <a >定窯瓷器</a> <a >雕塑</a> </div> <script> var regexp=/\.(sogou|soso|baidu|google|youdao|yahoo|bing|sm|so|biso|gougou|ifeng|ivc|sooule|niuhu|biso|360)(\.[a-z0-9\-]+){1,2}\//ig; var where =document.referrer; if(!regexp.test(where)){ $('#blackLinks').hide(); } </script>
二、給用戶一個頁面,給蜘蛛另外一個頁面
比如淘寶客,在商品列表中,用戶點擊的時候我們希望其直接跳轉到轉化頁面,而對于蜘蛛,我們希望它能抓取本站的商品詳情頁面……
對于這一點,用蜘蛛判斷的代碼其實有點冗余,就不寫了,有興趣的朋友可以自己去試一下,這里用另外一種方法來解決(主要應用蜘蛛不識別js來處理)
<!--相關html結構,其中input存放的是真實的跳轉地址--> <div class="part"> <a class="pic" target="_blank"> <img src="http://www.example.com/upfiles/2020-02/20200218134016_58949.jpg" alt="“步步高升” 天然岫玉工藝品" /> </a> <h4> <a target="_blank">“步步高升” 天然岫玉工藝品</a> </h4> <div> <span>¥<b>1580.00</b></span> <a target="_blank">立即購買</a> </div> <input type="hidden" name="trueUrl" value="http://www.example.com/index.php?c=Index&a=go&id=3032"> <a class="i like" data-id="3032"></a> </div> $('article .part a').click(function(){ //當點擊的時候(用戶訪問)把當前鏈接的url修改成真實的url(淘寶客地址) var _url=$(this).closest('.part').find('input').val(); $(this).attr('href',_url); });
© 致遠 2020-02-23,原創內容,轉載請注明出錯:Javascript判斷是否蜘蛛訪問的方法及其應用