積み上げログ技術ブログ記事一覧へ

自主執筆記事

whoisで「登録あり」に見えたドメインが、RDAPでは全部失効していた|6件を調べ直した話

AdSenseに登録したまま放置していたサイトを整理するため、ドメインの生死を調べた。whoisでは3件が「登録あり」に見えたが、RDAPで照会し直すと全件が失効していた。TLDごとに応答形式が違うことが原因だった。確実に判定する方法をまとめる。

インフラ公開: 2026/08/24更新: 2026/08/24
whoisRDAPドメインDNSAdSense

01 / 本文

結論:ドメインの生死を確かめるなら RDAP を使う

AdSense に12サイト登録したまま放置していた。整理するために、それぞれのドメインがまだ生きているか調べた。

whois で照会したところ、6件のうち3件が「登録あり」に見えた。ところが RDAP で照会し直すと、6件すべてが失効していた。

原因は単純だ。whois の応答形式は TLD ごとにバラバラで、「登録がない」ことの伝え方も統一されていない。私のスクリプトは No match という文字列だけを見ていたので、別の言い回しを使う TLD で判定を誤った。

02 / 本文

何が起きたか

調べたのは次の6件だ。すべて数年前に取得して、サイトを作ったまま放置していたもの。

.net.blogNo match for ... と返ってきたので、失効と判定できた。

問題は .info.live.online の3件だった。応答に No match が含まれず、注意書きやレジストリの案内文だけが返ってきた。スクリプトは「登録あり」と扱ってしまった。

「登録あり」なのに有効期限が取れないという結果になり、そこで異常に気づいた。

# 判定を誤った書き方
whois example.info | grep -q 'No match' && echo '失効' || echo '登録あり'
# → 「登録あり」と出るが、実際は失効している

03 / 本文

RDAP なら、HTTPのステータスで判定できる

RDAP(Registration Data Access Protocol)は、whois の後継として作られた仕組みだ。応答が JSON で統一されていて、文字列を読み解く必要がない。

そして何より、登録がないドメインは HTTP 404 を返す。ステータスコードだけで判定できる。

https://rdap.org/domain/<ドメイン> に投げると、その TLD の RDAP サーバーへ転送してくれる。TLD ごとに問い合わせ先を用意しなくて済む。

import json, urllib.request, urllib.error

def is_registered(domain):
    req = urllib.request.Request(
        f'https://rdap.org/domain/{domain}',
        headers={'Accept': 'application/rdap+json'})
    try:
        with urllib.request.urlopen(req, timeout=30) as r:
            data = json.loads(r.read().decode())
        ns = [n.get('ldhName', '') for n in data.get('nameservers', [])]
        events = {e['eventAction']: e['eventDate'][:10]
                  for e in data.get('events', [])}
        return True, ns, events.get('expiration')
    except urllib.error.HTTPError as e:
        if e.code == 404:
            return False, [], None       # 失効している
        raise

04 / 本文

RDAP で分かること

返ってくる JSON には、判断に必要なものが揃っている。

statusactiveclient transfer prohibited など。

nameservers — 現在のネームサーバー。ここが空なら、登録はあってもDNSが設定されていない。

eventsregistration(取得日)、expiration(期限)、last changed(最終変更)。

last changed は特に役に立つ。 ネームサーバーを変更したのに反映されないとき、この日時が動いていなければ、申請自体が届いていないと分かる。反映待ちではない。

05 / 本文

whois が使えない TLD も増えている

.shop は 2026年5月に whois が廃止された。照会すると、RDAP へ移行した旨の案内だけが返る。

ICANN の方針で、他の TLD も順次 RDAP へ移行している。新しく書くなら、最初から RDAP を使ったほうがいい。

ただし .jp は例外だ。JPRS は RDAP に対応しておらず、whois を使う。ドメイン名のあとに /e を付けると英語で返る。

# .jp は JPRS の whois。英語で返させる
whois -h whois.jprs.jp 'example.jp/e' \n  | grep -E 'Name Server|Status|Last Updated'

06 / 本文

放置したドメインを整理する意味

調べた結果、AdSense に登録した12サイトのうち 6件はドメインが失効していた。存在しないサイトを登録したままにしていた。

審査ではアカウント全体が見られる。動いていないサイトが半数を占めている状態は、印象として良くない。

取得したまま忘れているドメインは、意外と溜まる。年に一度でも棚卸しをしておくと、更新料の無駄も防げる。

07 / 本文

まとめ

whois は TLD ごとに応答形式が違うNo match だけを見る判定は当てにならない。

RDAP なら HTTP 404 で判定できる。 https://rdap.org/domain/<ドメイン> に投げれば、TLD ごとの問い合わせ先を意識しなくて済む。

.jp は RDAP 非対応なので whois を使う。.shop は whois が廃止済み。

判定が怪しいと感じたら、別の方法で照会し直す。 今回は「登録ありなのに期限が取れない」という不整合が手がかりになった。

08 / 本文

AdSense対策シリーズ

審査に落ちてから、申請の準備が整うまでの記録です。

/articles/manual/adsense-low-value-content-measured/ — 落ちた原因を、記事340本の文字数を測って特定した

/articles/manual/noindex-does-not-hide-from-adsense/ — noindex は審査には効かない。検索から消しても審査員には見えている

/articles/manual/adsense-required-pages-checklist/ — 申請に必要なページ一式。プライバシーポリシーに何を書くか

/articles/manual/whois-rdap-expired-domain-check/ — 登録したまま放置したドメインの生死を調べる(whois と RDAP)(この記事)

コメント

この記事へのコメント

お名前だけで投稿できます。アカウント登録やログインは不要です。 いただいたコメントは確認のうえ公開します。