入口頁把蜘蛛引到目标頁,中間那一下“怎么過去”,很多人是随手寫的。實际上跳轉方式會影响蜘蛛能不能顺利走完這一程,也會影响抓取額度花在哪里。下面把 301、302、JS 跳轉、meta 刷新几種常见做法拆開说,顺便把容易忽略的狀態碼問题一起列出来。
先想清楚入口頁的角色
入口頁的职责通常只有两個:被蜘蛛發現,並且把蜘蛛送去目标頁。它本身不需要承载太多内容,但要让蜘蛛在一次訪問里完成“進来—看懂—繼續走”這三步。任何让蜘蛛停下来猜、或者反复重试的寫法,都會拉低整條鏈路的效率。
四種跳轉方式的差別
301 永久跳轉
301 是最明确的表達:這個地址以後归到那邊去了。搜尋引擎會把两個地址做合並處理,蜘蛛顺着走的意愿也最高。如果入口頁本身就是一次性的過渡頁,用 301 干净利落。缺点是它等于否定了這個入口頁的獨立價值,如果之後還想用同一個入口頁反复更換目标頁,就不太合适。
302、307 临时跳轉
302 表示暂时指到別處,原地址仍然有效。入口頁需要長期存在、目标頁會不定期更換时,302 更贴合语义。307 與 302 類似,区別在于明确保留原請求方法,對蜘蛛来说通常没有實质差异。需要注意的是,有些站点把 302 当萬能跳轉長期使用,時間久了,蜘蛛對入口頁本身的抓取兴趣可能下降。
JS 跳轉
JS 跳轉依赖頁面渲染。蜘蛛能不能执行,取决于它的渲染能力,以及渲染所需的资源有没有被 robots.txt 或防火墙挡住。能用服務端跳轉就別只靠 JS,尤其当入口頁是纯静態模板、没有其它内容支撑时,JS 跳轉有被当成空頁面處理的風險。
meta refresh
meta 刷新的兼容性一般,多數搜尋引擎能识別,但等待時間设得過長,容易被当作普通頁面處理。如果一定要用,把等待時間设在 0 到 1 秒,並在頁面上放一個可见的文字連結作為兜底。
比跳轉更容易出問题的是狀態碼
- 200 空壳頁:頁面能打開,正文只有一句“正在跳轉”。蜘蛛抓完發現没有内容,下次再来的意愿會降低。
- 403 / 404:入口頁失效後没有补位,蜘蛛反复撞空,浪費抓取額度。
- 503 長期挂着:短期维護用 503 是合理的,挂太久蜘蛛會降低訪問频率。
- 429 频繁出現:說明入口頁短時間内被請求得太多,需要检查是不是大量入口頁压在同一台服務器上。
分场景的组合建议
- 入口頁長期复用、目标頁會更換:用 302,並在頁面上配一個可见的文字連結。
- 入口頁一次性、之後不再使用:用 301,直接合並干净。
- 入口頁本身有可讀内容:正常以 200 輸出,把目标頁作為正文中的推荐連結,不必强制跳轉。
- 必须用 JS 或 meta:同頁保留静態連結兜底,並確認渲染资源没有被拦截。
常见誤区
一是全站统一用同一種跳轉,忽略入口頁的生命周期差別;二是跳轉层层嵌套,A 跳 B、B 再跳 C,蜘蛛走到第三层就容易放弃;三是跳轉設定與 robots.txt 冲突,把渲染需要的脚本一起挡住,頁面在蜘蛛眼里就變成空的。
上线前的检查清單
- 用不带缓存的工具訪問一次,確認返回碼與预期一致
- 確認跳轉鏈路不超過两层
- 確認目标頁可正常訪問,狀態碼為 200
- 確認跳轉失敗时有可讀的兜底頁面,而不是一片空白
跳轉方式是入口頁的基本功。改動之前先记錄目前用的是哪一種,一次只動一個變量,後面的變化才看得懂。