爬虫抓取失败站点整改方案:网站爬虫抓取失败怎么办?从服务器端
很多站长会突然发现网站收录下降或被采集工具提示抓取失败,问题往往不在内容本身而是服务器端配置出了问题。
本文从零开始拆解排查思路,帮你快速定位并修复爬虫抓取失败的原因。
开始前需要准备的东西
在动手之前,先确认你拥有以下权限或工具,避免操作到一半卡住:
- 服务器SSH登录权限(或使用宝塔面板等管理工具)
- 网站根目录的读写权限(用于修改robots.txt等文件)
- 浏览器开发者工具(按F12打开,用于模拟抓包)
- 一个能模拟爬虫的工具(如curl命令行,或者在线工具)
如果你用的是宝塔面板,大部分操作都可以在后台文件管理和网站配置里完成,不需要敲命令。
第一步:检查服务器返回的状态码
爬虫抓取网站时,首先收到的是HTTP状态码。
如果是404、500、403这些错误码,抓取就会直接中断。
操作路径:
在服务器终端执行以下命令(将 https://example.com 替换为你的域名):
curl -I https://example.com
返回的第一行就是状态码,比如 HTTP/2 200 表示正常。
如果你看到下面这些,需要针对性修复:
- 403 Forbidden:可能是IP封禁、权限配置或安全软件拦截。检查防火墙规则或宝塔面板的“安全” -> “防火墙”。
- 404 Not Found:确认网站根目录路径是否正确,宝塔面板网站设置中“网站目录”是否指向了正确的文件夹。
- 500 Internal Server Error:通常是PHP错误或程序故障,查看错误日志(宝塔面板“网站” -> 对应网站 -> “错误日志”)。
- 301/302重定向:如果是永久重定向(301)且目标地址正确,不影响抓取;但如果是循环重定向(比如A->B->A),需要排查伪静态或配置文件。
第二步:检查robots.txt是否误封了爬虫
robots.txt是爬虫进入网站后第一个读取的文件,如果在里面禁止了搜索引擎或特定路径,抓取就会失败。
文件位置:
网站根目录下的 robots.txt 文件。
检查重点:
用浏览器访问 https://example.com/robots.txt,如果看到以下内容,爬虫自然进不来:
User-agent: *
Disallow: /
全部禁止(Disallow: /)意味着所有爬虫都被拒之门外。
你应该根据需求保留允许规则,比如仅禁止后台路径:
User-agent: *
Disallow: /admin/
Disallow: /cgi-bin/
注意:如果是百度、Google等主流搜索引擎,不要轻易禁止 User-agent: *,可以单独为特定爬虫设置允许。
宝塔面板操作:
在文件管理器找到根目录下的 robots.txt,右键编辑即可修改。如果没有该文件,可以新建一个。
第三步:检查服务器是否限制了User-Agent
有些服务器或防火墙会拦截非浏览器的User-Agent,而爬虫的User-Agent通常比较特殊(比如Googlebot的User-Agent包含 Googlebot)。
这会导致爬虫返回403或直接断开连接。
测试方法:
在服务器执行以下命令,模拟常见搜索引擎的User-Agent:
curl -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" -I https://example.com
- Nginx防火墙设置(如宝塔面板“Nginx防火墙” -> “User-Agent过滤”),关掉“屏蔽非浏览器UA”之类的选项,或者把需要的爬虫UA加入白名单。
- .htaccess文件(Apache环境):检查根目录或上级目录的
.htaccess里是否有RewriteCond %{HTTP_USER_AGENT} ...拦截规则。 - WAF软件:比如ModSecurity、云盾等,需要添加例外规则。
第四步:确认内容是否可正常访问(无跳转验证)
部分网站使用JavaScript跳转、验证码或强制登录才能看到内容,爬虫无法执行这些操作。
你需要保证根页面在不带Cookie的情况下用curl能返回完整HTML。
测试指令:
curl -s https://example.com | head -50
如果返回的内容是“请开启JavaScript”或跳转到登录页,就需要修改程序逻辑,对搜索引擎使用静态内容。
常见场景:
- 使用了Vue/React等前端框架,页面内容由JS动态渲染 —— 服务器渲染(SSR)或生成静态页面才能让爬虫读到内容。
- 网站开启了“强制登录”插件 —— 在插件设置里添加搜索引擎IP或User-Agent白名单。
避坑说明(新手最容易忽略的点)
- 修改后立即测试用普通浏览器可能看不出问题,必须用上述curl命令带爬虫User-Agent测试才准。
- 如果网站使用了CDN,需要在CDN层也检查源站策略是否被覆盖,CDN的缓存规则可能返回旧robots.txt。
- 不要同时把所有限制都打开,比如一边在防火墙禁UA,一边在程序里限制登录,容易出现双重拦截。
- 搜索引擎的IP段会变化,如果服务器使用了IP白名单,请改用User-Agent白名单更稳定。
高频问题解答
Q:改了robots.txt后需要多久生效?
A:搜索引擎一般每天重新抓取一次该文件,如果急需更新,可以百度后台提交新robots文件。
Q:网站用了HTTPS,但爬虫抓取还是返回301?
A:可能是未强制HTTPS的规则不标准,确认在nginx配置中没有同时保留80端口的301跳转和443端口的跳转循环。
Q:我用宝塔面板,哪里看服务器状态码?
A:宝塔面板“网站” -> 对应网站 -> “日志”目录下的访问日志,可以筛选状态码。也可以实时用curl命令测试。
整改后的效果验证
执行完以上步骤后,进入验证环节:
- 用模拟爬虫命令(带百度/谷歌UA)访问首页和几个重要内页,确保全部返回200且内容完整。
- 在百度资源平台或Google Search Console提交网站,观察“抓取”报告是否显示成功。
- 如果还抓取失败,回头检查是否遗漏了某个安全插件或WAF的规则。
建议养成每次修改配置后都用curl检查的习惯,这样能避免线上出现问题时才手忙脚乱。
如果你正在处理爬虫抓取失败的问题,建议按本文步骤逐一排查,遇到异常时优先回看避坑和高频问题部分。