搜索抓取

蜘蛛进门先撞上什么:Cookie 弹窗、同意框和登录墙

蜘蛛抓取页面时,拿到的往往不是用户在屏幕上看到的那一版。Cookie 同意框、登录墙、地域浮层这些交互层,可能让正文根本没进响应体。本文把几种常见情况拆开,说明哪些只影响体验、哪些会挡住抓取,并给出一份上线前的自查清单。

搜索抓取

蜘蛛进门先撞上什么:Cookie 弹窗、同意框和登录墙

蜘蛛拿到的,是响应体而不是屏幕

搜索蜘蛛请求一个 URL 时,拿到的是服务器返回的那段 HTML 和它引用的资源。它不会看到浏览器窗口里浮在上面的遮罩、按钮和倒计时。所以判断某个交互层是否影响抓取,问的不是“用户要点几下才能看到正文”,而是“正文有没有写进最初那份 HTML”。

Cookie 同意框:是遮罩,还是正文的出口

同一个同意框,实现方式不同,结果完全不同。

  • 只是展示层:正文已经写在 HTML 中,弹层用 CSS 盖在上面,点“接受”只是把遮罩去掉。蜘蛛依然能读到正文,影响主要落在用户体验上。
  • 是正文的出口:正文要等用户点击之后,由前端脚本请求接口再插入 DOM。蜘蛛拿到的 HTML 里正文是空的,只剩下一个占位容器。

区分方法很直接:关闭 JavaScript,或者用一个不带任何 Cookie 的请求抓一次页面,然后在返回内容里搜索首段正文的关键词。搜不到,就属于第二种,而这类页面在抓取路径上基本等同于空壳。

登录墙:最容易变成软 404 的一种

把内容藏在登录之后的站点不少。对蜘蛛来说,这条路径通常只有两种结局:一是 302 跳到登录页,抓取路径拐了个弯,最终拿到的是登录页;二是返回 200,正文只有一句“请登录后查看”。后者看起来是正常页面,实际没有有效内容,很容易被当成空结果处理。

如果这批页面本来就不打算被搜索看到,更干净的做法是在入口处就挡住,用 robots 规则限制抓取,或用 noindex 表明不要收录,而不是让蜘蛛走进去再碰一堵墙。反过来,如果希望它们被看到,那就要给蜘蛛一份不经过登录也能读到的版本。

地域和语言浮层:重定向比弹窗更麻烦

有些站点按 IP 判断用户所在地区,直接送去“最合适”的版本。问题在于蜘蛛的出口 IP 往往不在你预期的地区,于是它可能反复只看到默认版本,其他语言或地区版本只能靠 hreflang 和内链被发现。

更稳的处理方式是:默认版本稳定返回,其他版本通过可点击的链接互相可达,不把版本选择完全押在 IP 判断上。用户端可以有浮层提示,但底层 URL 与链接关系要保持确定。

首屏弹窗广告:不挡抓取,挡点击

优惠券、订阅提醒、App 下载引导这类浮层,一般不影响蜘蛛读取页面,因为正文照旧在 HTML 里。但它们确实会挡住用户第一眼看到的内容,间接影响页面表现。要留就控制尺寸和出现时机,别让浮层把首屏正文压到看不见。

上线前可以走一遍的检查

  1. 关闭 JavaScript、不带 Cookie 请求一次目标 URL,确认正文文字出现在返回的 HTML 中。
  2. 确认同意框的“接受”按钮不是正文加载的触发条件。
  3. 检查登录墙后的 URL 有没有被 Sitemap、内链或结构化数据指向。
  4. 核实默认版本对任意 IP 都稳定返回,其他语言版本能通过链接互达。
  5. 对照服务器日志,看蜘蛛实际抓到的状态码和响应体大小是否与预期一致。
抓取这一环上,最省事的办法通常也是最可靠的:能不用脚本、不用交互就交出来的内容,就用最朴素的方式交出来。