2026年6月12日

2026年6月12日

TXTレコードが反映されない場合の検証|追加したのに見えない・認証に通らない原因を順に確かめる

TXTレコードを追加したのに反映されないときは、「追加した場所(DNSサービス)が正しいか」「名前が意図どおりか」「権威サーバーが返しているか」「値の書き方が正しいか」「キャッシュが残っているだけか」の順に確かめると、多くの場合は原因を絞り込めます。この記事では、ドメインの所有権確認、Let's Encrypt のDNS認証(DNS-01)、SPF・DKIM・DMARCなど、TXTレコードを使う代表的な場面を念頭に、それぞれの段階での検証コマンドと、見つかった原因の直し方を説明します。

まず症状を2つに分ける

「反映されない」には、性質の違う2つの状態があります。

  • TXTが返ってこない: dig で問い合わせても、追加した値が出てこない
  • TXTは返るが、確認や認証に通らない: 値は見えているのに、サービス側の確認や、メールの認証結果が失敗になる

前者はDNSのどこかで止まっている状態で、後者は値の中身や、同じ名前の他のレコードとの関係に問題があることが多い状態です。以下では、前者の確認から順に進めます。

検証1:追加したDNSサービスが使われているか

もっとも多い原因が、実際には使われていないDNSサービスにTXTを追加しているケースです。ドメインを取得した会社と、DNSを管理しているサービス(CDNやレンタルサーバー)が別になっていると起こります。

# 実際に使われている権威サーバーを確認
dig +short NS example.com

表示されたネームサーバーのホスト名から、どのサービスがDNSを管理しているかを判断します。TXTを追加した管理画面と一致しなければ、表示されたサービスの側に追加し直します。サブドメインを別のサービスに委任している場合は、そのサブドメインのNSも同じように確かめます。

検証2:名前が意図どおりか

管理画面の「ホスト名」欄に何を入れたかで、実際の名前が変わります。多くの管理画面では、入力した値の後ろにドメイン名が自動で付け足されます。そのため、_dmarc.example.com と入力すると、_dmarc.example.com.example.com という名前で登録されていることがあります。

# 意図した名前
dig +short _dmarc.example.com TXT

# ドメイン名が二重に付いた名前で登録されていないか
dig +short _dmarc.example.com.example.com TXT

後者で値が返ってきたら、ホスト名の欄を _dmarc だけに直します。逆に、頂点(example.com そのもの)に追加するときは、空欄にするのか @ を入れるのかがサービスによって違うので、資料で確かめます(2026年10月現在)。

検証3:権威サーバーが返しているか

名前が正しければ、権威サーバーに直接問い合わせます。キャッシュDNSを通さないので、DNSサービスに登録された内容そのものが分かります。

# 権威サーバーに直接問い合わせる(ns1.example.net は検証1で調べたホスト名に置き換える)
dig @ns1.example.net _acme-challenge.example.com TXT +norecurse

# すべての権威サーバーで同じ答えか確かめる
for ns in $(dig +short NS example.com); do
  echo "== $ns"
  dig @$ns _acme-challenge.example.com TXT +norecurse +short
done

Windowsでは、PowerShellの Resolve-DnsName で同じ確認ができます。

Resolve-DnsName -Name _acme-challenge.example.com -Type TXT -Server ns1.example.net

権威サーバーでも返らない場合は、管理画面で保存が完了していない、別のゾーンに追加している、自前のDNSサーバーならゾーンの再読み込みやシリアル番号の更新を忘れている、といった原因が考えられます。権威サーバーの一部だけが古い場合は、セカンダリへの転送が遅れています。

同じ名前にCNAMEがないか

権威サーバーに問い合わせたとき、TXTではなくCNAMEが返ってくることがあります。CNAMEがある名前には他のレコードを置けないため、その名前のTXTは無視され、問い合わせはCNAMEの向け先へ進みます。Let's Encrypt のDNS認証では、_acme-challenge をCNAMEで別のドメインに向けて運用する方法があり、その場合はTXTを向け先の名前の側に置く必要があります。以前に設定したCNAMEが残っていないかを確かめます。

検証4:値の書き方が正しいか

TXTが返ってくるのに確認や認証に通らない場合は、値の中身を確かめます。

  • 余分な引用符や空白: 管理画面によっては、値を " で囲んで入力すると、引用符そのものが値の一部として登録されます。dig の出力で "\"v=spf1 ...\"" のように引用符が二重になっていないかを見ます
  • 長い値の分割: TXTの1つの文字列は255バイトまでです。2048ビットのDKIM公開鍵のように長い値は、1つのレコードの中で複数の文字列に分けて登録します。分割を自動で行う管理画面と、利用者が分ける必要がある管理画面があります。分けた文字列は、受け取る側で区切りなしにつなげて読まれるため、分割の位置に空白を入れないようにします
  • SPFが2つある: 同じ名前に v=spf1 で始まるTXTが2つ以上あると、SPFの評価はエラー(permerror)になります(RFC 7208)。複数のメール送信サービスを使う場合は、1つのレコードに include: を並べてまとめます
  • 確認用の値の取り違え: 所有権確認の値は、サービスや確認のたびに発行し直されることがあります。管理画面に表示されている最新の値と、1文字ずつ照らし合わせます

同じ名前に複数のTXTがあること自体は問題ありません。所有権確認の値とSPFを頂点に並べて置くのは、よくある構成です。

検証5:キャッシュが残っているだけか

権威サーバーが正しい値を返していれば、残っているのはキャッシュです。公開DNSに問い合わせて、TTL欄の残り秒数を見ます。

dig @8.8.8.8 _dmarc.example.com TXT +noall +answer +authority

古い値が返っていれば、TTLの秒数が0になった後に新しい値に変わります。値が返らず、AUTHORITYセクションにSOAが表示されている場合は、追加する前に誰かがこの名前を問い合わせて「存在しない」という答えがキャッシュされています。その残り時間は、表示されたSOAの横のTTLです。

確認を行うサービス側も、独自のキャッシュDNSを使っていることがあります。権威サーバーと公開DNSで正しい値が見えているのに確認に失敗する場合は、しばらく時間を置いてから確認をやり直します。何度もやり直すと、サービスによっては一時的に確認を受け付けなくなることがあるので、間隔を空けて試します。

直した後の確かめ方

修正したら、権威サーバー、公開DNS、確認を行うサービスの順に結果を確かめます。メールの認証に使うTXT(SPF・DKIM・DMARC)は、自分宛てにテストメールを送り、受信したメールのヘッダー(Authentication-Results)で spf=pass や dkim=pass になっているかを見ると、実際に効いているかが分かります。

WordPressサイトで問い合わせフォームや通知メールを送っている場合は、メール送信用のプラグインやサーバーの設定と、SPFに含めた送信元が一致しているかもあわせて確認します。DNSのレコードを削除・変更する前には、現在の設定をエクスポートや画面の控えで残しておきます。

まとめ

  • 「TXTが返らない」と「返るが確認に通らない」を分けて考える
  • dig +short NS で、TXTを追加したDNSサービスが実際に使われているかを確かめる
  • ホスト名の欄でドメイン名が二重に付いていないか、同じ名前にCNAMEがないかを見る
  • 引用符の二重登録、255バイトを超える値の分割、SPFの重複を確かめる
  • 権威サーバーで正しければ、残りはキャッシュ。TTL欄と、ネガティブキャッシュならSOAのTTLで待ち時間を読む

お気軽にご相談ください

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