Reference: [WEB][PHP][SEO] 轉導、轉向(Redirect)網址的方法
在將網站更換成新網址的情況下,可能會在舊網址上使用到一些『轉導網址』的方法,以便將原本的使用者及其流量引導到新的網址去。
以下整理、討論到幾種轉導(Redirect)網址的技術方法,並且探討該方法對 SEO 的影響:
1. 使用 HTTP 通訊協定 301 Moved Permanently 來完成轉導網址 (永久轉址)
(建議使用,不會對 SEO 有不良影響)
PHP 程式範例:
額外討論:301/302 有時會被一些人用作旁門左道方法,在玩『PR劫持』(如這篇文章所述),更多的一些手法討論請看這篇文章或用 hijack 當 KeyWord 去查查。
302 在之前會造成 bot 誤以為是轉導到的網站在惡搞,而將轉導到的網站從索引中除名。所以會變得無法防止別人以此方法攻擊自己的 URL。現或許已更正。(詳情請看這裡)
當然,refresh 也能如上述 302 一樣去惡搞別人的網站。
在將網站更換成新網址的情況下,可能會在舊網址上使用到一些『轉導網址』的方法,以便將原本的使用者及其流量引導到新的網址去。
以下整理、討論到幾種轉導(Redirect)網址的技術方法,並且探討該方法對 SEO 的影響:
1. 使用 HTTP 通訊協定 301 Moved Permanently 來完成轉導網址 (永久轉址)
(建議使用,不會對 SEO 有不良影響)
PHP 程式範例:
<?php header("HTTP/1.1 301 Moved Permanently"); eader("Location: http://www.new-url.com/"); ?> <p>The document has moved <a href="http://www.new-url.com/">here</a>.</p>
- 註1: 使用者的瀏覽器必須根據 HTTP header 的 Location 欄位值(稱做URI)來轉導網址。
- 註2: 除非 Request Method 是 HEAD,不然伺服器端回覆的訊息內必須包含一短的新網址的連結(hyperlink)資訊。
<?php header("HTTP/1.1 302 Found"); header("Location: http://www.new-url.com/"); ?> <p>The document has moved <a href="http://www.new-url.com/">here</a>.</p>
- 註1: 302,在 HTTP/1.0 是『Moved Temporarily』;HTTP/1.1 是『Found』,會根據 HTTP header 的 Location 欄位值(稱做URI)來轉導網址。但是很多網路上的文章會直接稱 302 是 Moved Temporatily。
- 註2: 除非 Request Method 是 HEAD,不然伺服器端回覆的訊息內必須包含一短的新網址的連結(hyperlink)資訊。
- 註3: HTTP 1.1 中增訂了 『307 Temporary Redirect』,307 碼時只會根據 GET Request 轉導網址。
- 註4: 更多的 HTTP 302 細節和 307 會被再增訂出來的原因請參考這裡。
4. 用 JavaScript 來達到轉導網址 (放在 HTML 的 ...或 ... 中 (因為搜尋引擎的 bot 一般都不理會 JavaScript,所以做什麼動作不會被檢查。這意味著要實做『點擊計算(click counting)後再轉導到目的網址的話,用這個方法比較好(302 或 refresh 都是不好的方法)』) (如果使用者按瀏覽器的『上一頁』按鈕,不會跳回轉導頁面。) 直接在 HTML 的 HEAD 中用轉導網址 JavaScript 範例:<head> <meta http-equiv="refresh" content="0;url=http://www.new-url.com/" /> </head>
也是使用 JavaScript,但是額外透過『表單』來完成: (因為搜尋引擎的 bot 一般都不理會『表單』,所以做什麼動作不會被檢查。)<html> <head> <script language="JavaScript"> window.location.replace("http://www.new-url.com"); </script> </head> </html>
<script language="JavaScript"> document.myform.submit(); </script> <form name="myform" action="http://www.new-url.com/" method="get"></form>
額外討論: