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 最厲害也最容易誤解的地方,我們來用真實流程+生活比喻幫你解釋:
🧭 真實流程(簡化版)
- 使用者輸入
blog.mywebsite.com
- 瀏覽器不知道它的 IP,去 DNS 詢問
- DNS 說:「這其實是
abcd.hosting-service.com
的別名,你去問它 IP 吧」 - 瀏覽器去問
abcd.hosting-service.com
拿到 IP(例如 123.45.67.89) - 然後用「
blog.mywebsite.com
」這個名義,去這個 IP 抓資料 - 內容來自對方,但網址欄 沒有改變,使用者完全看不出來
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.89 | www → 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 系統在你填完的那一刻,會在背景做這些事:
- 查出
hosting-platform.com
的實際 IP(就是網站真正在哪裡) - 把這個 IP 當成 A 記錄處理(因為根網域不能有 CNAME,但可以有 A 記錄)
- 自動更新這些 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
接下來的事情:
- DNS 自動查出 IP
- 自動設定成可以運作的形式(像是 A 記錄)
- 以後平台 IP 換了,它也會幫你自動重新查
- 你完全不需要動手更新
差異總整理
比較項目 | 手動設 A 記錄 | CNAME Flattening / Alias |
---|---|---|
操作方式 | 要自己先查出對方平台 IP | 只要填對方平台的網址 |
對方 IP 換了會怎樣 | ❌ 網站掛掉、需要手動更新 | ✅ 自動幫你重新查 IP |
使用者看到的網址 | ✅ 都是你自己的網址,不會跳 | ✅ 一樣是你的網址,不會跳 |
適合什麼情況 | 對方 IP 穩定不變(如 VPS) | 對方平台是 CDN、雲端平台(會常換 IP) |
維護成本 | 高:要自己記得回來改 | 低:設好就放著不用動 |
CNAME 實際設定範例(以 Cloudflare 為例)
假設你有一個網域叫做:
example.com
你希望使用者輸入:
www.example.com
可以打開你在 Vercel 上部署的網站 yourapp.vercel.app
。
接下來就帶你一步步設好 CNAME 記錄。
步驟一:登入並進入 DNS 管理介面
- 前往 Cloudflare 官網 並登入帳號
- 在主畫面中,點選你要設定的網域(例如
example.com
) - 左邊選單點選 DNS,就會看到你的 DNS 記錄清單
步驟二:新增一筆 CNAME 記錄
- 點選上方的「新增記錄」按鈕
- 類型選擇 CNAME
- 開始填入資訊:
欄位名稱 | 要填什麼 | 補充說明 |
---|---|---|
名稱(Name) | www | 這表示你要設定 www.example.com,只填 www 就好 |
目標(Value) | yourapp.vercel.app | 這是你在 Vercel 上的專案網址(不要加 https\://) |
TTL | 可維持預設(Auto)或自行設定 | 表示這筆 DNS 資訊多久更新一次,一般預設即可 |
Proxy 狀態 | 可選擇「啟用 Proxy」(橘色雲)或「僅 DNS」(灰色雲) | 如果你要透過 Cloudflare 加速或防禦,可啟用 Proxy |
填好後,點擊「儲存」即可。
成功設定後,會看到類似這樣的一筆記錄:
類型 | 名稱 | 值 |
---|---|---|
CNAME | www | yourapp.vercel.app |
這表示:
- 使用者輸入
www.example.com
- 系統會把它轉向
yourapp.vercel.app
- 但網址不會變,對使用者來說還是你家的網站
常見疑問補充
Q:為什麼只填 www
?不是應該填 www.example.com
嗎?
因為你已經在設定的是 example.com
這個網域。
所以在「名稱」欄位只需要填「要接在前面的字」就好,例如 www
、blog
、shop
。
系統會自動理解成 www.example.com
。
Q:如果我只想用 example.com
(根網域),也這樣設 CNAME 就好嗎?
不行。
根網域(沒有 www
的)不能設 CNAME。
如果你用的是 Cloudflare,它會自動用 CNAME Flattening 幫你處理,請改設為「A」或「自動(灰色雲)」,參考前一段解說。
Q:那 www
的 CNAME 設好後,我還需要其他設定嗎?
如果你想要 example.com
跟 www.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,你也可以這樣做:
- 把
www.example.com
指到外部平台(用 CNAME) - 把
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 工具之一。