DNS 中 CNAME 記錄怎麼用?你的子網域可以這樣設定

更新日期: 2025 年 6 月 26 日

你買了自己的網址,想讓別人輸入 blog.你的網址.com 就能看到部落格、或 shop.你的網址.com 開啟你的商店頁面。

結果 DNS 後台叫你「新增一筆 CNAME 記錄」——

蛤?這到底是什麼?要填什麼?會不會填錯整個網站就壞掉?

別擔心,這篇就是寫給你的。

我們會用最簡單的方式,帶你搞懂:

  • CNAME 記錄是什麼?什麼時候會用到?
  • 和 A 記錄有什麼不一樣?
  • 要怎麼在 DNS 後台設定才不會出錯?
  • 有哪些小地雷(像是「根網域不能用 CNAME」)該注意?

就算你是第一次接觸 DNS,也能看得懂、跟著做,順利把網站連到你想要的服務上!

什麼是 CNAME?用最簡單的方式講給你聽

CNAME 是一種「網域轉址」的方式。

如果你有兩個網址,你希望 A 網址其實只是「借道」去打開 B 網址,這時候你就會用到 CNAME。

換個角度來說:

你想讓別人輸入:

blog.我的網址.com

但實際上,是請電腦幫你偷偷轉去

另一個網站.com

這就是 CNAME 的功能:讓一個網址轉去用另一個網址的內容。

換個更貼切的比喻:你家書店的書,是從別人倉庫調來的

假設你在市區開了一家書店,招牌寫著你的品牌名稱 mybookstore.com

你店裡擺滿書,但這些書不是你自己印的,而是由一間大型出版社(例如 bigpublisher.com)幫你出貨的。

你跟出版社說:

「我不想客人直接跑你那邊買,我要讓他們來我店裡看起來是我賣的。你只要幫我準備書,後面怎麼處理我不管。」

所以當客人走進你的書店:

  • 他們看到的是你的招牌、你的門面(也就是你的網址)
  • 書的內容、擺設、包裝,其實來自出版社的後端系統(對方伺服器)
  • 但整體體驗對客人來說是「你店裡的東西」,而不是「你把我導去別的書店」

這就像 CNAME:

你提供的是自己的門牌(網址),但實際內容是對方幫你處理,
整個過程客人不會感覺跳去別人家,一切都像發生在你家。

什麼情況下你會用到 CNAME?

CNAME 聽起來很技術,但只要你有買網址、想要讓網站看起來「有自己的門面」,幾乎都會遇到它。

讓我從一個你可能真的遇過的情況講起——

情境:你有自己的網址,但網站不是你自己架的

假設你買了一個網址,想要放你的部落格。

你跟一個網站服務合作,他們幫你把內容都弄好了,最後跟你說:

「這是我們給你的網址:abcd.hosting-service.com,你可以拿來用喔~」

你心想:「這也太醜了吧,我都花錢買了 blog.mywebsite.com,當然要用我自己的網址啊!」

這時候,服務平台會叫你在 DNS 裡加一筆 CNAME,把 blog.mywebsite.com 指到 abcd.hosting-service.com

你可能會想說:那這樣網址會不會變?我會不會被導去別人家?

答案是:不會變,你仍然會看到 blog.mywebsite.com

很多人一聽到「指向別人」就以為是轉址(像點進去某些網站後網址會跳掉),但 CNAME 不是那種會跳網址的設定,它的邏輯比較像是:

🔍「你用這個名字找不到路?沒關係,我偷偷告訴你真正的位置,
但你還是以這個名字去拿資料。」

白話解釋:CNAME 怎麼做到「內容來自別人,門面還是你」?

這是 CNAME 最厲害也最容易誤解的地方,我們來用真實流程+生活比喻幫你解釋:

