做站点运营的人多半见过这样的页面:打开速度不慢,内容也齐全,但搜索蜘蛛看到的 HTML 里几乎找不到可抓的链接。排查到最后,问题常常不在服务器,也不在内链规划,而是被一层“礼貌”挡住了——Cookie 同意弹窗、首访引导层、订阅浮层,或者干脆是“登录后查看全文”。
先分清:抓取看到的是 HTML,渲染是后一步
搜索蜘蛛第一次取回页面时,拿到的是服务端返回的原始 HTML。只有在需要渲染时,才会执行 JavaScript,生成最终 DOM。如果链接是在用户点击“接受 Cookie”之后由 JS 注入的,那么这一次的链接发现就可能打折扣——渲染与否、渲染到什么程度,都不是站点能完全掌控的变量。
Cookie 弹窗的三种常见实现
1. 全屏遮罩,解除后再渲染正文
这类实现往往把正文和链接放在“同意”的回调里异步加载。对用户影响不大,对抓取却等于把主要内容推迟到一次交互之后。更稳妥的做法是:正文照常输出,弹窗只是一层视觉覆盖,不改变 DOM 里已有的链接。
2. 服务端按 UA 或首访标记判断
有的站点检测到特定 UA 就不展示弹窗,这本身可以接受,前提是判断逻辑别误伤——例如把正常访问误判为“需登录”,或者在跳转中丢掉了原始地址,形成一串没有意义的重定向。
3. 弹窗内容通过 iframe 引入
弹窗里的文字若放在独立 iframe 中,链接对主文档而言属于外部资源,通常不会被当作正文链接处理。运营层面不妨把它当成一个提醒:真正想被发现的链接,尽量写在主文档里。
登录墙与付费墙的分寸
登录墙不是不能有,关键是把边界画清楚:
- 完全拦截:整站或整栏目必须登录,这类 URL 不必大量对外暴露,站点地图里也不必提交。
- 部分预览:首段或前几屏可见,其余折叠。此时至少保证预览部分含有关键内链,让蜘蛛知道这个页面所处的位置与主题。
- 仅互动需登录:评论、收藏、下载需要登录,正文与链接公开。这是对抓取相对友好的一种折中。
需要留意的是,爬虫通常不具备登录态。若列表页的链接只在登录后才输出,那么栏目页在蜘蛛眼里可能表现为“没有出链的孤岛”,栏目规划得再合理也难以把权重传导下去。
一份可落地的自查清单
- 关闭 JavaScript 抓取一次页面,看看还剩多少链接。剩下的那部分,是抓取最稳的部分。
- 用普通 UA 与常见爬虫 UA 各请求一次,对比返回的 HTML 大小与状态码,偏差过大就值得查原因。
- 检查弹窗是否改变了 DOM 结构。视觉遮罩可以,替换正文不建议。
- 确认登录后的内容有对应的公开入口页,而不是仅靠站内搜索才能到达。
- 留意重定向链:从被拦截页跳到登录页时,别把原始 URL 丢失成参数拼出来的新地址。
和 URL 发现的关系
URL 发现的本质是“从一个已知地址走到下一个地址”。入口如果被弹窗、登录、iframe 拿走了,链路就断在第一步。站点运营里很多抓取问题,最后都归结为一句朴素的话:把链接写进 HTML,让人和蜘蛛都能顺着点下去。
弹窗可以留住用户,但不该拦住发现。先保证链接在 HTML 里,再谈交互体验;顺序反了,代价往往在后期的发现与流量上慢慢显现。
不承诺具体的收录结果,也不存在一劳永逸的设置。定期用日志和渲染对比做检查,比一次性改完更可靠。