用戶看得到,不代表蜘蛛拿得到
很多站点自查时是用浏览器打開頁面,確認内容在,就預設蜘蛛也能抓到。但蜘蛛走的是另一條鏈路:它不带你的登入態,不會点“同意 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 里到底有什么”。