301 Moved Permanently 是 HTTP 狀態碼之一,告訴瀏覽器與搜尋引擎:「請求的資源已永久移動到新位置」。不同於 302(臨時重定向),301 會傳遞原頁面的權重(PageRank)、收錄歷史與鏈接權益,是網站換域名、調整 URL 結構、合併內容時的標準做法。
| 方式 | SEO 影響 | 適用場景 |
|---|---|---|
| 301 永久重定向 | 權重完整傳遞,無規範化問題 | 換域名、目錄重構、HTTPS 遷移 |
| 302 暫時重定向 | 權重不傳遞,易產生 URL 規範化混淆 | 臨時維護、A/B 測試 |
| JavaScript / Meta Refresh | 搜尋引擎可能視為作弊,延遲傳遞權重 | 極少數無法控制 Server Header 的環境 |
<?php
// 目標網址
$targetUrl = 'https://www.new-domain.com/new-path';
// 發送 301 狀態碼(建議顯式指定協議版本)
header('HTTP/1.1 301 Moved Permanently');
// 設定新位置
header('Location: ' . $targetUrl);
// 立即終止腳本,避免後續輸出干擾
exit();
?>
將上述代碼置於**舊網站所有入口檔案的最頂端**(在任何 HTML 輸出之前)。常見檔案包括:
index.phpforumdisplay.php、viewthread.php(Discuz 類論壇)archiver/index.php、space.php、tag.php、blog.php若使用框架(Laravel、ThinkPHP、Yii 等),請在路由中間件或基礎控制器的 beforeAction 中統一處理,避免重複代碼。
使用 curl -I 檢查回應頭:
$ curl -I https://old-domain.com/
HTTP/1.1 301 Moved Permanently
Location: https://www.new-domain.com/new-path
...
瀏覽器開發者工具 Network 分頁亦可看到 301 狀態碼與 Location 標頭。
exit(): 否則腳本繼續執行可能輸出內容,導致瀏覽器忽略重定向。A → B → C,損耗爬蟲預算與頁面速度。$targetUrl . '?' . $_SERVER['QUERY_STRING']。301 重定向是 SEO 遷移的基石。PHP 端僅需幾行 header() 即可實現,關鍵在於「正確部署位置」與「徹底清理重定向鏈」。配合 Search Console 的「網站遷移」工具提交新舊網址對照,可加速搜尋引擎權重轉移。