最近几天我们国内的两个网站都遇到访问困难,检查发现是百度爬虫抓取量大增,是以前正常情况的很多倍,导致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效果、降低展现和流量。
评论