搜索抓取

Cookie 同意弹窗、登录墙与地域限制:蜘蛛抓取时被挡住的四道门

搜索蜘蛛抓取时通常不带 Cookie、不点击弹窗,也不一定执行全部脚本。同意管理平台、登录墙、地域跳转和人机校验,都可能让正文在到达蜘蛛前就被截断。本文梳理这几类常见情况,并给出用无 Cookie 请求、关闭 JS、查看日志与渲染快照定位问题的方法。

搜索抓取

Cookie 同意弹窗、登录墙与地域限制:蜘蛛抓取时被挡住的四道门

很多时候,站点在日志里能看到搜索引擎蜘蛛的访问记录,抓取量也正常,但真正进入索引的页面始终只有首页和少数几个栏目页。问题未必出在 Sitemap 或内链,而可能是内容在到达蜘蛛之前,被几层“门”挡住了:同意弹窗、登录状态、地域跳转、人机校验。这些机制对普通用户是合理的,对蜘蛛却常常直接把正文截断。

蜘蛛看到的,是一次没带状态的请求

搜索引擎蜘蛛抓取一个 URL 时,通常不带 Cookie、不点击按钮、没有登录态,也不一定会执行页面上的全部脚本。它拿到的就是服务器在“一个干净请求”下返回的响应。如果这个响应里没有正文,只有一段等待脚本加载的容器,那后续能不能看到内容,就完全取决于渲染能力与弹窗是否阻塞。

容易被忽略的四道门

一、Cookie 同意层

同意管理平台如果采用“未同意前不输出正文”的做法,蜘蛛拿到的就是一个空壳页面。更常见的坑是:弹窗由脚本注入并覆盖整个视口,正文虽然还在 DOM 里,但渲染后可读区域被判定为主要内容为空。相对稳妥的做法是让正文照常输出,弹窗用固定定位覆盖,用户选择后只影响统计脚本,不影响内容本身。

二、登录墙与会员内容

登录后才能看的内容默认抓不到,这是设计使然,不是故障。如果希望这部分内容的标题和摘要被用户搜到,可以保留一段无需登录即可看到的介绍,并配合付费墙相关的结构化数据说明可访问范围。但要清楚:这不等于正文会被索引,也不该指望靠绕路让蜘蛛越过登录。

三、地域与 UA 判断

按 IP 归属地做 302 跳转、按 User-Agent 返回不同模板,都会让蜘蛛走到的路径与用户不一致。如果蜘蛛被跳到另一个 URL,它抓到的就是那个页面;如果按 UA 返回精简版甚至空版,抓到的那一版就是最终版本。

四、人机校验与频率限制

WAF 的脚本挑战页、验证码页,对蜘蛛来说等同于一次异常响应。偶尔一次问题不大,但如果每次抓取都撞上校验,整段 IP 可能被降速甚至短时封禁,表现为抓取量骤降。通常的解法是确认搜索引擎的 IP 段,通过反向 DNS 校验后加入白名单,而不是简单放过某个 UA 字符串。

怎么确认是哪一道门在起作用

  1. 用不带 Cookie 的请求抓取首页和一个详情页,直接看响应正文里有没有目标文字。
  2. 关闭 JavaScript 再抓一次,对比内容是否还完整。
  3. 查服务器日志,看蜘蛛拿到的状态码是 200、302 还是 403,以及返回的字节数是否明显偏小。
  4. 用渲染后的 HTML 快照对比原始 HTML,确认正文是服务端输出还是脚本拼出来的。

把门开在该开的位置

  • 正文优先服务端渲染,弹窗、推荐位、个性化模块再交给前端。
  • 被限制的内容返回明确的 401/403,不要返回 200 加空正文,那会让爬虫反复回来。
  • 同意弹窗不要占据首屏全部文本,也不要在未同意时清空主体。
  • robots.txt 与页面 meta 的规则要和实际可访问性一致,避免声明允许却被 WAF 拦下。
蜘蛛没拿到内容,通常不会带来惩罚,只是那个 URL 没有被索引的理由。排查顺序建议从“服务器返回了什么”开始,而不是从“是不是被降权了”开始。

把这些门前移或后置,让正文在最朴素的一次请求里就能被读到,往往比反复提交 Sitemap 更有效。