搜索抓取

弹窗、登录墙与地域限制:蜘蛛抓取时被挡在门外的内容

有些页面用户关掉弹窗就能看,蜘蛛却抓不到内容。这类软性拦截不是 403,而是内容压根没进初始响应,或被登录、地域规则挡在中间。本文梳理弹窗、登录墙、地域限制、付费墙四类常见情况,给出用日志和响应字节数核对的方法,以及正文直出、放行搜索蜘蛛等处理思路,并提醒不要给蜘蛛单独投喂内容。

搜索抓取

弹窗、登录墙与地域限制:蜘蛛抓取时被挡在门外的内容

做站的时候常会遇到一种情况:页面在浏览器里看着没问题,用户点开、关掉弹窗就能看到内容,但在日志里,蜘蛛对同一批 URL 的抓取要么很少,要么抓到的响应特别短。问题往往出在“软性拦截”上——不是 403 那种硬拦,而是弹窗、登录、地域规则这类把内容挡在中间的东西。无论是做蜘蛛池还是单站点运营,判断依据最终都要落到日志上。

用户看不到,不等于蜘蛛抓不到

搜索引擎蜘蛛拿到的是 HTTP 响应加上渲染后的 DOM,它不受弹窗遮挡、滚动位置、鼠标悬停的影响。反过来说,只要响应里带着完整正文,即使页面上盖着一层“订阅我们的推送”,蜘蛛仍然能读到。真正让内容消失的,是正文压根没进响应,或者要经过登录、同意、地域校验之后才被 JS 请求回来。

所以排查前先分清两件事:是“视觉上被挡住”,还是“数据上没返回”。前者对抓取影响有限,后者才会造成实际的内容缺失。

常见的几类软性拦截

覆盖式弹窗与 Cookie 同意条

这类弹窗如果只是用 CSS 定位盖在正文上,正文仍在 HTML 里,蜘蛛一般能拿到。但当弹窗逻辑是“先隐藏正文容器,用户同意后再用 JS 填充”时,抓取结果可能就是一个空壳。做法上,正文尽量直出,弹窗用脚本后置叠加,别让同意状态决定正文是否出现在初始响应里。

登录墙与会员可见

把正文完整放在登录之后,蜘蛛和未登录用户一样看不到。如果这部分内容确实想让搜索引擎了解,常见做法是保留一段公开可见的摘要或首屏内容,其余部分再要求登录。需要注意的是,不要给蜘蛛返回完整内容、给用户返回登录提示,这属于对抓取的区别对待,风险不小。

地域限制与 CDN 规则

按 IP 或地区做跳转、返回不同语言版本、直接 403,是服务器与合规配置里常见的一环。问题在于蜘蛛的抓取 IP 未必属于你预期的地区,可能被规则误伤。如果站点确实需要地域规则,建议先把主要搜索蜘蛛的 IP 段放行,再用日志核对是否还有被拦的记录。

付费墙与内容截断

付费墙最容易踩的坑是“首段直出、其余由 JS 拉取”,如果拉取接口对未登录请求返回空,蜘蛛看到的就是一篇只有开头、没有正文的页面。可以保留可公开的段落作为独立、完整的信息单元,别让公开部分读起来像被截断的残篇。

怎么确认蜘蛛到底有没有被拦

  • 在访问日志里找蜘蛛 UA 的请求,看状态码是不是 200,再看响应字节数是否明显小于正常页面。
  • 同一 URL 对比用户访问与蜘蛛访问的返回长度,差得多就值得查。
  • 关注被抓取的 URL 里,登录页、跳转页、验证页的占比是否异常升高。
  • 渲染类抓取要看渲染后的正文是否为空,而不是只看初始 HTML。

这几步做完,基本能判断是“蜘蛛没来”,还是“来了但没拿到东西”。两种情况的处理方向完全不同。

处理时的一点原则

不管用哪种方式,核心是让公开层的内容真实、稳定、可复用:正文直出,交互元素后置;该公开的部分不要藏在 JS 请求之后;地域和反爬规则给已知搜索蜘蛛留出通道。改完之后,用日志里蜘蛛请求的状态码和字节数变化来验证,而不是凭感觉判断。

不要为了抓取专门给蜘蛛返回一套和用户不同的内容。这类区别对待一旦被识别,损失通常比少抓几个页面更大。

收尾核对

把上面几类拦截列成清单,逐项对照:弹窗是否影响初始响应、正文是否依赖登录、地域规则是否误伤、付费墙是否只留下残段。改完后观察一到两周的抓取日志,看正文完整返回的比例有没有变化。抓取这件事很少有一步到位的调整,多数时候是靠日志反复核对,慢慢收敛的。