CNAMEレコードとは
CNAMEレコードは、あるドメイン名を別の正規名へ対応付け、その名前が別名であることを示すDNSレコードです。正式名称はCanonical Name record(カノニカル・ネーム・レコード)です。
レコードのデータ部分に入るのはIPアドレスではなく、別のドメイン名です。DNSリゾルバーは別名から正規名へ進み、必要なAやAAAAなどを正規名について調べます。
CNAMEは「名前から別の名前への案内」であり、Webブラウザを別URLへ移動させる命令ではありません。アドレス欄やHTTP要求のホスト名は、そのまま処理されます。

CNAMEの一行には、正規名までしか入らない
shop.example.test.CNAMEservice.example.net.A / AAAAを調べる192.0.2.80またはIPv6アドレスservice.example.net.を所有者とする別のAレコードから得ます。CNAMEがある所有者名には、他の通常データを同居させない
RFC 1034とRFC 2181では、ある所有者名にCNAMEレコードがある場合、その同じ名前へ他の通常のデータを置かないという制約があります。CNAMEが「この名前は別名である」と宣言する一方、AやMXも置くと、どちらのデータを正とするか矛盾するためです。
DNSSEC用の一部メタデータは例外として扱われますが、通常のゾーン設計では「CNAMEとAを同じ名前へ置く」「CNAMEとMXを同居させる」といった設定を避けます。サービス提供会社が用意するALIASやANAMEはDNS標準のCNAMEと同一ではなく、権威側でアドレス応答を合成する独自機能です。
ゾーン頂点では、CNAMEを置きにくい
ゾーンの頂点、たとえばexample.test.自身にはSOAレコードとNSレコードが必要です。CNAMEは同じ所有者名の他データと同居できないため、頂点を通常のCNAMEにすると必要なSOA・NSと衝突します。
そのため、wwwなどの子名をCNAMEにする構成は一般的ですが、頂点ではA・AAAAを直接置くか、DNS事業者のフラットニング機能などを使います。独自機能を利用するときは、返される標準レコードとTTLの扱いを確認します。
連鎖はたどれるが、循環してはいけない
別名が別のCNAMEを指し、その先で正規データへ到達する連鎖は処理できます。ただし段数が増えるほど問い合わせや応答が増え、途中の障害や設定変更の影響も受けます。必要のない長い連鎖は避けます。
AがBを指し、BがAを指すような循環には最終的な正規データがありません。リゾルバーはループを検出するか、処理上限に達して失敗します。CNAMEの対象名が存在することも、運用側で保証する必要があります。
HTTPリダイレクトは、接続後にブラウザへ届く
CNAMEを使っても、ブラウザのアドレス欄にあるホスト名は正規名へ自動表示変更されません。ブラウザは元のURLを使ってサーバーへ接続し、HTTPのLocationヘッダーを含む3xx応答を受けたときに別URLへ移動します。
TLS接続でも、証明書はブラウザが訪問した元のホスト名に対して検証されます。CNAMEの正規名だけを証明書へ入れても、元の別名に一致しなければ警告の原因になります。
仕様の確認資料:RFC 1034「Domain Names — Concepts and Facilities」、RFC 1035「Domain Names — Implementation and Specification」、RFC 2181「Clarifications to the DNS Specification」