🧭 真實流程(簡化版)

  1. 使用者輸入 blog.mywebsite.com
  2. 瀏覽器不知道它的 IP,去 DNS 詢問
  3. DNS 說:「這其實是 abcd.hosting-service.com 的別名,你去問它 IP 吧」
  4. 瀏覽器去問 abcd.hosting-service.com 拿到 IP(例如 123.45.67.89)
  5. 然後用「blog.mywebsite.com」這個名義,去這個 IP 抓資料
  6. 內容來自對方,但網址欄 沒有改變,使用者完全看不出來

CNAME 跟 301 轉址到底差在哪?

很多人第一次接觸時,會想說:

「反正都是讓網址轉去別的地方,應該差不多吧?」

其實完全不一樣!不但用途不同,連「使用者的感受」、「搜尋引擎的行為」、「網站的架構方式」都不一樣。

我們先看對照表,接著再用白話解釋每一點:

比較項目CNAME(DNS 記錄)301 轉址(伺服器設定)
發生時間使用者輸入網址 → 查 DNS → 當下就轉成另一個網域使用者請求網站 → 網站回應:「搬家了,去新網址」
網址會不會變❌ 不會變,始終顯示你設定的網址(例如 blog.mywebsite.com)✅ 會變,會跳去對方的網址(例如 abcd.hosting.com)
使用者體驗感覺是留在你網站裡,雖然內容是別人提供的明顯感覺「被帶去別的網站」,像你點連結被跳轉
適合的情境想用自己的網址展示別人家的內容、保留品牌感舊網址淘汰,要通知搜尋引擎與使用者轉跳至新網址
對搜尋引擎的影響幾乎沒有影響,因為網址沒換,內容也一樣影響很大,會告訴 Google:「這不是原本的網站,請改收錄新網址」

發生時間不同(DNS vs 瀏覽器)

  • CNAME 是在瀏覽器連線前、還在查 IP 的階段就已經發生的。
    就像郵差出發前就知道「這個地址其實是別名,要送去別的地方」,但收件人還是原本的名字。
  • 301 是使用者已經連上你網站了,然後伺服器說:「不好意思,我們搬家了,請你改去新網址。」
    就像你到舊店門口才看到貼紙說「本店已搬到新地址」。

 網址到底會不會變?

  • CNAME 只在 DNS 裡偷偷換位置,對使用者完全「無感」,網址一樣、畫面一樣,專業感十足。
    適合用在部落格、商店、表單、課程等「代管型網站」。
  • 301 是直接跳網址。你可能輸入 old.com,一秒後看到網址欄變成 new.com
    適合搬站、改網址、品牌改名等一次性轉換。

使用者體感完全不同

使用者輸入 blog.mywebsite.com 時…用 CNAME 的體感用 301 的體感
畫面顯示網站內容,沒發現異狀畫面會先閃一下,再載入新網址內容
網址欄一直是 blog.mywebsite.com瞬間變成 abcd.hosting.com
品牌一致性完整保留容易讓人以為跳去了別的網站

搜尋引擎怎麼看這兩種行為?

  • CNAME:搜尋引擎會當作「你自己的網頁」,如果內容是從別人平台拉的,Google 也不太會有意見,因為網址穩定沒變。
  • 301:這是「永久搬家」的信號,Google 會開始把舊網址的權重、連結、索引,全都轉到新網址去。
    如果你不小心亂設,可能導致網站 SEO 重新開始。

所以,什麼時候該用 CNAME?什麼時候該用 301?

你遇到的情況該用哪一種?
你有自己的網址,但網站內容是用別人平台幫你架的(像部落格、商店)✅ CNAME
你換了整個網站的新網域,不想再用舊的網址✅ 301
你想要讓 shop.mywebsite.com 打開你在 Shopify 架的店✅ CNAME
你希望 old.mywebsite.com 自動跳去 new.mywebsite.com✅ 301

CNAME 與 A 記錄有什麼差別?

很多人在設定 DNS 時會看到 A 記錄和 CNAME 記錄,覺得它們都可以「讓網址對應到某個地方」,好像差不多?

但其實兩者背後的邏輯、限制、用法完全不同。

