作為一個網(wǎng)站的SEO負責(zé)人,你是否有關(guān)注過IIS日志的信息詳情?如果沒有,,我敢肯定你網(wǎng)站的不少帶寬都被所謂的蜘蛛占去了,,即使你的帶寬很猛,不在乎那么點流量,,但是從優(yōu)化到極致來說,這都是遠遠不達標的,。
蜘蛛分為真假蜘蛛,,一般大型搜索引擎的蜘蛛,如百度,、谷歌的蜘蛛,,假蜘蛛一般歸總為垃圾搜索引擎和惡意抓取程序。其中百度蜘蛛的真假分析,,你可以通過語法“ nslookup ip”,,查看來源是否是百度的子站點,如果不是,,那么就是偽裝的百度蜘蛛,。如果仔細分析,你會發(fā)現(xiàn)一些國內(nèi)或國外的蜘蛛,,例如 EasouSpider,、AhrefsBot等,這些蜘蛛都是沒有什么用的,,如果你面向的市場是國內(nèi)的,,百度 BaiduSpider,谷歌 Googlebot,360 360Spider,,soso Sosospider,,搜狗Sogou+web+spider,保留這幾個蜘蛛的抓取就足夠了,,其他的蜘蛛一律屏蔽掉就行了,,還有把你的靜態(tài)資源,如Image和JS,、CSS的路徑也屏蔽掉,,這些資源都是不需要蜘蛛抓取的,因為沒有展現(xiàn)的價值;
一般來說,,屏蔽蜘蛛的爬取有三種方法:
Robots 禁封
UA 禁封
IP 禁封
一,、Robots 禁封
Robots 協(xié)議(也稱為爬蟲協(xié)議、機器人協(xié)議等)的全稱是 “網(wǎng)絡(luò)爬蟲排除標準”(Robots Exclusion Protocol),,用來告訴搜索引擎,、爬蟲哪些頁面可以抓取,哪些頁面不能抓取,。
Robots 協(xié)議在網(wǎng)站中體現(xiàn)在根目錄下的 robots.txt 文件,,一般格式入下:
User-agent: YisouSpider
Disallow: /
User-agent: EasouSpider
Disallow: /
User-agent: *
Disallow: /admin/
正規(guī) Robot 在爬取網(wǎng)站前都會先讀取該文件,根據(jù) robots.txt 指示爬?。?
圖 1:ROBOTS TXT
但是由于 Robots 協(xié)議并不是一個規(guī)范,,而是約定俗成的,所以只能引導(dǎo)正規(guī)蜘蛛爬取,,并不能阻止垃圾蜘蛛,,因此要屏蔽流氓垃圾蜘蛛還需要其他更嚴格的措施來配合。
二,、UA 禁封
UA(User Agent)中文名為用戶代理,它是一個特殊字符串頭,,使得服務(wù)器能夠識別客戶使用的操作系統(tǒng)及版本,、CPU 類型、瀏覽器及版本,、瀏覽器渲染引擎,、瀏覽器語言、瀏覽器插件等,,大多數(shù)蜘蛛都有攜帶此信息,,如谷歌 Chrome 瀏覽器 Windows 版本 UA 是:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36
針對指定 UA 的訪問,返回預(yù)先設(shè)定好的異常頁面(如 403,,500)或跳轉(zhuǎn)到其他頁面的情況,,即為 UA 禁封。
Nginx 下,可以單獨創(chuàng)建一個配置文件,,如 deny-robots.conf,,并將文件添加到 nginx.conf 或網(wǎng)站配置中,然后重新加載 Nginx 即可,。
例如 deny-robots.conf 在 /etc/nginx/conf/ 文件夾下,,deny-robots.conf 內(nèi)容:
if ($http_user_agent ~ "InetURL|Pcore-HTTP|PocketParser|Wotbox|SEMrushBot|newspaper|DnyzBot|Mechanize|redback|ips-agent|Sogou Pic Spider|python-requests|PiplBot|SMTBot|WinHTTP|Auto Spider 1.0|GrabNet|TurnitinBot|Go-Ahead-Got-It|Download Demon|Go!Zilla|GetWeb!|GetRight|libwww-perl|Cliqzbot|MailChimp|SMTBot|Dataprovider|XoviBot|linkdexbot|feedreader|SeznamBot|Qwantify|spbot|evc-batch|zgrab|Go-http-client|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms|^$")
{
return 444;
}
然后在網(wǎng)站nginx配置中添加:
server {
......
include deny-robots.conf
......
}
最后service nginx reload 即可生效,Apache 等其他軟件操作類似,。
解釋一下,,這個配置的意思是 判斷訪問者 UA 是否包含引號中的字符串,若為真,,則返回錯誤碼 444,,其中錯誤碼 444 是 nginx 獨有的錯誤碼,表示服務(wù)器不返回任何數(shù)據(jù),,直接丟棄,。
圖 2:RESPONSE EMPTY
根據(jù)訪問日志,我也整理了一份清單上傳到 GitHub,,鏈接:vircloud/bots,,可以作為參考。
由于 UA 禁封是由 Nginx 或 Apache 等已經(jīng)到應(yīng)用層才處理,,因此即使已經(jīng)禁止爬取訪問,,蜘蛛仍然會先與服務(wù)器創(chuàng)建連接,浪費資源,,為此,,針對特別流氓的蜘蛛,可以通過防火墻在底層拒絕連接,。
三,、IP 禁封
IP 禁封是指利用系統(tǒng)自帶防火墻,拒絕蜘蛛 IP 連接,,此措施最為嚴格,,且針對有特定 IP 蜘蛛,如果 IP 是隨機變動的,, IP 禁封意義也不大,。
舉例, 有 UA 為 ”WF search/Nutch-1.12“ 的蜘蛛,,通過 IP 183.94.118.76 與服務(wù)器產(chǎn)生大量連接訪問,,影響到正常運行,則通過以下命令禁止連接(CentOS7):
圖 3:FIREWALLD DENY
生效后此 IP 將無法再與服務(wù)器產(chǎn)生連接:
圖 4:FIREWALLD DENY 2
同樣的,,我也整理了一份清單上傳到 GitHub,,鏈接:vircloud/ips,,可以作為參考。
當(dāng)然了,,思想有多遠,,就有多少方法去屏蔽垃圾蜘蛛爬取,并不局限于上述三個方法,,大家都可以去試試,。