重新導向與 Google 搜尋

把網址重新導向是一種將現有網址解析為其他網址的做法,可有效讓 Google 搜尋和訪客得知網頁已移至新的位置。重新導向在下列情況特別實用:

  • 您已經將網站遷移至新的網域,並希望這次轉移作業盡可能無縫接軌。
  • 使用者透過多個不同網址存取您的網站。舉例來說,假設 https://example.com/home http://home.example.comhttps://www.example.com 這三個網址都能存取您的網站首頁,建議您從中選取一個偏好的網址 (也就是標準網址),並透過重新導向將其他網址的流量傳送到您偏好的網址。
  • 您要合併兩個網站,希望把連到淘汰網址的連結都重新導向到正確網頁。
  • 您移除了某個網頁,想要將使用者導向到新網頁。

重新導向類型總覽

雖然使用者通常無法分辨不同的重新導向類型,但 Google 搜尋會將重新導向視為強烈或微弱信號,表示重新導向目標應為標準網址。選擇重新導向的依據包括您預期重新導向多久後會開始生效,以及您希望 Google 搜尋在搜尋結果中顯示哪個網頁:

  • 永久重新導向:在搜尋結果中顯示新的重新導向目標。
  • 暫時重新導向:在搜尋結果中顯示來源網頁。

下表將說明幾種可用於設定永久及暫時重新導向的方法,並按照 Google 能夠正確解讀的機率將這些方法排序 (舉例來說,Google 正確解讀伺服器端重新導向的機率最高)。請根據您的情況與網站選擇適合的重新導向類型:

重新導向類型
永久

Googlebot 會遵循重新導向,而且索引管道會將重新導向視為強烈信號,表示重新導向目標應為標準網址。

HTTP 301 (moved permanently)

設定伺服器端重新導向

HTTP 308 (moved permanently)
meta refresh (0 秒)

設定 meta refresh 重新導向

HTTP 重新整理 (0 秒)
JavaScript location

設定 JavaScript 重新導向

Crypto 重新導向

進一步瞭解 crypto 重新導向

暫時

Googlebot 會遵循重新導向,而且索引管道會將重新導向視為微弱信號,表示重新導向目標應為標準網址。

HTTP 302 (found)

設定伺服器端重新導向

HTTP 303 (see other)
HTTP 307 (temporary redirect)
meta refresh (超過 0 秒)

設定 meta refresh 重新導向

HTTP refresh (超過 0 秒)

伺服器端重新導向

設定伺服器端重新導向時,您必須取得伺服器設定檔 (例如 Apache 的 .htaccess 檔案) 的存取權,或是利用伺服器端指令碼 (例如 PHP) 設定重新導向標頭。您可以在伺服器端建立永久及暫時重新導向。

永久的伺服器端重新導向

如需變更網頁在搜尋引擎結果中顯示的網址,建議您盡可能使用永久的伺服器端重新導向,這種做法最能確保將 Google 搜尋和使用者導向正確網頁。301308 狀態碼表示網頁已永久移至新的位置。

暫時的伺服器端重新導向

如果只想暫時將使用者傳送到其他網頁,請使用暫時重新導向,這種做法也能確保 Google 將搜尋結果中原本的網址保留較久。舉例來說,假使您網站提供的伺服器暫時無法使用,您可以設定暫時重新導向將使用者傳送至說明當下情況的網頁,而不必捨棄搜尋結果中的原有網址。

實作伺服器端重新導向

伺服器端重新導向的實作方式取決於您的代管服務和伺服器環境,或者網站後端的指令碼語言。

如要透過 PHP 設定永久重新導向,請使用 header() 函式。您必須先設定標頭,才能將任何內容傳送至畫面:

header('HTTP/1.1 301 Moved Permanently');
header('Location: https://www.example.com/newurl');
exit();

透過 PHP 設定暫時重新導向的方法與永久重新導向類似,範例如下:

header('HTTP/1.1 302 Found');
header('Location: https://www.example.com/newurl');
exit();