我們先從一張對照表快速了解,再帶你逐項說清楚:

比較項目A 記錄CNAME 記錄
指向對象✅ 一組 IP 位址(像是數字 123.45.67.89)✅ 另一個網址(像是 myapp.hosting.com)
常見用途指向一台伺服器(自己架站用)指向一個平台服務的網址(像是表單、部落格、商店)
適用範圍✅ 可用在任何層級的網址(包括根網域)⚠️ 不能用在根網域(除非 DNS 有特殊支援)
設定範例@ → 123.45.67.89www → mysite.netlify.app

差別 1:A 記錄是指向 IP,CNAME 是指向另一個網址

這是最核心的差別。

  • A 記錄 是直接告訴 DNS:「這個網址就是這個 IP 位址」,電腦就知道去哪台機器找網站資料。
  • CNAME 記錄 是說:「這個網址是另一個網址的別名,你去問它 IP 是多少。」

白話說:

A 記錄像是:「這裡就是地址:台北市中正區OO路1號」
CNAME 像是:「請參考另一個地址:某某公司總部,他們知道怎麼找我」

🧪 什麼時候會用到 A 記錄?

當你自己有一台伺服器(像是架設在 AWS EC2、VPS),你會拿到一組 IP,像是:

123.45.67.89

你就需要用 A 記錄,直接把你的網址 example.com 指到這個 IP。這樣使用者輸入網址時,電腦就能正確連到你的主機去載入網站內容。

🧪 那什麼時候會用到 CNAME?

當你網站的內容是放在別人平台上,例如:

  • GitHub Pages
  • Netlify
  • Firebase Hosting
  • Shopify
  • Vercel

這些平台給你一個網址,但你想要用自己的網址對外公開,就會用 CNAME 設定。

舉例:

www.mywebsite.com  myproject.netlify.app

這樣別人輸入你的網址時,DNS 就會知道要去 netlify.app 找 IP,再讓瀏覽器連過去,
外觀看起來還是 www.mywebsite.com,不會跳掉

差別 2:CNAME 不能用在「根網域」,為什麼?

這是一個非常常見的新手陷阱!

根網域指的是沒有 www. 的版本,比如:

mywebsite.com

你不能在根網域直接設 CNAME,原因是:

DNS 規範規定:如果某個網址設了 CNAME,那它不能同時存在其他記錄(像是 MX、TXT 記錄)。

而根網域幾乎一定會有其他記錄,比如:

  • MX:用來收信(Gmail / Outlook)
  • TXT:用來驗證 Google、設 SPF、DKIM
  • A 記錄:備援連線用

這些記錄不能跟 CNAME 共存,所以根網域不能設 CNAME。
但有些 DNS 平台(像 Cloudflare)會提供「CNAME Flattening」、「ALIAS」、「ANAME」等特殊功能來模擬這個行為。

小提醒:A 記錄其實可以設「多筆」

當你的網站架構需要備援或分流流量時,你也可以設多筆 A 記錄,例如:

@  123.45.67.89  
@  123.45.67.90

這樣使用者請求會隨機分配到不同的 IP 上(俗稱 Round Robin),提升穩定性。

為什麼 CNAME 不能用在根網域?

很多人買了網址後,最直覺的想法就是:

「我想把 example.com 指到某個平台網址,設一筆 CNAME 就好了吧?」

但當你真的去設定的時候,會發現 DNS 後台根本不讓你這麼做,或是設了也沒作用。為什麼?

什麼是「根網域」?

所謂「根網域」,指的是沒有 www.、沒有子網域的那個主網址,例如:

  • example.com ✅(這是根網域)
  • www.example.com ❌(這是子網域)
  • blog.example.com ❌(這也是子網域)

📛 為什麼 CNAME 不能用在根網域?

這其實不是平台問題,而是DNS 的技術規則限制

根網域不能設 CNAME,是因為:

