先给结论:如果入口頁要登入後才渲染連結,或者必须带上服務端下發的 Cookie 才能看到内容,搜尋蜘蛛大概率看不到里面的連結。它不會替你走一遍登入流程,也不會繼承你浏览器里的會话。
搜尋蜘蛛是以什么身份来訪問的
把搜尋蜘蛛当成一個陌生人最贴切:
- 不带你的登入態,也不带你浏览器里的 Cookie;
- 不提交表單、不輸入驗證碼;
- 請求头里主要靠 UA 标识身份,偶尔带上来源頁地址;
- 會在短時間内用同一個来源连續抓很多次,不是一個人慢慢看。
所以凡是必须先證明你是自己人才能看到連結的頁面,對蜘蛛来说通常就是一道墙。
几種容易忽略的隐形登入墙
1. Cookie 中間件
有些入口頁會在第一次訪問时種一個 Cookie,没有這個 Cookie 就跳到引導頁。你自己測試时浏览器已经存過 Cookie,看着一切正常;蜘蛛每次都是第一次来,會被反复跳走。
2. CDN 或 WAF 的人机校驗
開啟校驗後,第一次請求返回的是一段脚本,通過之後才拿到真實 HTML。這類挑战通常带時間戳、加密參數和二次請求,搜尋蜘蛛被拦下的概率並不低。
3. 放行只做了一半
為了让蜘蛛進来,有些站点按 UA 放行,但後續取連結的接口仍要求簽名 Token。结果頁面放行了,連結接口返回 403,蜘蛛只拿到一個空壳。
怎么驗證入口頁對蜘蛛是否可见
- 翻服務器日誌里搜尋蜘蛛的請求,看狀態碼和返回体积。返回 200 但体积只有几百字节,多數是空模板或跳轉頁。
- 用不带 Cookie 的方式重新請求一次入口頁,對比返回的 HTML 里還有没有目标連結。
- 把返回的 HTML 存成文件,直接在源碼里搜目标 URL 的關键片段,不要只看浏览器渲染後的画面。
- 用搜尋引擎官方提供的抓取測試工具,分別看它抓到的原始 HTML 和渲染後 HTML。
判断标准很简單:一次無 Cookie、無登入態的 GET 請求,返回的源碼里能不能看到目标連結。
入口頁确實需要用戶登入,怎么办
登入態頁面本来就不适合承担 URL 發現的职责。可行的做法是另找一條公開路径:
- 單獨做一個公開可訪問的入口頁,只放連結,不做身份校驗;
- 把目标 URL 放進公開的 sitemap,走搜尋引擎常規的發現渠道;
- 站内正常可訪問的栏目頁、聚合頁顺带带上這些連結;
- 如果确實要区分訪客,把校驗放到目标頁,入口頁保持干净。
另外要提醒一句,给蜘蛛放行不等于给它開後门登入。用 UA 白名單绕過登入本身並不稳妥,UA 可以伪造,還容易让同一個頁面出現两套内容。
顺带检查這几個小地方
- 入口頁是否被缓存成登入前的版本,蜘蛛拿到的始终是舊缓存;
- 是否只在移動端或某個地域才顯示連結,蜘蛛訪問的那個版本里没有連結;
- 連結是不是靠前端框架渲染出来的,原始 HTML 里根本没有;
- 返回的到底是 200 還是 302,跳轉目标是否還需要再校驗一次。
總结一下:入口頁的核心作用是把連結暴露给搜尋蜘蛛,任何形式的身份校驗都會削弱這個作用。與其琢磨怎么让蜘蛛通過驗證,不如把它做成一個谁都能打開、源碼里就能看到連結的普通頁面,再用日誌持續確認蜘蛛确實拿到了這些連結。至于最终收錄與否,還取决于目标頁本身的内容质量和可訪問性,入口頁只能解决被發現這一步。