如果您能夠存取網路伺服器設定檔,就能自行撰寫重新導向規則。請遵循您的網路伺服器指南:

  • Apache:參閱 Apache .htaccess 教學課程Apache 網址重新編寫指南,以及 Apache mod_alias 說明文件。 舉例來說,您可以使用 mod_alias 設定形式最簡單的重新導向:

    # Permanent redirect:
    Redirect permanent "/old" "https://example.com/new"
    
    # Temporary redirect:
    Redirect temp "/two-old" "https://example.com/two-new"

    若需要更複雜的重新導向,請使用 mod_rewrite,例如:

    RewriteEngine on
    # redirect the service page to a new page with a permanent redirect
    RewriteRule   "^/service$"  "/about/service"  [R=301]
    
    # redirect the service page to a new page with a temporary redirect
    RewriteRule   "^/service$"  "/about/service"  [R]
  • NGINX:參閱 NGINX 網誌的建立 NGINX 重新編寫規則一文。和 Apache 一樣,您可以選擇透過多種方式建立重新導向,例如:

    location = /service {
      # for a permanent redirect
      return 301 $scheme://example.com/about/service
    
      # for a temporary redirect
      return 302 $scheme://example.com/about/service
    }

    若需要更複雜的重新導向,請使用 rewrite 規則:

    location = /service {
      # for a permanent redirect
      rewrite service?name=$1 ^service/offline/([a-z]+)/?$ permanent;
    
      # for a temporary redirect
      rewrite service?name=$1 ^service/offline/([a-z]+)/?$ redirect;
    }
  • 如果您使用其他網路伺服器,請洽詢您的伺服器管理員或代管商,或在自己慣用的搜尋引擎上搜尋相關指南,例如搜尋「LiteSpeed 重新導向」。

meta refresh 與效果相同的 HTTP 標頭

如果您採用的平台不支援實作伺服器端重新導向meta refresh 重新導向或許會是可行的替代方案。Google 會區分以下兩種 meta refresh 重新導向:

  • 即時 meta refresh 重新導向:在瀏覽器中載入網頁時立刻觸發。Google 搜尋會將即時 meta refresh 重新導向解讀為永久重新導向。
  • 延遲 meta refresh 重新導向:只在網站擁有者任意設定的秒數過後觸發。Google 搜尋會將延遲 meta refresh 重新導向解讀為暫時重新導向。

請透過伺服器端程式碼將 meta refresh 重新導向置於 HTML 的 <head> 元素中,或是 HTTP 標頭中。以下示範如何將即時 meta refresh 重新導向置於 HTML 的 <head> 元素中:

<!doctype html>
<html>
  <head>
  <meta http-equiv="refresh" content="0; url=https://example.com/newlocation">
  <title>Example title</title>
  <!--...-->

您也可以透過伺服器端指令碼插入效果相同的 HTTP 標頭,範例如下:

HTTP/1.1 200 OK
Refresh: 0; url=https://www.example.com/newlocation
...

如要建立 Google 會解讀為暫時重新導向的延遲重新導向,請將 content 屬性設為重新導向應延遲的秒數:

<!doctype html>
<html>
  <head>
  <meta http-equiv="refresh" content="5; url=https://example.com/newlocation">
  <title>Example title</title>
  <!--...-->

JavaScript location 重新導向

完成網址檢索後,Google 搜尋會運用網路轉譯服務來解讀及執行 JavaScript。

如要設定 JavaScript 重新導向,請在 HTML head 的指令碼區塊中將 location 屬性設為重新導向目標網址,例如:

<!doctype html>
<html>
  <head>
    <script>
      window.location.href = "https://www.example.com/newlocation";
    </script>
    <title>Example title</title>
    <!--...-->

Crypto 重新導向

即使無法實作任何傳統的重新導向方法,您還是應該努力讓使用者得知網頁或其中內容已移至其他位置。最簡單的做法是新增指向新網頁的連結並附上簡短說明,例如:

<a href="https://newsite.example.com/newpage.html">我們搬家了!請前往我們的新網站上尋找內容!</a>

對於這種可協助使用者找到新網站的做法,Google 可能會將此結果視為 crypto 重新導向 (例如 Loch Ness 怪物,其存在與否可能引發爭議);並非所有搜尋引擎都能將這種虛擬重新導向視為正式的重新導向)。

網址的替代版本

當您將網站重新導向時,Google 會持續追蹤重新導向的來源 (舊網址) 和目標 (新網址)。系統會根據重新導向性質屬於暫時或永久等信號,將其中一個網址視為標準網址,然後把另一個網址當做標準網址的「替代名稱」。替代名稱是指標準網址的其他版本,也是使用者可能比較容易識別及信任的網址。 如果使用者的查詢內容暗示他們更信任舊網址,搜尋結果中可能就會顯示替代名稱。

舉例來說,您改用新的網域名稱後,即使新網址已建立索引,Google 還是很有可能偶爾在搜尋結果中顯示舊網址,這是相當正常的情況。此外,隨著使用者開始習慣新的網域名稱,搜尋結果也會漸漸不再顯示替代名稱,您根本無需採取任何行動。