根網域通常會需要同時擁有多種 DNS 記錄(例如 A、MX、TXT),
而一旦你對某個網域設了 CNAME,就不能再設其他記錄

DNS 標準(RFC 1034)明確規定:

一個 DNS 名稱如果被設定為 CNAME,就不能同時擁有任何其他記錄,包含 A、MX、TXT、NS… 等。

但偏偏根網域通常會用到很多種記錄,例如:

記錄類型用途
A指向網站主機 IP(幾乎一定會用到)
MX用來收信(例如綁 Gmail 或 Outlook)
TXT驗證 Google、設 SPF / DKIM 等郵件安全

所以如果你對 example.com 設了 CNAME,那就等於你不能設收信、不能驗證 Google、不能加防詐保護,這在現代網站根本行不通。

CNAME 不能用在根網域,那該怎麼辦?

你可能會遇到這種情況:

我想讓 example.com(也就是沒有 www 的網址)連到某個平台,
但對方只提供我一串網址,叫我設 CNAME,卻又說根網域不行?

這是因為 DNS 有個規定:根網域不能設 CNAME
因為一個網址只能有一筆「主要記錄」,如果你設了 CNAME,其他記錄(像是收信用的 MX、驗證用的 TXT)就不能用了,會造成整個網域運作出問題。

🧠 那要怎麼辦?進階 DNS 有替代方案

一些現代 DNS 平台就想了辦法:

讓你「看起來像設 CNAME」,但其實幕後偷偷幫你轉成可以用的方式。

這種做法有不同的名字,但邏輯其實都差不多:

名稱概念是什麼?哪些平台支援?
CNAME Flattening幫你「查好」對方的網址,偷偷轉成能用的 IP 給使用者Cloudflare(會自動幫你處理)
ALIAS 記錄偽裝成 CNAME,但可以跟其他記錄共存,不違反標準AWS Route 53、NS1、EasyDNS 等
ANAME 記錄類似 ALIAS,但是某些 DNS 公司用的名稱DNS Made Easy、Name.com 等

更白話地說,它們在幹嘛?

你在 DNS 後台可能會填這樣一筆資料:

example.com  hosting-platform.com

這看起來像是 CNAME,但其實 DNS 系統在你填完的那一刻,會在背景做這些事:

  1. 查出 hosting-platform.com 的實際 IP(就是網站真正在哪裡)
  2. 把這個 IP 當成 A 記錄處理(因為根網域不能有 CNAME,但可以有 A 記錄)
  3. 自動更新這些 IP,如果對方平台以後換 IP,你也不需要自己改

對你來說,看起來就像是設了一筆 CNAME;

但對 DNS 系統來說,它偷偷幫你轉化成能被接受的格式,不會出錯,也不會影響收信或驗證功能。

自己設 A 記錄 vs 用 CNAME Flattening,有什麼差別?

你可能會想:

「如果最終都是讓 example.com 指到某個 IP,
那我直接查出對方平台的 IP,自己手動設 A 記錄,不就好了嗎?」

表面上看起來是一樣的沒錯,但其實兩種方式在「維護」、「穩定性」、「操作彈性」上差很多

🧪 假設你自己手動設 A 記錄的情境

你查到平台的 IP 是 123.45.67.89,然後在 DNS 裡這樣設:

example.com  123.45.67.89

✅ 看起來可以用、網站能打開

❌ 但幾天後這個平台的 IP 改了……你的網站掛掉了。

你得怎麼做?

➡️ 登入 DNS 後台,重新查新的 IP,再改一次 A 記錄。

🔁 如果你是用 CNAME Flattening 或 Alias 呢?

你只要填這樣一筆資料:

example.com  hosting-platform.com

接下來的事情:

  1. DNS 自動查出 IP
  2. 自動設定成可以運作的形式(像是 A 記錄)
  3. 以後平台 IP 換了,它也會幫你自動重新查
  4. 你完全不需要動手更新

差異總整理

