0%

正威網路行銷工作室,專注於基隆、台北與全台客製化網頁設計,提供專業 RWD 響應式、SEO 搜尋引擎優化、品牌形象設計與網站維護託管服務。

搜尋文章
聯絡資訊
地址基隆市仁二路 220 號 5 樓
追蹤我們

WordPress 網址統一成有 www 或沒有 www:一般設定與 301 轉址完整做法

透過functions修改 WordPress 網址(URL) 和 網誌位址(URL)

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!」那一行上面加入正確的網址,先把網站救回來:

PHP
define( 'WP_HOME', 'https://example.com' );
define( 'WP_SITEURL', 'https://example.com' );

其他修改網址的方法,也可以參考透過 functions 修改 WordPress 網址。

第四步:用 .htaccess 做 301 轉址

在網站根目錄的 .htaccess 最上面(# BEGIN WordPress 的上方)加入下面其中一段,擇一使用。這兩段同時也會把 http 轉成 https。

統一成沒有 www:

Apache (.htaccess)
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:

Apache (.htaccess)
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 換成自己的網域:

Apache (.htaccess)
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 的話,也可以用:

Shell / 終端機
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,而且只轉一次就到達:
Shell / 終端機
curl -I http://www.example.com/sample-page/

看到 301 以及 Location: https://example.com/sample-page/,就代表設定成功了。

延伸閱讀

網址統一、轉址這類設定,最好在網站上線或搬家時就一次做好。正威網路行銷是 25 年經驗的基隆網頁設計工作室,提供 SEO 搜尋引擎優化與網站維護託管,歡迎來聊聊。

分享這篇文章

返回文章列表更多「Wordpress代碼教學」文章

發表留言

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

讓我們一起打造
您的專屬網站!