蜘蛛池入口頁的作用是把蜘蛛引到目标頁,而這個“引”的動作,最终要落在跳轉上。入口頁本身内容通常不多,蜘蛛抓到它之後能不能繼續往下走、走到哪一步,跳轉方式的影响比很多人想的大。
跳轉為什么值得單獨拿出来看
蜘蛛對入口頁的處理大致分两步:先抓取入口頁本身,再從頁面里發現下一個 URL。跳轉方式不同,這两步的衔接方式就不同——有的在 HTTP 层面直接完成,有的要等頁面解析後才执行,中間還可能出現执行失敗的分支。
几種常见跳轉方式的實际表現
301 永久重定向
服務器在响應头里直接返回 301 和目标地址,蜘蛛不需要渲染頁面就能拿到下一步。這種方式中間环节最少,信号也比較明确。需要注意的是,301 在一次抓取里通常只跟随有限层數,如果鏈路上套了多层 301,後面的容易被放弃。
302 / 307 临时重定向
同样是响應头跳轉,区別在于语义是“临时”。蜘蛛在短期抓取中的處理與 301 接近,但長期會反复回来確認原地址是否恢复。如果入口頁會長期指向同一個目标頁,用 301 更合适;如果是临时切換或做灰度,302 才符合语义。
JS 跳轉
頁面先返回 200 和一段脚本,由浏览器或渲染队列执行 location 跳轉。它的好處是入口頁确實是一個可訪問、可解析的頁面;代價是能不能走到下一步,取决于蜘蛛是否渲染 JS、渲染队列的排队情况和执行时机。纯 JS 跳轉對抓取能力較弱的爬虫不算友好。
meta refresh
寫在 HTML head 里的跳轉,延迟可以设成 0 或几秒。它不依赖 JS,兼容性比 JS 跳轉好,但仍然需要頁面被解析到 head 部分。延迟设得越長,蜘蛛在入口頁停留的不确定性越大。
怎么選
- 入口頁主要作用是“過路”,目标頁是唯一的下一步:優先 301,並让鏈路保持一层。
- 需要入口頁本身被当作一個正常頁面看待:可以考虑 200 加 JS 或 meta refresh,但要接受部分蜘蛛可能不走到底。
- 做临时切換、不想把信号绑死:302 比 301 更符合语义。
- 同一批入口頁尽量统一跳轉方式,混用會让日誌變难讀,排查問题时不好定位。
容易被忽略的几点
第一,跳轉目标不要指向需要登入、需要驗證碼或本身返回 4xx 的頁面,跳過去也是断的。第二,目标頁最好和入口頁在协议上保持一致,https 入口跳到 http 目标會多出一层。第三,跳轉鏈上的每一跳都要消耗時間,蜘蛛對同一入口頁的訪問频率有限,鏈路越長,真正走到目标頁的概率越低。
跳轉方式本身不保證蜘蛛會来,也不保證目标頁會被收錄。它只决定蜘蛛在入口頁這一步之後,能不能顺畅地走到下一站。把這一步做干净,比把入口頁做得花哨更有意义。
上线後看什么
上线後主要看两處日誌:入口頁的訪問记錄,和目标頁的訪問记錄。如果入口頁有蜘蛛訪問、目标頁几乎没有,多半是跳轉這一环出了問题,可以先查响應头是否符合预期,再看入口頁是否带了 noindex、robots 限制或脚本报错。