搜尋抓取

蜘蛛進门先撞上什么:Cookie 彈窗、同意框和登入墙

蜘蛛抓取頁面时,拿到的往往不是用戶在屏幕上看到的那一版。Cookie 同意框、登入墙、地域浮层這些交互层,可能让正文根本没進响應体。本文把几種常见情况拆開,說明哪些只影响体驗、哪些會挡住抓取,並给出一份上线前的自查清單。

搜尋抓取

蜘蛛進门先撞上什么:Cookie 彈窗、同意框和登入墙

蜘蛛拿到的,是响應体而不是屏幕

搜尋蜘蛛請求一個 URL 时,拿到的是服務器返回的那段 HTML 和它引用的资源。它不會看到浏览器窗口里浮在上面的遮罩、按钮和倒計时。所以判断某個交互层是否影响抓取,問的不是“用戶要点几下才能看到正文”,而是“正文有没有寫進最初那份 HTML”。

Cookie 同意框:是遮罩,還是正文的出口

同一個同意框,實現方式不同,结果完全不同。

  • 只是展示层:正文已经寫在 HTML 中,彈层用 CSS 盖在上面,点“接受”只是把遮罩去掉。蜘蛛依然能讀到正文,影响主要落在用戶体驗上。
  • 是正文的出口:正文要等用戶点击之後,由前端脚本請求接口再插入 DOM。蜘蛛拿到的 HTML 里正文是空的,只剩下一個占位容器。

区分方法很直接:關閉 JavaScript,或者用一個不带任何 Cookie 的請求抓一次頁面,然後在返回内容里搜尋首段正文的關鍵詞。搜不到,就属于第二種,而這類頁面在抓取路径上基本等同于空壳。

登入墙:最容易變成软 404 的一種

把内容藏在登入之後的站点不少。對蜘蛛来说,這條路径通常只有两種结局:一是 302 跳到登入頁,抓取路径拐了個弯,最终拿到的是登入頁;二是返回 200,正文只有一句“請登入後查看”。後者看起来是正常頁面,實际没有有效内容,很容易被当成空结果處理。

如果這批頁面本来就不打算被搜尋看到,更干净的做法是在入口處就挡住,用 robots 規則限制抓取,或用 noindex 表明不要收錄,而不是让蜘蛛走進去再碰一堵墙。反過来,如果希望它們被看到,那就要给蜘蛛一份不经過登入也能讀到的版本。

地域和語言浮层:重定向比彈窗更麻烦

有些站点按 IP 判断用戶所在地区,直接送去“最合适”的版本。問题在于蜘蛛的出口 IP 往往不在你预期的地区,于是它可能反复只看到預設版本,其他語言或地区版本只能靠 hreflang 和内鏈被發現。

更稳的處理方式是:預設版本稳定返回,其他版本通過可点击的連結互相可達,不把版本選擇完全押在 IP 判断上。用戶端可以有浮层提示,但底层 URL 與連結關系要保持确定。

首屏彈窗广告:不挡抓取,挡点击

優惠券、订阅提醒、App 下载引導這類浮层,一般不影响蜘蛛讀取頁面,因為正文照舊在 HTML 里。但它們确實會挡住用戶第一眼看到的内容,間接影响頁面表現。要留就控制尺寸和出現时机,別让浮层把首屏正文压到看不见。

上线前可以走一遍的检查

  1. 關閉 JavaScript、不带 Cookie 請求一次目标 URL,確認正文文字出現在返回的 HTML 中。
  2. 確認同意框的“接受”按钮不是正文加载的触發條件。
  3. 检查登入墙後的 URL 有没有被 Sitemap、内鏈或结构化資料指向。
  4. 核實預設版本對任意 IP 都稳定返回,其他語言版本能通過連結互達。
  5. 對照服務器日誌,看蜘蛛實际抓到的狀態碼和响應体大小是否與预期一致。
抓取這一环上,最省事的办法通常也是最可靠的:能不用脚本、不用交互就交出来的内容,就用最朴素的方式交出来。