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