最近幾天我們國内的兩個網站都遇到訪問困難,檢查發現是百度爬蟲抓取量大增,是以前正常情況的很多倍,導緻Web服務器CPU、帶寬以及數據庫服務器都難以應付。Googlebot也曾經出現類似情況。
辦法一(站長平台設置):
按照以前的辦法,我們是在百度資源平台或者Google Search Console中設置降低爬蟲的抓取速率,不過這樣設置後需要等待2-3天時間生效,而不能解決當時的問題。
上圖:Google Search Console中限制對某網站的爬取速度(90天後恢複正常速度抓取)。
上圖:百度資源平台中調整百度蜘蛛對網站爬取的頻次(30天後恢複正常速度抓取)。
辦法二(臨時修改robots.txt):
也可以使用robots.txt來禁止一些爬蟲對某些頁面的訪問,但也需要等待1天左右的時間才能生效。robots.txt例子:
User-agent: Baiduspider Disallow: /af/ Disallow: /sq/
上面的例子就是讓百度蜘蛛不要訪問/af/和/sq/路徑下的網址。當服務器性能問題解決後,需要記得去掉robots.txt中的限制,否則這些限制一直存在,這些網址以後也不會被搜索引擎爬蟲抓取,以及已經抓取、索引的頁面也會逐步從搜索引擎庫中删除。
辦法三(臨時給出503“服務不可用”狀态):
為了讓網站可以正常訪問,隻好采取臨時措施來限制搜索引擎的爬蟲,在網上找了幾篇文章:
可以用PHP或者Apache Rewrite的辦法來解決,先看PHP代碼片段:
<?php header('HTTP/1.1 503 Service Temporarily Unavailable'); header('Status: 503 Service Temporarily Unavailable'); header('Retry-After: 86400'); // in seconds print "Sorry, this page is temporarily unavailable."; ?>
把上面這段代碼放在适當的程序中(例如隻針對一定的url、隻針對特定的user agent等條件),對訪問者給出503狀态,也就是告訴訪問者“服務臨時不可用”,讓訪問者間隔一段時間(程序中寫的86400秒,也就是1天)後再來訪問。
或者修改.htaccess來讓Apache對付:
# Redirect googlebot <IfModule mod_rewrite.c> RewriteCond %{REQUEST_URI} !.(css|gif|ico|jpg|js|png|swf|txt)$ RewriteCond %{HTTP_USER_AGENT} ^(.*)googlebot(.*) [NC] RewriteRule (.*) /googlebot.php [R=503,L] #RewriteRule .* - [R=503,L] </IfModule>
上面的例子就是讓googlebot訪問非特定後綴文件的時候給出503“網頁臨時不可用”狀态,以及顯示googlebot.php中的内容。
💡 這兩種辦法都是有效的,從我們的經驗來看可以立馬降低服務器的負載,搜索引擎爬蟲也會随後适當降低對這種給出503狀态的頁面的抓取速度以及降低對整個域名網站的抓取速度。
⚠️ 但需要注意:這隻能是臨時的處理辦法,一般就使用幾個小時,最長1-2天就需要放開,如果長期(例如超過幾天時間)使用503狀态,搜索引擎可能會長期降低抓取速度,甚至把這些頁面從收錄庫中删除,從而影響網站SEO效果、降低展現和流量。
评论