蜘蛛拿到的,是响應体而不是屏幕
搜尋蜘蛛請求一個 URL 时,拿到的是服務器返回的那段 HTML 和它引用的资源。它不會看到浏览器窗口里浮在上面的遮罩、按钮和倒計时。所以判断某個交互层是否影响抓取,問的不是“用戶要点几下才能看到正文”,而是“正文有没有寫進最初那份 HTML”。
Cookie 同意框:是遮罩,還是正文的出口
同一個同意框,實現方式不同,结果完全不同。
- 只是展示层:正文已经寫在 HTML 中,彈层用 CSS 盖在上面,点“接受”只是把遮罩去掉。蜘蛛依然能讀到正文,影响主要落在用戶体驗上。
- 是正文的出口:正文要等用戶点击之後,由前端脚本請求接口再插入 DOM。蜘蛛拿到的 HTML 里正文是空的,只剩下一個占位容器。
区分方法很直接:關閉 JavaScript,或者用一個不带任何 Cookie 的請求抓一次頁面,然後在返回内容里搜尋首段正文的關鍵詞。搜不到,就属于第二種,而這類頁面在抓取路径上基本等同于空壳。
登入墙:最容易變成软 404 的一種
把内容藏在登入之後的站点不少。對蜘蛛来说,這條路径通常只有两種结局:一是 302 跳到登入頁,抓取路径拐了個弯,最终拿到的是登入頁;二是返回 200,正文只有一句“請登入後查看”。後者看起来是正常頁面,實际没有有效内容,很容易被当成空结果處理。
如果這批頁面本来就不打算被搜尋看到,更干净的做法是在入口處就挡住,用 robots 規則限制抓取,或用 noindex 表明不要收錄,而不是让蜘蛛走進去再碰一堵墙。反過来,如果希望它們被看到,那就要给蜘蛛一份不经過登入也能讀到的版本。
地域和語言浮层:重定向比彈窗更麻烦
有些站点按 IP 判断用戶所在地区,直接送去“最合适”的版本。問题在于蜘蛛的出口 IP 往往不在你预期的地区,于是它可能反复只看到預設版本,其他語言或地区版本只能靠 hreflang 和内鏈被發現。
更稳的處理方式是:預設版本稳定返回,其他版本通過可点击的連結互相可達,不把版本選擇完全押在 IP 判断上。用戶端可以有浮层提示,但底层 URL 與連結關系要保持确定。
首屏彈窗广告:不挡抓取,挡点击
優惠券、订阅提醒、App 下载引導這類浮层,一般不影响蜘蛛讀取頁面,因為正文照舊在 HTML 里。但它們确實會挡住用戶第一眼看到的内容,間接影响頁面表現。要留就控制尺寸和出現时机,別让浮层把首屏正文压到看不见。
上线前可以走一遍的检查
- 關閉 JavaScript、不带 Cookie 請求一次目标 URL,確認正文文字出現在返回的 HTML 中。
- 確認同意框的“接受”按钮不是正文加载的触發條件。
- 检查登入墙後的 URL 有没有被 Sitemap、内鏈或结构化資料指向。
- 核實預設版本對任意 IP 都稳定返回,其他語言版本能通過連結互達。
- 對照服務器日誌,看蜘蛛實际抓到的狀態碼和响應体大小是否與预期一致。
抓取這一环上,最省事的办法通常也是最可靠的:能不用脚本、不用交互就交出来的内容,就用最朴素的方式交出来。