想模拟抓取自己的网站,最简单的思路是把自己当成搜索引擎蜘蛛,从它的视角走一遍抓取、解析、入库的流程。重点不是把页面下载下来,而是看蜘蛛能不能进来、看到的内容和用户是否一致、有没有被反爬或配置挡在门外。
先拿 curl 试。比如 curl -I -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://你的域名/。把 UA 换成百度就是 Baiduspider/2.0,换成必应就是 bingbot/2.0。看返回码是 200 还是 403、301 跳到哪、有没有 Set-Cookie、X-Robots-Tag。curl 只改 UA,改不了来源 IP,所以如果服务器按 IP 封禁,它仍然会被拦。这能帮你分清问题出在 UA 层还是 IP 层。wget --spider 也能批量看状态码,适合检查站内链接有没有死链。
如果页面靠 JavaScript 渲染,curl 看到的是空壳。这时用 Playwright 或 Puppeteer,设置 userAgent,访问页面后等 networkidle,再取 document.title、meta[name=robots]、link[rel=canonical] 和正文文本。Google 现在以移动优先索引为主,最好把 viewport 设成手机尺寸,UA 也换成移动蜘蛛。对比浏览器直接打开的结果,如果蜘蛛拿到的 title、正文、内链不一样,说明前端渲染或服务端判断 UA 有问题。常见坑是给蜘蛛返回简化页,或者把 CSS、JS 在 robots.txt 里屏蔽,导致渲染失败。
现成工具更省事。Screaming Frog 免费版能抓 500 个 URL,付费版额度更高,可以自定义 User-Agent,开启 JavaScript 渲染,设置抓取深度和并发。Sitebulb、Ahrefs 的站点审计也能做类似事。抓的时候把并发降到 1 到 2,延迟设 1 到 2 秒,别把自己线上服务器打挂。重点看状态码分布、重定向链、重复 title、缺失 canonical、noindex 页面、孤岛页面和抓取深度。抓取预算有限,层级太深的页面蜘蛛可能很少去。
官方工具最接近真实蜘蛛。Google Search Console 的网址检查能看到 Google 抓取到的 HTML、截图、加载的资源,还能测 robots.txt。Bing Webmaster Tools 有 URL 检查。百度搜索资源平台的抓取诊断可以模拟 Baiduspider,看返回头和正文。这些工具用的是官方 IP,不是你自己伪装的 UA,所以能验证真实蜘蛛是否被 CDN、WAF 或防火墙拦截。如果这里正常,curl 却 403,多半是 IP 或频率问题。

日志也要看。Nginx 里 grep "Googlebot" access.log | tail -50,看它抓了哪些 URL、返回码、频率。UA 可以伪造,不能只信 UA。Googlebot 的验证方法是反向 DNS:把访问 IP 反查,得到 googlebot.com 或 google.com 域名,再正向查该域名确认 IP 一致。Bing 也有类似机制。百度搜索资源平台提供 IP 验证工具。日志里如果出现大量 5xx,蜘蛛会降低抓取频率;如果 301 链太长,也会浪费预算。
模拟抓取时只抓自己的站,别拿这套去扫别人。测试环境最好加 Basic Auth 或 IP 白名单,并加 noindex,免得被收录。模拟抓取不能完全替代真实蜘蛛,因为你的 IP 和真实蜘蛛不同,但能覆盖大部分配置、渲染和内容问题。定期做一次,结合官方工具和日志,基本就能知道蜘蛛眼里你的网站长什么样。