用户看得到,不代表蜘蛛拿得到
很多站点自查时是用浏览器打开页面,确认内容在,就默认蜘蛛也能抓到。但蜘蛛走的是另一条链路:它不带你的登录态,不会点“同意 Cookie”,也不会等弹窗关掉再往下看。凡是需要人做一步操作才能看到的内容,对蜘蛛来说大概率等于不存在。这类问题不会报错,日志里仍然是 200,但返回的正文里没有你真正想让它看到的东西。
几种常见的遮挡
Cookie 同意横幅与全屏弹窗
部分实现方式是把正文放在遮罩层之下,或者等到用户点过按钮之后才由 JS 去请求内容。这种情况下蜘蛛拿到的 HTML 里没有正文,后续渲染也未必会触发点击。相对稳妥的做法是:默认把内容渲染进 HTML,弹窗只做覆盖层,不阻塞内容的加载与输出。
登录墙与会员墙
如果核心内容只有登录后才能看,蜘蛛自然抓不到。可以做的通常是把摘要、目录、首段留在公开区域,把完整内容留在墙内;同时避免把整站都设成登录可见,至少保留一部分可抓取的公开页面作为入口。
按地区、设备或来源做的跳转
根据 IP 归属地、UA 或 Referer 做重定向,容易让蜘蛛在不同节点上拿到不一致的结果。蜘蛛的抓取节点分布在不同地区,同一个 URL 可能一会儿返回 A 版本,一会儿跳到 B 版本。如果确实需要做区分,尽量落在同一 URL 下的内容差异上,而不是跨域名跳转。
首屏异步加载与懒加载
列表页用滚动加载、正文用懒加载,本身不一定会挡住蜘蛛,但会缩短它一次抓取能拿到的内容量。列表页尤其明显:分页链接如果只在滚动之后才由 JS 注入,蜘蛛可能只看到第一屏的几条。
WAF 与 CDN 的拦截页
有些站点的安全策略会对高频访问的 IP 弹出验证页,蜘蛛节点也可能被误伤。表现是日志里出现 403、429,或者返回一个只有 JS 的验证页面。遇到这种情况,优先核对是否把已知搜索蜘蛛放进了白名单,并确认限速阈值是不是定得太低。
自查的几个动作
- 用不带 Cookie 的会话打开页面,或者直接抓取源码,先看正文在不在 HTML 里。
- 关掉 JS 再看一遍,判断内容是原生输出还是渲染之后才出现的。
- 对比日志里蜘蛛实际拿到的状态码和字节数,字节数明显偏小的页面值得逐个翻看。
- 把移动端和各地区节点的返回结果各取一份,检查是否一致。
处理思路
不是所有遮挡都需要拆掉。判断标准是:这个页面是否承担“被发现”和“被理解”的职责。承担入口作用的列表页、分类页、内容页,建议内容直接输出到 HTML;纯粹的功能页、需要登录的操作页,挡着反而更干净。
如果暂时无法改造,至少做两件事:一是让被遮挡的页面不要占用大量抓取配额;二是通过 Sitemap 和内链,把蜘蛛引向真正可抓取的公开页面。
自查时不要只看“页面能不能打开”,要看“不加任何前提条件时,HTML 里到底有什么”。