作為一個(gè)網(wǎng)站的SEO負(fù)責(zé)人,,你是否有關(guān)注過(guò)IIS日志的信息詳情?如果沒(méi)有,我敢肯定你網(wǎng)站的不少帶寬都被所謂的蜘蛛占去了,,即使你的帶寬很猛,,不在乎那么點(diǎn)流量,但是從優(yōu)化到極致來(lái)說(shuō),,這都是遠(yuǎn)遠(yuǎn)不達(dá)標(biāo)的,。
蜘蛛分為真假蜘蛛,一般大型搜索引擎的蜘蛛,,如百度、谷歌的蜘蛛,,假蜘蛛一般歸總為垃圾搜索引擎和惡意抓取程序,。其中百度蜘蛛的真假分析,你可以通過(guò)語(yǔ)法“ nslookup ip”,,查看來(lái)源是否是百度的子站點(diǎn),,如果不是,那么就是偽裝的百度蜘蛛,。如果仔細(xì)分析,,你會(huì)發(fā)現(xiàn)一些國(guó)內(nèi)或國(guó)外的蜘蛛,例如 EasouSpider,、AhrefsBot等,,這些蜘蛛都是沒(méi)有什么用的,如果你面向的市場(chǎng)是國(guó)內(nèi)的,,百度 BaiduSpider,,谷歌 Googlebot,360 360Spider,,soso Sosospider,,搜狗Sogou+web+spider,保留這幾個(gè)蜘蛛的抓取就足夠了,,其他的蜘蛛一律屏蔽掉就行了,,還有把你的靜態(tài)資源,如Image和JS,、CSS的路徑也屏蔽掉,,這些資源都是不需要蜘蛛抓取的,因?yàn)闆](méi)有展現(xiàn)的價(jià)值;
一般來(lái)說(shuō),,屏蔽蜘蛛的爬取有三種方法:
Robots 禁封
UA 禁封
IP 禁封
一,、Robots 禁封
Robots 協(xié)議(也稱為爬蟲協(xié)議,、機(jī)器人協(xié)議等)的全稱是 “網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)”(Robots Exclusion Protocol),用來(lái)告訴搜索引擎,、爬蟲哪些頁(yè)面可以抓取,,哪些頁(yè)面不能抓取。
Robots 協(xié)議在網(wǎng)站中體現(xiàn)在根目錄下的 robots.txt 文件,,一般格式入下:
User-agent: YisouSpider
Disallow: /
User-agent: EasouSpider
Disallow: /
User-agent: *
Disallow: /admin/
正規(guī) Robot 在爬取網(wǎng)站前都會(huì)先讀取該文件,,根據(jù) robots.txt 指示爬取:
圖 1:ROBOTS TXT
但是由于 Robots 協(xié)議并不是一個(gè)規(guī)范,,而是約定俗成的,,所以只能引導(dǎo)正規(guī)蜘蛛爬取,并不能阻止垃圾蜘蛛,,因此要屏蔽流氓垃圾蜘蛛還需要其他更嚴(yán)格的措施來(lái)配合,。
二、UA 禁封
UA(User Agent)中文名為用戶代理,,它是一個(gè)特殊字符串頭,,使得服務(wù)器能夠識(shí)別客戶使用的操作系統(tǒng)及版本、CPU 類型,、瀏覽器及版本,、瀏覽器渲染引擎、瀏覽器語(yǔ)言,、瀏覽器插件等,,大多數(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
針對(duì)指定 UA 的訪問(wèn),,返回預(yù)先設(shè)定好的異常頁(yè)面(如 403,,500)或跳轉(zhuǎn)到其他頁(yè)面的情況,即為 UA 禁封,。
Nginx 下,,可以單獨(dú)創(chuàng)建一個(gè)配置文件,如 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 等其他軟件操作類似。
解釋一下,,這個(gè)配置的意思是 判斷訪問(wèn)者 UA 是否包含引號(hào)中的字符串,,若為真,則返回錯(cuò)誤碼 444,,其中錯(cuò)誤碼 444 是 nginx 獨(dú)有的錯(cuò)誤碼,,表示服務(wù)器不返回任何數(shù)據(jù),,直接丟棄。
圖 2:RESPONSE EMPTY
根據(jù)訪問(wèn)日志,,我也整理了一份清單上傳到 GitHub,,鏈接:vircloud/bots,可以作為參考,。
由于 UA 禁封是由 Nginx 或 Apache 等已經(jīng)到應(yīng)用層才處理,,因此即使已經(jīng)禁止爬取訪問(wèn),蜘蛛仍然會(huì)先與服務(wù)器創(chuàng)建連接,,浪費(fèi)資源,,為此,針對(duì)特別流氓的蜘蛛,,可以通過(guò)防火墻在底層拒絕連接,。
三、IP 禁封
IP 禁封是指利用系統(tǒng)自帶防火墻,,拒絕蜘蛛 IP 連接,,此措施最為嚴(yán)格,且針對(duì)有特定 IP 蜘蛛,,如果 IP 是隨機(jī)變動(dòng)的, IP 禁封意義也不大,。
舉例,, 有 UA 為 ”WF search/Nutch-1.12“ 的蜘蛛,通過(guò) IP 183.94.118.76 與服務(wù)器產(chǎn)生大量連接訪問(wèn),,影響到正常運(yùn)行,,則通過(guò)以下命令禁止連接(CentOS7):
圖 3:FIREWALLD DENY
生效后此 IP 將無(wú)法再與服務(wù)器產(chǎn)生連接:
圖 4:FIREWALLD DENY 2
同樣的,我也整理了一份清單上傳到 GitHub,,鏈接:vircloud/ips,,可以作為參考。
當(dāng)然了,,思想有多遠(yuǎn),,就有多少方法去屏蔽垃圾蜘蛛爬取,并不局限于上述三個(gè)方法,,大家都可以去試試,。