蜘蛛拿到的,是响应体而不是屏幕
搜索蜘蛛请求一个 URL 时,拿到的是服务器返回的那段 HTML 和它引用的资源。它不会看到浏览器窗口里浮在上面的遮罩、按钮和倒计时。所以判断某个交互层是否影响抓取,问的不是“用户要点几下才能看到正文”,而是“正文有没有写进最初那份 HTML”。
Cookie 同意框:是遮罩,还是正文的出口
同一个同意框,实现方式不同,结果完全不同。
- 只是展示层:正文已经写在 HTML 中,弹层用 CSS 盖在上面,点“接受”只是把遮罩去掉。蜘蛛依然能读到正文,影响主要落在用户体验上。
- 是正文的出口:正文要等用户点击之后,由前端脚本请求接口再插入 DOM。蜘蛛拿到的 HTML 里正文是空的,只剩下一个占位容器。
区分方法很直接:关闭 JavaScript,或者用一个不带任何 Cookie 的请求抓一次页面,然后在返回内容里搜索首段正文的关键词。搜不到,就属于第二种,而这类页面在抓取路径上基本等同于空壳。
登录墙:最容易变成软 404 的一种
把内容藏在登录之后的站点不少。对蜘蛛来说,这条路径通常只有两种结局:一是 302 跳到登录页,抓取路径拐了个弯,最终拿到的是登录页;二是返回 200,正文只有一句“请登录后查看”。后者看起来是正常页面,实际没有有效内容,很容易被当成空结果处理。
如果这批页面本来就不打算被搜索看到,更干净的做法是在入口处就挡住,用 robots 规则限制抓取,或用 noindex 表明不要收录,而不是让蜘蛛走进去再碰一堵墙。反过来,如果希望它们被看到,那就要给蜘蛛一份不经过登录也能读到的版本。
地域和语言浮层:重定向比弹窗更麻烦
有些站点按 IP 判断用户所在地区,直接送去“最合适”的版本。问题在于蜘蛛的出口 IP 往往不在你预期的地区,于是它可能反复只看到默认版本,其他语言或地区版本只能靠 hreflang 和内链被发现。
更稳的处理方式是:默认版本稳定返回,其他版本通过可点击的链接互相可达,不把版本选择完全押在 IP 判断上。用户端可以有浮层提示,但底层 URL 与链接关系要保持确定。
首屏弹窗广告:不挡抓取,挡点击
优惠券、订阅提醒、App 下载引导这类浮层,一般不影响蜘蛛读取页面,因为正文照旧在 HTML 里。但它们确实会挡住用户第一眼看到的内容,间接影响页面表现。要留就控制尺寸和出现时机,别让浮层把首屏正文压到看不见。
上线前可以走一遍的检查
- 关闭 JavaScript、不带 Cookie 请求一次目标 URL,确认正文文字出现在返回的 HTML 中。
- 确认同意框的“接受”按钮不是正文加载的触发条件。
- 检查登录墙后的 URL 有没有被 Sitemap、内链或结构化数据指向。
- 核实默认版本对任意 IP 都稳定返回,其他语言版本能通过链接互达。
- 对照服务器日志,看蜘蛛实际抓到的状态码和响应体大小是否与预期一致。
抓取这一环上,最省事的办法通常也是最可靠的:能不用脚本、不用交互就交出来的内容,就用最朴素的方式交出来。