
example.com 和 www.example.com 看起來是同一個網站,但對瀏覽器和搜尋引擎來說,是兩個不同的網址。如果兩個都能打開、內容又一樣:
- 搜尋引擎要自己判斷哪一個才是正式網址,外部連結的效果也可能被分散。
- 登入狀態、Cookie 在兩個網址之間不互通,會遇到「明明登入了又被登出」的狀況。
- 流量分析與 Search Console 的資料可能分成兩份,不好判讀。
所以網站應該只用一個網址,另一個一律用 301 永久轉址轉過去。
第一步:決定要 www 還是不要
兩種都可以,對 SEO 沒有好壞之分,重點是選定之後就不要再改:
- 沒有 www(
example.com):網址比較短,現在很多網站採用。 - 有 www(
www.example.com):傳統寫法。因為www是子網域,之後要搭配 CDN 等服務時,DNS 設定比較有彈性。
已經用了很多年、搜尋排名穩定的網站,維持原本的就好,不需要為了改而改。
第二步:確認 DNS 和 SSL 憑證
轉址要能運作,兩個網址都必須先連得到你的主機:
- DNS:
example.com和www.example.com都要有指向主機的紀錄(www通常是一筆 CNAME 或 A 紀錄),可以到網域商或 DNS 管理介面確認。 - SSL 憑證:憑證要同時涵蓋兩個網址。不然訪客打
https://www.example.com時,還沒轉址就先看到「你的連線不是私人連線」的警告。主機控制台的免費憑證(Let's Encrypt、AutoSSL)通常會同時申請兩個,前提是 DNS 已經設好。
第三步:修改 WordPress 的網址設定
到後台「設定 → 一般」,把這兩個欄位改成你選定的網址(包含 https://):
- WordPress 位址(網址)
- 網站位址(網址)
例如統一成沒有 www,兩個都填 https://example.com;統一成有 www,兩個都填 https://www.example.com。儲存後會被登出,用新網址重新登入即可。
幾個注意事項:
- 兩個欄位是灰色、不能修改,代表
wp-config.php裡已經用WP_HOME、WP_SITEURL寫死了網址,要到wp-config.php裡改。 - 設定好之後,WordPress 本身就會把前台頁面從另一個網址轉過來,但只限 WordPress 處理的頁面;圖片、CSS 這些直接由主機送出的檔案不會被轉。所以還要做下一步。
萬一網址填錯、進不了後台,可以用 FTP 打開 wp-config.php,在「That's all, stop editing!」那一行上面加入正確的網址,先把網站救回來:
define( 'WP_HOME', 'https://example.com' );
define( 'WP_SITEURL', 'https://example.com' );其他修改網址的方法,也可以參考透過 functions 修改 WordPress 網址。
第四步:用 .htaccess 做 301 轉址
在網站根目錄的 .htaccess 最上面(# BEGIN WordPress 的上方)加入下面其中一段,擇一使用。這兩段同時也會把 http 轉成 https。
統一成沒有 www:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]統一成有 www:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,R=301]這兩段會自動抓網域名稱,不用改成自己的網址,跟.htaccess 用法大全裡「統一網址」的寫法相同。
同一個主機空間還有其他子網域時
主機空間裡如果還有其他子網域(例如 shop.example.com 的資料夾放在網站根目錄底下),上面「統一成有 www」那段會把它也轉成 www.shop.example.com。這時改用寫明網域的版本,把 example.com 換成自己的網域:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^ https://www.example.com%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteCond %{HTTPS} off
RewriteRule ^ https://www.example.com%{REQUEST_URI} [L,R=301]第一組把沒有 www 的網址轉到 www,第二組把 www 的 http 連線轉到 https,其他子網域都不受影響。
舊寫法為什麼要換掉
這篇文章舊版的寫法,是把網域寫死、並且轉到 http:// 開頭的網址。現在網站都使用 https,這樣會變成「先轉到 http、再轉到 https」轉兩次,速度變慢,也多一個出錯的機會,請改用上面的寫法。
使用 Cloudflare、Nginx 的網站
- 網站前面有 Cloudflare 等 CDN 時,主機判斷 https 的方式可能不準,造成「重新導向次數過多」。請參考.htaccess 強制 HTTPS 寫法裡 CDN 的寫法,或直接在 Cloudflare 的轉址規則裡設定。
- Nginx 主機不讀
.htaccess,請主機商在 Nginx 的設定裡加上轉址。
第五步:修正資料庫裡的舊網址
網站已經有很多內容的話,文章裡的圖片、內部連結可能還寫著舊網址(例如 https://www.example.com/wp-content/uploads/...)。有轉址還是打得開,但每張圖片都要多轉一次,網站會變慢。
用 Better Search Replace 這類外掛,把資料庫裡的舊網址取代成新網址,例如:
- 搜尋:
https://www.example.com - 取代為:
https://example.com
操作前一定要先備份資料庫,並先勾選外掛的試執行(dry run)確認會改到哪些地方。會用 WP-CLI 的話,也可以用:
wp search-replace 'https://www.example.com' 'https://example.com' --dry-run確認結果沒問題後,拿掉 --dry-run 再執行一次。不要直接在 phpMyAdmin 用 SQL 取代:很多外掛把設定存成「序列化」格式,裡面記錄了字串長度,直接改字會讓設定壞掉;上面兩種工具都會正確處理這個問題。
第六步:Search Console 與檢查
- Search Console:建議使用「網域」類型的資源,它會同時涵蓋有 www、沒有 www、http 與 https 所有版本。用「網址前置字元」類型的話,要確認加入的是你選定的那個網址。
- 重新提交網站地圖:網站地圖裡的網址會跟著「設定 → 一般」改變,到 Search Console 重新提交一次,做法請看WordPress 網站地圖怎麼做。
- 檢查轉址:用下面的指令(或線上的 redirect checker 工具)確認另一個網址會回應 301,而且只轉一次就到達:
curl -I http://www.example.com/sample-page/看到 301 以及 Location: https://example.com/sample-page/,就代表設定成功了。
延伸閱讀
- .htaccess 用法大全:轉址、HTTPS、安全防護、壓縮與快取常用設定(WordPress 適用)
- .htaccess 強制 HTTPS 寫法:http 自動轉 https(WordPress、Joomla 適用)
- WordPress 網站地圖(XML Sitemap)怎麼做?內建功能、SEO 外掛與提交 Google 教學
網址統一、轉址這類設定,最好在網站上線或搬家時就一次做好。正威網路行銷是 25 年經驗的基隆網頁設計工作室,提供 SEO 搜尋引擎優化與網站維護託管,歡迎來聊聊。







發表留言
還沒有人留言,歡迎第一個分享你的想法或問題。留言經審核後才會顯示,Email 不會公開。