2026年5月24日

2026年5月24日

国際化ドメイン(IDN/日本語ドメイン)の設定方法とWordPress運用の注意点

日本語ドメインは、DNSやサーバーの内部では「xn--」で始まるPunycode(ピュニコード)という英数字の表記に変換して扱われます。そのため、DNSレコード、Webサーバーの設定、SSL証明書、WordPressのサイトURLは、基本的にPunycode表記で設定するとトラブルを避けやすくなります。この記事では、日本語ドメインの仕組み、変換の確認方法、各設定箇所での書き方、メールや共有時の注意点を順に説明します。

日本語ドメインの仕組み

ドメイン名の仕組み(DNS)は、もともと英数字とハイフンしか扱えません。そこで、日本語などの文字を含むドメインを国際化ドメイン名(IDN)として定め、Unicodeの文字列を決まった規則でASCII文字に変換して登録・運用しています。変換後の文字列は xn-- で始まり、この部分をACEラベル、変換方式をPunycodeと呼びます。現在の規格はIDNA2008(RFC 5890〜5893)で、ブラウザはこれに互換処理を加えた方式で変換しています。

たとえば「例え.jp」は xn--r8jz45g.jp として扱われます。ブラウザのアドレス欄に日本語で入力すると、ブラウザが内部で変換してからDNSに問い合わせます。サーバー側に届くリクエストの Host ヘッダーもPunycode表記です。つまり、訪問者には日本語で見えていても、サーバーから見れば英数字のドメインと同じです。

日本語を使えるドメインの種類はTLDによって異なります。.jpでは汎用JPドメインで日本語を登録できますが、co.jpなどの属性型JPドメインでは使えません。.comなど一部のgTLDや、日本語のTLD(.コム、.みんな など)も選択肢になります。登録できる文字や長さの制限はレジストリごとに定められているため、取得前にレジストラの案内を確認してください(2026年10月現在)。

Punycodeへの変換を確認する

設定作業の前に、使うドメインのPunycode表記を確認しておきます。Linuxでは libidn2 の idn2 コマンドが手軽です。

idn2 '例え.jp'
# 逆変換(Punycode から日本語へ)
idn2 --decode 'xn--r8jz45g.jp'

Pythonを使う場合、標準の "例え.jp".encode("idna") は古い規格(IDNA2003)に基づいています。多くの日本語ドメインでは同じ結果になりますが、規格の違いが出る文字もあるため、厳密に確認したいときは idna パッケージ(IDNA2008対応)を使います。

import idna
print(idna.encode("例え.jp").decode("ascii"))

レジストラの管理画面にもPunycode表記が表示されていることが多いので、変換結果と一致しているかを照合しておくと、後の設定で入力ミスに気付きやすくなります。

DNSレコードの設定

DNSサービスの管理画面によっては日本語のまま入力できるものもありますが、ゾーン内部ではPunycodeで保存されています。BINDなどのゾーンファイルを直接書く場合はPunycodeで記述します。

xn--r8jz45g.jp.      3600 IN A     203.0.113.10
www.xn--r8jz45g.jp.  3600 IN CNAME xn--r8jz45g.jp.

確認には dig を使います。libidn2対応でビルドされた dig は日本語の入力を自動で変換しますが、環境によって動作が異なるため、Punycodeで問い合わせると環境の差に左右されません。

dig +short A xn--r8jz45g.jp

Webサーバーの設定

レンタルサーバーでは、ドメイン追加の画面で日本語を入力するとPunycodeに変換して登録されるのが一般的です。VPSでNginxやApacheを設定する場合は、Host ヘッダーに合わせてPunycodeで書きます。

server {
    listen 443 ssl;
    server_name xn--r8jz45g.jp www.xn--r8jz45g.jp;
    # 以下、通常の設定
}

Apacheでも ServerName xn--r8jz45g.jp のように指定します。設定ファイルに日本語のまま書くと、リクエストと一致せず別のバーチャルホストが応答する原因になります。

SSL証明書

SSL証明書の対象ドメイン(SAN)にもPunycodeが記載されます。Let's Encryptは国際化ドメインにも対応しており、certbotではPunycodeで指定します。

sudo certbot --nginx -d xn--r8jz45g.jp -d www.xn--r8jz45g.jp

有料証明書の場合も、CSRのコモンネームはPunycodeで作成するのが一般的です。認証局によって申し込み画面の入力方法が異なるため、販売店の案内に従ってください。

WordPressでの設定と注意点

WordPressの「WordPressアドレス(URL)」と「サイトアドレス(URL)」は、Punycode表記(例:https://xn--r8jz45g.jp)で設定することをおすすめします。日本語のまま保存すると、プラグインやテーマ、外部サービスとの連携でURLの比較が一致しない、リダイレクトがループする、といった問題が起きることがあります。ブラウザのアドレス欄では日本語で表示されるので、訪問者から見た見た目は変わりません。

設定を変える前には、データベースを含めたバックアップを取ってください。すでに日本語表記のURLで運用していて本文中のリンクも日本語になっている場合は、ステージング環境で wp search-replace を試し、表示とリンクを確認してから本番に反映します。

wp search-replace 'https://例え.jp' 'https://xn--r8jz45g.jp' --dry-run

--dry-run で置換件数を確認し、問題がなければオプションを外して実行します。URLがパーセントエンコードされた形で保存されている箇所もあるため、置換後にページを実際に開いて確認してください。

メールアドレスと共有時の注意

日本語ドメインのメールアドレスは、送受信の両側で国際化メール(SMTPUTF8など)への対応が必要になり、対応していないサービスやフォームがまだ多くあります。WordPressの is_email() もドメイン部分を英数字とハイフンで検査するため、日本語表記のアドレスは弾かれます。問い合わせ先やWordPressの管理者メールには、英数字のドメインのアドレスを使うのが無難です。

また、SNSやチャットツールでURLを共有すると、相手側でPunycode表記のまま表示されることがあります。ブラウザも、見た目が似た文字を使ったなりすまし(ホモグラフ攻撃)を防ぐため、文字の組み合わせによってはPunycodeで表示します。名刺や広告で日本語ドメインを使う場合でも、英数字のドメインを併せて取得し、どちらか一方を正規のURLに決めて、もう一方から301リダイレクトする構成にしておくと運用しやすくなります。

まとめ

  • 日本語ドメインは内部では xn-- で始まるPunycodeで扱われ、サーバーに届くHostもPunycodeです。
  • idn2 コマンドやPythonの idna パッケージで変換結果を確認し、レジストラの表示と照合します。
  • DNSレコード、Webサーバーの server_name、SSL証明書、WordPressのサイトURLはPunycodeで設定すると、不一致によるトラブルを避けやすくなります。
  • URL変更はバックアップとステージングでの確認を挟み、wp search-replace --dry-run で影響を確かめてから行います。
  • メールは英数字ドメインを使い、日本語ドメインと英数字ドメインを併用する場合は正規URLを決めて301リダイレクトします。

お気軽にご相談ください

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