2026年6月12日

2026年6月12日

TXTレコードのTTLを変更する方法|値を変える前に下げる手順、同じ名前の複数TXTの扱い、変更後の確かめ方

TXTレコードのTTLは、DNSサービスの管理画面やゾーンファイルで、そのレコードのTTL欄を書き換えれば変更できます。ただし、新しいTTLが効き始めるのは、古いTTLでキャッシュされた答えが切れてからです。SPFやDKIM、ドメインの所有権確認などの値を書き換える予定があるなら、値を変える前にTTLを下げ、古いTTLの分だけ待ってから本番の変更をするのが基本の流れです。この記事では、その手順と、TXT特有の注意点(同じ名前に複数のTXTが並ぶ場合、CNAMEで他社に任せている場合)を説明します。

TTLを変えると何が変わるのか

TTLは、キャッシュDNSがその答えを保持してよい秒数です。TXTレコードのTTLが3600なら、一度問い合わせたキャッシュDNSは、最長1時間は権威サーバーに聞き直さずに同じ値を返します。

TXTレコードでTTLが関わるのは、主に次の場面です。

  • SPFを書き換えるとき:送信サービスを追加・削除したあと、古いSPFがキャッシュに残っている間は、受信側が古い内容で判定します。
  • DKIMの鍵を入れ替えるとき:新しい公開鍵が行き渡る前に新しい鍵で署名を始めると、検証に失敗するメールが出ます。
  • DMARCの方針を変えるとき:p= の値の変更が受信側に届くまで時間差があります。
  • 所有権確認や証明書発行で一時的なTXTを置くとき:確認する側がキャッシュを持っていると、追加した値がすぐに見えないことがあります。

TTLを変えても、TXTの値そのものは変わりません。TTLだけの変更でメールの判定が変わることはないため、値の変更より前に済ませておける安全な準備作業です。

手順1:今のTTLを確かめる

最初に、権威サーバーが今どのTTLで答えているかを確認します。この数字が「TTLを下げた設定が行き渡るまでに待つ時間」の上限になります。

# ドメインのネームサーバーを調べる
dig example.com NS +short

# 権威サーバーに直接聞く。2列目がTTL(秒)
dig @ns1.example-dns.net example.com TXT +norecurse +noall +answer
dig @ns1.example-dns.net _dmarc.example.com TXT +norecurse +noall +answer
dig @ns1.example-dns.net selector1._domainkey.example.com TXT +norecurse +noall +answer

selector1 はDKIMのセレクタ名の例です。実際の名前は、メール送信サービスの設定画面やDKIM署名ヘッダーの s= で確かめます。

手順2:管理画面またはゾーンファイルでTTLを変える

TTLの変え方は、使っているDNSの種類で異なります。画面の項目名はサービスによって違い、変わることもあるため、ここでは役割で説明します(2026年10月現在)。

DNSサービスの管理画面の場合対象のTXTレコードの編集画面を開き、TTLの欄だけを変えて保存します。値の欄に触れる必要はありません。長いTXT(DKIMの公開鍵など)を編集画面で開くと、保存時に値が分割・結合されたり引用符が付いたりすることがあるため、保存後に値が変わっていないかを手順4で確かめます。

TTLに「自動」を選べるサービスもあります。たとえばCloudflareのDNSでは、自動を選ぶと一定の既定値が使われます。既定値はサービスの仕様で決まるため、数字が必要な場面では明示的に指定します。

BINDなどのゾーンファイルの場合レコードの行にTTLを書くと、その行だけに効きます。書かなければ、ファイル先頭の $TTL の値が使われます。

$TTL 3600
@                   IN  TXT  "v=spf1 include:_spf.example-mail.net ~all"
; この行だけTTLを300にする
@             300   IN  TXT  "google-site-verification=your-verification-token"

ゾーンファイルを書き換える前にはファイルを控えておき、編集後はSOAのシリアル番号を上げてから読み込み直します。セカンダリDNSがある場合は、シリアル番号が上がらないと変更が転送されません。

# 構文を確かめてから読み込み直す(BINDの例)
named-checkzone example.com /etc/bind/zones/example.com.zone
sudo rndc reload example.com

同じ名前に複数のTXTがある場合

