0%

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

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

網址有大寫英文字母怎麼辦?WordPress 自動轉到小寫網址

網址有大寫英文字母怎麼辦?WordPress 自動轉到小寫網址 封面

WordPress 的網址預設都是小寫,例如 /about-us/。但網址不一定都照你設定的被打出來:

  • 印在名片、DM 上的網址,設計師排版時寫成 /About-Us/ 比較好看。
  • 別的網站連結你時,打成了大寫。
  • 從舊網站搬過來,舊網址本來就有大寫。

Google 搜尋中心的說明寫得很清楚:Google 處理網址時會區分大小寫,/APPLE 和 /apple 會被當成兩個不同的網址。同一頁內容有好幾個網址,搜尋的分數就被分散了。

這篇先實測 WordPress 遇到大寫網址會怎樣,再用一段程式碼讓所有大寫網址都 301 轉到小寫。

WordPress 本來會怎麼處理

在測試站(WordPress 7.1.3)建立一篇文章 /keelung-shop-website/、一個頁面 /about-us/、一個分類 /category/news/,沒有加任何程式碼,直接用大寫網址打開:

  • 文章、頁面:/Keelung-Shop-Website/、/About-Us/ 都正常打開,狀態碼 200,內容和小寫網址一樣。頁面裡的「標準網址」(canonical)標籤指向小寫的網址。
  • 分類頁:/category/News/ 一樣打得開,但頁面上沒有標準網址標籤;/Category/news/(前面的 category 大寫)直接變成找不到頁面。

也就是說,文章和頁面靠標準網址標籤告訴 Google 正確的網址,但分類頁沒有,有些寫法還會打不開。加一段轉址最乾淨。

程式碼

放在子佈景主題的 functions.php,或用 Code Snippets 這類外掛新增:

PHP
// 網址有大寫英文字母時,301 轉到全部小寫的網址(查詢字串 ? 後面的部分不動)
add_action( 'template_redirect', function () {
	if ( ! in_array( $_SERVER['REQUEST_METHOD'] ?? 'GET', array( 'GET', 'HEAD' ), true ) ) {
		return; // 表單送出(POST)不轉,避免資料不見
	}
	$uri   = $_SERVER['REQUEST_URI'] ?? '/';
	$path  = (string) parse_url( $uri, PHP_URL_PATH );
	$query = parse_url( $uri, PHP_URL_QUERY );

	// 中文網址會被編碼成 %E5%9F%BA 這種格式,裡面的大寫是編碼,不算
	$letters = preg_replace( '/%[0-9A-Fa-f]{2}/', '', $path );
	if ( ! preg_match( '/[A-Z]/', $letters ) ) {
		return;
	}

	$target = strtolower( $path ) . ( $query ? '?' . $query : '' );
	wp_safe_redirect( $target, 301 );
	exit;
}, 1 ); // 比 WordPress 自己的轉址(優先順序 10)早執行

逐段說明:

  • template_redirect:WordPress 準備顯示前台頁面之前會執行這個 hook。後台、登入頁、REST API 都不會經過這裡,不會被影響。
  • 只轉 GET、HEAD:表單用 POST 送出時,如果轉址,送出的資料會不見,所以跳過。
  • 查詢字串不轉:? 後面的部分原樣保留。廣告追蹤碼的值常常有大小寫,例如 utm_campaign=Autumn_Sale,轉成小寫會讓報表對不起來。
  • 中文網址不受影響:中文網址在網址列裡會變成 %E5%9F%BA 這種編碼,裡面的大寫字母不是真的大寫,程式碼先把它們拿掉再判斷。
  • 用 301:告訴搜尋引擎這是永久的搬家,舊網址的分數會轉到新網址。
  • 優先順序 1:比 WordPress 內建的轉址更早執行,避免兩次轉址。

實際測試的結果

同一個測試站,加上程式碼之後:

  1. /keelung-shop-website/:維持 200,不轉址。
  2. /Keelung-Shop-Website/、/KEELUNG-SHOP-WEBSITE/:301 轉到 /keelung-shop-website/,打開是 200。
  3. /Keelung-Shop-Website/?utm_source=FB&utm_campaign=Autumn_Sale:301 轉到 /keelung-shop-website/?utm_source=FB&utm_campaign=Autumn_Sale,查詢字串的大小寫沒變。
  4. /About-Us/:301 轉到 /about-us/。
  5. /category/News/、/Category/news/:都 301 轉到 /category/news/,原本打不開的那個也能看了。
  6. 中文網址:小寫編碼和大寫編碼的版本都直接打開,沒有轉址。
  7. /No-Such-Page/:301 轉到 /no-such-page/,還是找不到頁面(本來就不存在)。
  8. 用 POST 送出到 /Keelung-Shop-Website/:沒有轉址,照常處理。
  9. 上傳一張檔名有大寫的圖片 Logo-ABC.png,用原本的網址打開:200,正常顯示。圖片這類實際存在的檔案,由主機直接回應,不會經過 WordPress,所以不受影響。

要注意的地方

  • 已經存在的檔案不會被轉:圖片、PDF 的檔名有大寫,網址也要照原本的大小寫打,主機上的檔名在 Linux 主機是分大小寫的。新上傳的檔案最好一開始就用小寫的檔名。
  • 網站有其他程式用大寫網址:例如某個外掛的頁面網址固定有大寫,加上程式碼後要點點看還能不能用。
  • 加了快取外掛的網站:轉址是 WordPress 執行的,被快取起來的頁面可能不會經過這段程式。加完之後清一次快取再測。

統一網址的同一個道理,還有「有沒有 www」「http 還是 https」,做法在〈WordPress 網址統一成有 www 或沒有 www〉;用主機設定轉址的方法在〈.htaccess 用法大全〉。

延伸閱讀

網址統一了,搜尋的分數才不會被分散。正威網路行銷是 25 年經驗的基隆網頁設計工作室,網站管家年費包含每年 12 次小修改,像這樣的小調整都可以交給我們,台北與全台客戶也歡迎免費諮詢。

分享這篇文章

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

發表留言

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

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