You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js站点爬虫抓取空body求助:仅返回GetStaticProps props

问题排查与解决方案

1. 先确认静态构建产物是否正常

本地执行npm run build,然后查看.out/index.html文件:

  • 如果文件里body为空:说明是代码或静态生成过程的问题,重点查代码逻辑。
  • 如果文件里body有完整内容:问题出在Nginx部署配置或缓存,直接跳转到第3点。

2. 代码层面排查

  • 检查getStaticProps的返回值:确保它正确返回了所需的2个props,没有返回空值或报错。可以在build时查看终端日志,或者在getStaticProps里加console.log输出props,确认数据正常。
  • 检查子组件渲染逻辑:
    • 确认子组件接收props后没有条件渲染导致不输出内容(比如if (!data) return null但data其实存在?或者props字段名不匹配?)。
    • 排查子组件是否包含仅客户端可用的API(比如window、document),静态生成时这些API不存在,会导致组件渲染失败,最终body为空。即使你没写客户端代码,子组件可能隐含依赖,比如某些UI库的组件在SSR/SSG时需要特殊处理。
  • 检查Next.js Head组件的使用:确保next/head只用于添加头部标签,没有错误覆盖或阻止body内容渲染。

3. Nginx部署配置排查

  • 确认根目录指向正确:Nginx的root配置应该指向Next.js构建后的.out目录,示例配置:
    server {
      root /path/to/your/project/.out;
      index index.html index.htm;
    
      location / {
        try_files $uri $uri/ /index.html;
      }
    }
    
  • 清除Nginx缓存:如果之前缓存了错误的空HTML,执行nginx -s reload重启服务,或手动清除缓存目录(比如/var/cache/nginx)。
  • 检查Content-Type设置:确保Nginx正确返回HTML的Content-Type为text/html,避免爬虫无法识别内容。可以在Nginx配置里添加:
    location ~* \.html$ {
      add_header Content-Type text/html;
    }
    

4. 验证爬虫兼容性

完成上述修复后,用本地工具模拟无JS爬虫:

  • 用curl命令测试:curl https://www.esfaras.de,查看返回的HTML是否包含完整body内容。如果curl返回正常,说明爬虫能正确抓取。

内容的提问来源于stack exchange,提问作者Ozan Yurdakul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 05:58:26