ルートドメイン(@)には、SPF、検索エンジンの所有権確認、各種サービスの確認用など、複数のTXTが並ぶことがよくあります。DNSでは、同じ名前・同じタイプのレコードの集まりを1つの単位(RRセット)として扱い、その中のTTLは同じにすることになっています(RFC 2181)。

このため、DNSサービスによって次のように動きが違います。

  • 名前とタイプごとに1つのTTLしか持てず、複数の値をまとめて1つのTTLで管理するサービス(Amazon Route 53 のレコードセットなど)
  • 行ごとにTTL欄があるように見えても、実際の応答では1つに揃えられるサービス
  • 行ごとに違うTTLをそのまま返してしまう構成

TTLが揃っていない応答を受け取ったキャッシュDNSは、その中の一番短いTTLで扱うことが規格で推奨されています。1行だけTTLを変えても期待どおりにならないことがあるため、同じ名前のTXTはまとめて同じTTLにするのが分かりやすい運用です。変更後は手順4で、すべての行が同じTTLで返っているかを確かめます。

CNAMEで他社に任せているTXTは自分では変えられない

DKIMでは、メール送信サービスが selector._domainkey をCNAMEで自社のホスト名へ向ける方式を案内していることがあります。この場合、最終的なTXTの値もTTLも送信サービス側が決めており、自分のDNSで変えられるのはCNAMEのTTLだけです。

# CNAMEをたどっているかを確かめる
dig selector1._domainkey.example.com TXT +noall +answer

答えの中にCNAMEの行が出てくれば、TXTのTTLは向け先の事業者の設定です。鍵の入れ替えの時期や方法は、その事業者の案内に従います。

手順3:値を変える予定があるなら「下げて待つ」

SPFやDKIMの値を書き換える予定があるときは、次の順で進めます。

  1. 手順1で今のTTL(例:3600秒)を控える
  2. TTLだけを短い値(例:300秒)に下げる
  3. 控えた古いTTLの時間(例:1時間)以上待つ。これで、古いTTLでキャッシュされた答えが消えます
  4. TXTの値を書き換える。ここからは短いTTLで入れ替わります
  5. 新しい値で問題が無いことを確かめたら、TTLを元の長さに戻す

3の待ち時間を省くと、TTLを下げた意味がありません。キャッシュDNSは、取得したときのTTLを使ってカウントダウンするため、下げたTTLは次に取りに来たときから効きます。

TTLを短いままにしておくと、権威サーバーへの問い合わせが増えるうえ、権威サーバーに障害が起きたときに影響が早く出ます。値が落ち着いたら、数時間〜1日程度の長さに戻すのが一般的です。

手順4:変更後に確かめる

権威サーバーと、いくつかの公開DNSで確かめます。

# 権威サーバー:設定したTTLがそのまま出るか、値が変わっていないか
dig @ns1.example-dns.net example.com TXT +norecurse +noall +answer

# 公開DNS:2列目は残りTTL。古いTTL以下の値から減っていく
dig @8.8.8.8 example.com TXT +noall +answer
dig @1.1.1.1 example.com TXT +noall +answer

確かめる点は3つです。

  • 権威サーバーが、新しいTTLで答えているか(ネームサーバーが複数ならすべて)
  • 同じ名前のTXTがすべて同じTTLで返っているか
  • TXTの値が編集前と一字一句同じか(とくにSPFの v=spf1 が1行だけか、DKIMの鍵が欠けていないか)

公開DNSの残りTTLが、新しいTTL以下の数字になっていれば、新しいTTLが行き渡り始めています。

まとめ

  • TXTのTTLは、レコードのTTL欄(ゾーンファイルなら行のTTLか $TTL)で変更します。値の変更とは切り離して行えます。
  • 新しいTTLが効くのは、古いTTLでキャッシュされた答えが切れてからです。
  • 値を書き換える予定があるなら、TTLを下げる、古いTTLの分待つ、値を変える、TTLを戻す、の順で進めます。
  • 同じ名前のTXTは1つのRRセットとして扱われるため、TTLを揃えます。
  • CNAMEで送信サービスに任せているDKIMなどは、TXTのTTLを自分では変えられません。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