比較項目手動設 A 記錄CNAME Flattening / Alias
操作方式要自己先查出對方平台 IP只要填對方平台的網址
對方 IP 換了會怎樣❌ 網站掛掉、需要手動更新✅ 自動幫你重新查 IP
使用者看到的網址✅ 都是你自己的網址,不會跳✅ 一樣是你的網址,不會跳
適合什麼情況對方 IP 穩定不變(如 VPS)對方平台是 CDN、雲端平台(會常換 IP)
維護成本高:要自己記得回來改低:設好就放著不用動

CNAME 實際設定範例(以 Cloudflare 為例)

假設你有一個網域叫做:

example.com

你希望使用者輸入:

www.example.com

可以打開你在 Vercel 上部署的網站 yourapp.vercel.app

接下來就帶你一步步設好 CNAME 記錄

步驟一:登入並進入 DNS 管理介面

  1. 前往 Cloudflare 官網 並登入帳號
  2. 在主畫面中,點選你要設定的網域(例如 example.com
  3. 左邊選單點選 DNS,就會看到你的 DNS 記錄清單

步驟二:新增一筆 CNAME 記錄

  1. 點選上方的「新增記錄」按鈕
  2. 類型選擇 CNAME
  3. 開始填入資訊:
欄位名稱要填什麼補充說明
名稱(Name)www這表示你要設定 www.example.com,只填 www 就好
目標(Value)yourapp.vercel.app這是你在 Vercel 上的專案網址(不要加 https\://)
TTL可維持預設(Auto)或自行設定表示這筆 DNS 資訊多久更新一次,一般預設即可
Proxy 狀態可選擇「啟用 Proxy」(橘色雲)或「僅 DNS」(灰色雲)如果你要透過 Cloudflare 加速或防禦,可啟用 Proxy

填好後,點擊「儲存」即可。

成功設定後,會看到類似這樣的一筆記錄:

類型名稱
CNAMEwwwyourapp.vercel.app

這表示:

  • 使用者輸入 www.example.com
  • 系統會把它轉向 yourapp.vercel.app
  • 但網址不會變,對使用者來說還是你家的網站

常見疑問補充

Q:為什麼只填 www?不是應該填 www.example.com 嗎?

因為你已經在設定的是 example.com 這個網域。

所以在「名稱」欄位只需要填「要接在前面的字」就好,例如 wwwblogshop

系統會自動理解成 www.example.com

Q:如果我只想用 example.com(根網域),也這樣設 CNAME 就好嗎?

不行。

根網域(沒有 www 的)不能設 CNAME。

如果你用的是 Cloudflare,它會自動用 CNAME Flattening 幫你處理,請改設為「A」或「自動(灰色雲)」,參考前一段解說。

Q:那 www 的 CNAME 設好後,我還需要其他設定嗎?

如果你想要 example.comwww.example.com 都能打開網站,記得要另外設一筆「轉址」或設定主機平台的 redirect 規則。

例如讓 example.com 自動導到 www.example.com

常見問題與陷阱

剛開始設定 CNAME 時,很容易遇到一些卡關。這邊幫你整理幾個最常見的問題,以及你該怎麼處理。

可以幫同一個子網域設多筆 CNAME 嗎?

不能。只要是同一個名稱(例如 www),只能設一筆 CNAME 記錄。

如果你嘗試設:

www.example.com  app1.example.net
www.example.com  app2.example.net

DNS 系統會不知道該選哪一筆,會直接報錯或忽略其中一筆,完全無法達成你想要的「流量平均分配」。

🛠 那如果我真的想讓訪問者分流怎麼辦?

你應該改用 A 記錄 + 多個 IP,例如:

example.com  123.45.67.89
example.com  123.45.67.90

這種做法叫做 Round Robin(輪詢),DNS 會輪流把流量發給不同的 IP。

CNAME 設好之後,為什麼沒反應?

這是新手最常碰到的狀況。你明明設好了 CNAME,但開啟網址卻顯示錯誤或無法連線。

通常有這幾種可能原因:

⏳ DNS 快取還沒更新(TTL)

每筆 DNS 記錄都有「生效週期」,叫做 TTL(Time To Live)。
這段期間內,網路會記住上次查到的結果,不會馬上重新查詢。

通常你需要等 5 到 30 分鐘 才會真正看到效果,最多可能要等 1 小時。

🧠 瀏覽器自己記住舊結果

除了 DNS 會快取,瀏覽器自己也會記得曾經查過的網域
即使你已經改好了 DNS 記錄,但瀏覽器可能還在用舊的資料。

你可以試著:

  • 按 Ctrl+F5 強制重新載入
  • 換用無痕模式
  • 用手機網路測試是否更新

🧱 記錄設錯了層級

這是很多人沒注意的小細節。例如你要設 www.example.com,但你在 Name 欄填了 www.example.com,Cloudflare 系統就會幫你解讀成:

www.example.com.example.com

變成多了一層,就會完全對不到。

📝 解法是只填「www」這樣的子名稱,不要加上主網域。

為什麼根網域(example.com)不能直接用 CNAME?

根網域的 DNS 系統上,不能同時設 CNAME 和其他記錄(例如郵件的 MX、網站驗證的 TXT),這是 DNS 標準規範限制的。

所以如果你嘗試這樣設:

example.com  yourproject.hosting.com

系統可能會拒絕、忽略、或導致其他功能出錯(像是收不到信、驗證失敗)。

有兩種解法:

✅ 解法一:使用支援「Flattening」的 DNS 平台

像 Cloudflare 就會自動幫你處理這件事:

  • 你設定一筆「看起來像 CNAME」的記錄
  • 系統會在背後查出對方的 IP,轉換成 A 記錄
  • 最後結果對瀏覽器來說是合法且能使用的

這種方式還能同時設其他記錄(像是 MX、TXT),不會衝突。

✅ 解法二:放棄根網域,改用 www 當主要網址

如果你使用的 DNS 平台不支援 Flattening 或 ALIAS,你也可以這樣做:

  1. www.example.com 指到外部平台(用 CNAME)
  2. example.com 做「301 轉址」到 www.example.com(由主機平台設定)

這樣使用者無論輸入哪一種,都能順利連到你的網站。

小結:你學會了什麼?

學完這篇文章,你可以對 CNAME 有以下幾個清楚的認識 👇

CNAME 是什麼?

  • CNAME 是一種「讓某個子網域去參考另一個網址」的設定方式
  • 與其記住一組數字 IP,不如記網址就好(更穩、更方便)

📌 例子:
你希望 blog.example.com 顯示 GitHub Pages 上的內容,就可以這樣設:

blog  yourname.github.io

它適合用在什麼場景?

  • 當你使用第三方平台建站(GitHub Pages、Firebase、Vercel、Shopify…)
  • 但又想保有自己的專屬網址(例如 shop.example.com

CNAME 讓你保有自己的品牌網址,同時又能使用別人幫你架好的內容。

根網域不能直接設 CNAME,那怎麼辦?

  • 根網域就是沒有 www 的主網址,例如 example.com
  • 根據 DNS 標準規定,不能在這個位置設 CNAME
  • 但有些平台(像 Cloudflare、AWS Route 53)會用:
  • CNAME Flattening
  • ALIAS 記錄
  • ANAME 記錄
    這些「表面像 CNAME、底層自動查 IP」的方式來解決限制。

使用上的小提醒

  • 新增 CNAME 記錄後,有時候會需要幾分鐘到半小時才會生效(受 TTL 影響)
  • 如果沒生效,檢查:
  • 有沒有設錯層級(例如 www.www.example.com
  • 有沒有快取沒清掉
  • 是否有衝突記錄(不能對同一個名稱設多筆 CNAME)

總結一句話

CNAME 就像你家的門牌指向別人家的內容,但外觀還是你自己家的招牌。

它是連結外部平台最實用、也最簡單的 DNS 工具之一。

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *