DNSのTXTレコードは、ドメインに対して文字列データを公開するためのDNSレコードです。
Webサイト運営、メール設定、SaaS連携、ドメイン認証など、実務で非常によく使われます。
一見すると単なる「文字情報の保存場所」に見えますが、実際には、外部サービスがその文字列を参照して、ドメイン所有確認やメール認証などを行う重要な役割を持っています。
TXTレコードは、DNS上にテキスト形式の情報を登録するためのレコードタイプです。
DNSにはいくつか代表的なレコードがあります。
TXTレコードの特徴は、IPアドレスや配送先のような固定的な意味を持つのではなく、その文字列の意味を、利用するサービスや仕様側が定義することです。
つまりTXTレコードは、単に「自由な文章を書く場所」というより、
DNS上に文字列を置き、それを外部サービスや認証仕様が読み取って利用する仕組み
と考えるとわかりやすいです。
TXTレコードは、主に次のような用途で使われます。
もっともよくある用途のひとつが、ドメインの所有確認です。
Google Search Console、Google Workspace、Microsoft 365、各種SaaS、CDN、SSL証明書のDNS認証などでは、
を確認するために、指定された文字列をTXTレコードとして追加するよう求められます。
たとえば次のような値です。
google-site-verification=abc123example
サービス側はDNSを参照し、その文字列が存在すれば、「このユーザーはDNS設定を変更できる管理者である」と判断します。
TXTレコードの代表的な用途として、SPFがあります。
SPFは、このドメインからメール送信してよいサーバーはどれかを定義する仕組みです。
例
v=spf1 include:_spf.google.com ~all
この例では、
v=spf1:SPFのルールであることを示すinclude:_spf.google.com:Googleの送信サーバーを許可する~all:それ以外は明確には許可しないという意味になります。
SPFが正しく設定されていないと、
といった問題につながります。
なお、ここで重要なのは、同じホスト名にSPFポリシーを複数作ってはいけないという点です。
TXTレコード自体は複数あっても問題ないことがありますが、v=spf1 で始まるSPF設定は1つに統合する必要があります。
DKIMも、TXTレコードを使って設定されることが一般的です。
DKIMは、送信メールに電子署名を付与し、受信側が
を確認するための仕組みです。
DNSには、検証用の公開鍵をTXTレコードとして登録します。
例
selector1._domainkey.example.com
TXT "v=DKIM1; k=rsa; p=公開鍵文字列"
ここで重要なのは、受信側がDNS上に公開された鍵を見て署名検証を行うという点です。
また、DKIMの公開鍵は文字列が非常に長くなることがあります。
そのため、DNS上や管理画面上では、1つのTXTレコード内で複数の文字列に分かれて表示されることがあります。
ただし、正しく登録されていれば通常は問題ありません。
DMARCもTXTレコードで設定します。
DMARCは、SPFやDKIMの認証結果を踏まえて、認証に失敗したメールをどう扱うかを定義するポリシーです。
例
_dmarc.example.com
TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"
この例では、
v=DMARC1:DMARCのポリシーであることを示すp=quarantine:怪しいメールは隔離対象にするrua=mailto:...:集計レポートの送信先を指定するという意味です。
DMARCを適切に設定すると、
に役立ちます。
TXTレコードは、メール以外にも幅広いサービスで使われます。
たとえば次のようなケースです。
このようにTXTレコードは、「そのドメインを自分が管理していることを証明するための標準的な方法」として広く利用されています。
DNS管理画面でTXTレコードを追加する際は、一般的に次の項目を設定します。
例
@TXTgoogle-site-verification=abc123example3600どの名前に対してTXTレコードを付けるかを指定します。
例
@ → ルートドメイン(example.com)_dmarc → _dmarc.example.comselector1._domainkey → selector1._domainkey.example.comただしDNSサービスによって、
@ をルートドメインとして扱うexample.com をそのまま入れるなど、入力方式が異なることがあります。
TXT を選択します。
サービスから指定された文字列そのものを入力します。
例
google-site-verification=abc123example
v=spf1 include:_spf.google.com ~all
TTLは、そのDNS情報をどれくらいキャッシュしてよいかを表す値です。
秒単位で指定されることが一般的です。
例
300 → 5分3600 → 1時間86400 → 24時間ここで注意したいのは、TTLは「設定反映そのものの待ち時間」ではなく、以前のDNS情報がキャッシュに残りやすくなる時間に関係するという点です。
そのためTTLが長いと、変更後すぐでも、環境によっては古い情報が見え続けることがあります。
@ TXT "google-site-verification=xxxxx"
@ TXT "v=spf1 include:_spf.google.com ~all"
_dmarc TXT "v=DMARC1; p=none; rua=mailto:report@example.com"
selector1._domainkey TXT "v=DKIM1; k=rsa; p=公開鍵文字列"
同じ意味でも、DNS管理画面によって表記方法が違います。
@example.comなどの違いがあるため、案内文をそのままコピペすると意図しない名前になることがあります。
TXT値は、管理画面やAPIによって
といった差があります。
これはDNSの意味が違うというより、管理画面や入力形式の違いです。
そのため、基本的には利用中のDNSサービスの仕様に従うのが安全です。
たとえばルートドメインに、
が並ぶことはあります。
これは必ずしも問題ではありません。
ただし注意点として、SPF設定だけは複数作らないことが重要です。
たとえば次のような構成は避けるべきです。
@ TXT "v=spf1 include:_spf.google.com ~all"
@ TXT "v=spf1 include:spf.protection.outlook.com ~all"
SPFは分けて複数書くのではなく、必要な送信元を1つのポリシーにまとめます。
DNS設定は保存直後に権威DNSへ反映されても、各地のDNSキャッシュの影響で、すぐには見えないことがあります。
そのため、
という状態が一時的に起こることがあります。
長い文字列を持つTXTレコードでは、DNS仕様や管理画面の表示上、1つのレコード内で複数の文字列に分けて見えることがあります。
見た目上分割されていても、登録方法が正しければ問題ないケースがあります。
TXTレコードの中でも、特に重要なのがメール認証です。
送信を許可するメールサーバーを定義する
メールに電子署名を付け、その検証用公開鍵をDNSで公開する
SPFやDKIMの結果に基づいて、失敗メールの扱い方を定める
この3つを正しく運用すると、
につながります。
一般的な流れは次の通りです。
まず、設定を求めているサービスから次の情報を確認します。
ドメインのDNSを管理しているサービスに入ります。
例
など
指定された情報を、そのDNSサービスの書式に合わせて入力します。
保存後すぐに見えることもありますが、キャッシュ状況によっては時間差があります。
サービス側の「確認」「Verify」ボタンを押すか、dig や nslookup で確認します。
dig TXT example.com
dig TXT _dmarc.example.com
nslookup -type=TXT example.com
これでTXTレコードが返ってくれば、その問い合わせ先からは見えている状態です。
原因として多いのは次のようなものです。
よくある原因は以下です。
よくある原因
include の設計ミスよくある原因
ドメイン認証では、TXTを求められる場合もあれば、CNAMEを求められる場合もあります。
つまり、TXTは「文字列で証明・宣言する」用途、CNAMEは「別名として接続先を示す」用途、と考えると整理しやすいです。
TXTレコードは、
DNS上に文字列を置き、その文字列を外部サービスや認証の仕組みが読みに来るためのレコード
です。
その結果として、
などができるようになります。
特に押さえておきたいのは次の点です。
DNSのTXTレコードは、単なる補助的な設定ではありません。
現在のWeb運用では、
といった重要な場面で使われる、非常に実務的なレコードです。
Search Console認証やメール到達率改善に関わる場面が多いため、「TXTレコードは文字列を置くもの」だけでなく、何の目的でその文字列を置くのかまで理解しておくことが大切です。
以上、DNSのテキストレコードについてでした。
最後までお読みいただき、ありがとうございました。