網站收錄

301、302、meta refresh 和 JS 跳轉:收錄结果會差在哪里

同样是頁面跳轉,用 301、302、meta refresh 還是 JS 實現,搜尋引擎對两個 URL 之間關系的判断並不相同。本文說明永久跳轉與临时跳轉的语义差异、脚本跳轉可能遇到的渲染風險、跳轉鏈和循环的排查方式,以及 URL 迁移时值得逐項检查的几個点,帮助你避免舊地址繼續被索引、新地址迟迟進不来的情况。

網站收錄

301、302、meta refresh 和 JS 跳轉:收錄结果會差在哪里

做 URL 迁移、合並多個域名、處理歷史遗留地址时,跳轉是最常用的手段。但跳轉不只是一個把用戶送到新地址的技術细节,它同时也在向搜尋引擎說明這两個 URL 之間是什么關系。同样是從 A 跳到 B,用 301、302、meta refresh 還是 JS,最终索引里留下哪個地址,结果可能不一样。

先分清两類跳轉语义

可以把跳轉分成两派:永久性跳轉临时性跳轉

  • 永久性:301、308。表示舊地址以後不再使用,權重和索引信号會向新地址轉移。
  • 临时性:302、307。表示這只是暂时狀態,舊地址理论上還會恢复。

搜尋引擎對永久跳轉的處理更彻底,會尝试把舊 URL 從索引里替換成新 URL。临时跳轉則倾向于保留舊 URL 的索引狀態,同时去抓取新地址。所以迁移頁面时如果用了 302,可能出現舊地址還在被搜到、新地址迟迟不進来的情况;而且每次訪問都要多一跳,抓取效率也更差。

meta refresh 和 JS 跳轉

這两種方式不是 HTTP 层的响應,而是頁面内容里的指令。

meta refresh 寫在 HTML 头部,浏览器能识別,主流搜尋引擎也會處理一部分,但它的信号明确程度不如 301。尤其是有延时的寫法,比如让頁面停留几秒再跳轉,用戶會看到一段空白或停留狀態,爬虫也可能把它当成普通頁面内容,而不是跳轉指令。零秒刷新的行為接近 301,但语义表達依然偏弱。

JS 跳轉需要执行脚本才會發生。搜尋引擎渲染頁面後可能跟随,但存在两個風險:一是渲染本身有排队和超时,跳轉未必每次都被执行到;二是如果頁面没有其他可抓取内容,這個 URL 在爬虫眼里可能就是一個空壳。用 JS 做跳轉,等于把能否被正确發現這件事交给了渲染环节。

跳轉鏈和循环是更常见的問题

比單次跳轉更容易被忽略的是鏈條:A 跳 B,B 跳 C,C 跳 D。每多一跳,信号都可能被消耗,而且爬虫需要串行訪問多個地址,抓取成本成倍增加。更麻烦的是循环,比如 A 跳 B、B 又跳回 A,或者经過几跳後落在一個 noindex 頁面上,最终目标既不可索引,也浪費了抓取机會。

常见诱因包括:CDN 和源站各配了一條跳轉規則、HTTP 到 HTTPS 與 www 到非 www 叠加、多條 URL 規范化規則互相覆盖。排查时應该以最终落地 URL 為准,而不是只看第一次响應。

自查时看這几件事

  1. 用抓包工具或重定向检查工具,看完整鏈路共有几跳,最後一跳落在哪個 URL。
  2. 確認最终 URL 返回 200,且没有被 robots.txt 屏蔽、没有 noindex。
  3. 迁移场景優先使用 301 或 308,而不是 302 或 JS。
  4. 跳轉目标尽量是内容對應的頁面,不要把所有舊地址统一送到首頁。
  5. 内鏈、站点地图、canonical 都指向最终 URL,减少舊地址被反复發現的机會。
跳轉是一種声明,不是命令。搜尋引擎會根據它調整對 URL 關系的判断,但最终决定收錄的,仍然是目标頁面能不能被正常抓取、有没有值得索引的内容。把跳轉配干净,只是把门口的障碍清掉。