入口頁把蜘蛛带到目标頁,靠的不只是頁面上的連結,跳轉也是常见手段。但跳轉發生在 HTTP 层、HTML 层還是脚本层,蜘蛛的反應完全不同。選错方式,蜘蛛可能根本没走到目标頁。
蜘蛛看到跳轉时的第一反應
服務器端跳轉(301、302)是 HTTP 响應头里的回答。蜘蛛發出請求後,還没開始解析頁面内容就拿到了新地址,這是成本最低、也最容易被跟随的一類跳轉。寫在 HTML 或脚本里的跳轉,蜘蛛得先把頁面拿到手、解析甚至渲染之後才知道,中間多了一层不确定性。
四種跳轉方式的實际差別
301:永久迁移
301 等于告诉蜘蛛「這個地址以後不用来了」。它會逐渐把原 URL 的抓取记錄和權重信号轉移到新地址,原地址在索引里會慢慢淡出。
如果入口頁只是临时指路,用 301 就等于让入口站自己退场。蜘蛛池里打算長期复用的入口节点,一般不该用 301 把訪問者全部送走。
302、307:临时指路
302 和 307 表示地址只是暂时變了,蜘蛛一般會保留原 URL 的抓取,也不會立刻做權重迁移,适合临时更換目标頁的场景。
但如果一個入口頁長期挂着 302,蜘蛛容易把它理解成一個不稳定的地址,抓取優先級和频率都可能往下調。临时跳轉最好不要變成常態。
meta refresh:寫在 HTML 里的跳轉
meta refresh 需要蜘蛛先下载並解析 HTML 才能讀到。延迟设為 0 时最干脆,设成几秒的延迟,蜘蛛未必愿意等。
這種方式還有一個副作用:如果入口頁正文很薄、几乎只有一條 refresh 指令,蜘蛛容易把它归進空壳頁那一類。即便最後跟過去了,對入口頁本身的评價也不會高。
JS 跳轉:不一定被执行
搜尋引擎确實能执行一部分 JavaScript,但渲染是排队進行的,成本比直接讀源碼高。用 JS 跳目标頁,蜘蛛讀源碼时可能什么都没發現,要等到渲染阶段才看到目标地址,也可能因為资源有限而错過。
把 JS 跳轉当主力,等于把「蜘蛛能不能到目标頁」這件事交给了渲染队列。
跳轉鏈別拉太長
A 跳到 B,B 又跳到 C,C 才到目标頁——這種多級跳轉每多一层,传递的權重就被稀释一次,蜘蛛中途放弃的概率也更高。能一步到位就不要绕路。
更稳妥的几種選擇
- 想長期保留入口頁:用頁面上的普通超連結指向目标頁,入口頁繼續存在,蜘蛛還能重复来訪。
- 临时換目标:用 302,別用 301。
- 整站永久搬迁:用 301,並且把新地址固定下来,不要来回改。
- 不确定是否被支持:不要用 JS 或 meta refresh 作為唯一通道,至少留一條可抓取的超連結。
跳轉解决的是「把蜘蛛送過去」,但它同时也在消耗入口頁自己。跳得越彻底,入口頁留下的抓取價值就越少。
跳轉是否生效,看日誌最直接
調整跳轉方式之後,翻蜘蛛日誌確認两件事:目标頁有没有出現蜘蛛的抓取记錄;入口頁的抓取频率有没有明顯下滑。如果目标頁的抓取量没變化,入口頁的抓取却掉了,多半是跳轉方式把入口頁本身牺牲掉了。
另外,跳轉後的目标地址尽量保持稳定。频繁更換落点,蜘蛛會重新评估整條路径,之前积累的抓取习惯也就白費了。