サイトタイトルの「??」をエンコードエラーから直す方法

ブラウザで古い日本語サイトを開いたとき、ページタイトルやロゴの文字が「??」「���」「文字化け」のように表示されることがあります。本文は読めるのに、タブだけが正しく表示されない場合もあれば、フレーム内のページ全体が崩れて見える場合もあります。こうした現象は、HTMLに保存された文字コードと、サーバーやブラウザが解釈する文字コードが一致していないときに起こります。

特に、1990年代から2000年代に作られたサイトでは、Shift_JIS、EUC-JP、ISO-2022-JP、UTF-8が混在しやすくなっています。古いフレーム構成、外部CSS、画像に埋め込まれたタイトル、文字コードを指定していないHTMLなどが重なると、原因の切り分けが難しくなります。サイトのタイトルがエンコードエラーで「??」になる直し方を考えるときは、まず表示側ではなく、元ファイルに文字が残っているかを確認することが重要です。

「??」は、単なる表示上の変換ミスとは限りません。保存やアップロードの途中で日本語が認識できず、実際の文字が疑問符へ置き換えられているケースがあります。この場合、HTMLの文字コード宣言を変更するだけでは元に戻りません。バックアップ、ファイルのバイト列、サーバーのHTTPヘッダーを順番に調べる必要があります。

古いフレームベースのサイトでは、最初に読み込まれるframesetページと、実際にタイトルを記述している子ページが別ファイルになっていることもあります。ブラウザに表示されるサイト名がどのHTMLから出ているのかを特定できれば、修正対象を絞り込めます。見た目だけを変更するのではなく、文字コードの整合性を保ったまま復旧することが安全です。

「??」が表示される仕組みを確認する

HTMLの<title>要素に日本語が書かれていても、ブラウザが別の文字コードとして読み込めば、文字化けが発生します。たとえば、ファイルをShift_JISで保存しているのに、HTMLの<meta charset="UTF-8">を指定すると、漢字やひらがなのバイト列を誤って解釈します。逆に、UTF-8のファイルをShift_JISとして配信しても同様です。

最初に確認するのは、ブラウザのタブに出る文字が本当にHTMLの<title>から来ているかどうかです。ページのソースを表示し、<head>内にある次のような記述を探します。

<title>サイト名</title>

フレームページの場合、親ページの<title>が空または短い名前で、子フレームのHTMLに実際のタイトルが記述されている場合があります。<frameset>や<frame src="...">を見つけたら、srcで指定されたファイルを個別に開き、それぞれの<title>を調べます。画像ロゴに文字が含まれている場合は、HTMLを直しても画像内の文字化けは変わりません。

タイトルが「縺薙s縺ォ縺。縺ッ」のような意味不明な日本語になる場合は、文字コードの読み違いである可能性が高いです。一方、「??」がそのまま並ぶ場合は、変換ツールやエディターが変換不能な文字を疑問符に置換した可能性があります。後者は元データが失われていることがあるため、公開中のページ、バックアップ、古いパソコン内のファイルを比較してください。

HTMLとHTTPヘッダーを同じ設定にする

HTMLファイルの先頭付近には、使用する文字コードを示す宣言を置きます。現在の標準はUTF-8なので、ファイル自体をUTF-8で保存するなら、<head>の早い位置に次の記述を入れます。

<meta charset="UTF-8">

古いHTMLでは、次のような長い形式が使われることもあります。

<meta http-equiv="Content-Type"
      content="text/html; charset=Shift_JIS">

大切なのは、宣言の文字列を変えることではなく、実際のファイル保存形式と一致させることです。Shift_JISのファイルにUTF-8と書くだけでは改善しません。エディターの「文字コードを指定して保存」「UTF-8で保存」「BOMなしで保存」などの機能を使い、HTML本体を変換してから宣言を合わせます。

さらに、サーバーが返すHTTPレスポンスヘッダーも確認します。サーバー側でContent-Type: text/html; charset=Shift_JISが設定されているのに、HTMLではUTF-8を指定していると、ブラウザによって解釈が揺れることがあります。Apacheなら.htaccess、レンタルサーバーなら管理画面のPHP設定や文字コード設定を調べ、同じ文字コードに統一します。

PHPなどでページを出力している場合は、次のようなヘッダーが使われます。

header('Content-Type: text/html; charset=UTF-8');

ただし、静的HTMLへ無条件にPHPの設定を追加する必要はありません。サーバー設定、HTML宣言、ファイル保存形式の三つを確認し、重複した指定や古い設定があれば整理します。

フレーム構成とファイルの保存状態を調べる

フレームサイトでは、入口となるindex.html、フレームを定義するframeset.html、メニュー用ページ、本文用ページが分かれています。ブラウザのタブタイトルは親フレームのタイトルを表示するため、本文ページの文字コードだけを直しても、タブの「??」が残ることがあります。FTPでファイル一覧を取得し、入口から読み込まれる順番に確認してください。

たとえば、次の構成なら、最初に見るべきなのはindex.htmlです。

<frameset cols="180,*">
  <frame src="menu.html">
  <frame src="main.html">
</frameset>

index.htmlにタイトルがない場合は、ブラウザによって空のタイトルやファイル名が表示されます。menu.htmlやmain.htmlに日本語タイトルがあっても、親フレームのタブ表示へ自動的に反映されるとは限りません。親ページの<title>を正しい文字列にし、各子ページにも同じ文字コード宣言を設定します。

編集前には、FTPからサイト全体をダウンロードして保管します。ファイルを直接上書きすると、変換ミスや改行コードの変更に気づきにくくなります。ファイル名に日本語が含まれている場合は、FTPソフトの設定も確認します。ファイル名の文字コードとHTML本文の文字コードは別の問題ですが、古いFTP環境では両方が原因になることがあります。

画像化されたロゴの文字が崩れている場合は、HTMLではなく画像ファイルの差し替えが必要です。JPEGやGIFに描かれた文字はブラウザの文字コードで変換されません。元画像が失われているなら、同じ書体や色を参考に再作成し、alt属性には検索エンジンと読み上げソフトが理解できる日本語のサイト名を設定します。

文字化けを修正する実際の手順

作業は、保存、判定、変換、確認、公開の順に進めると安全です。まず元ファイルを複製し、作業用フォルダーを作ります。次にエディターで文字コードを自動判定させますが、自動判定だけを信頼せず、複数のファイルで日本語が正常に読めるか確認します。特に短いタイトルだけのファイルは判定材料が少なく、誤認識されやすくなります。

文字コードがShift_JISだと分かったら、UTF-8へ変換保存し、HTML宣言をUTF-8へ変更します。変換後に「髙」「﨑」「①」などの機種依存文字が「?」へ変わることがあるため、固有名詞や社名を目視で確認します。変換前のファイルと変換後のファイルを比較し、タイトル、メニュー、リンクの日本語がすべて残っているかを確認してください。

ブラウザのキャッシュが古いHTMLを表示することもあります。修正後はスーパーリロード、別ブラウザ、スマートフォン回線などで確認します。開発者ツールの「Network」からHTMLを選び、レスポンスヘッダーのContent-Typeを調べると、サーバーがどの文字コードを通知しているか分かります。コマンドラインを使える場合は、curl -Iでヘッダーだけを確認する方法もあります。

公開後は、トップページだけでなく、フレーム内のメニュー、本文、リンク先、404ページ、問い合わせフォームまで確認します。タイトルタグが直っても、ページ内の日本語やフォーム送信結果が崩れていれば、サイト全体の設定は統一できていません。古いサイトを復旧する際の周辺情報を確認する資料として、復旧作業の参考を読む場合も、個別のHTML設定とは分けて判断するとよいでしょう。

原因別に選ぶ修正方法と再発防止

文字コードの誤指定だけなら、ファイルの保存形式、meta宣言、HTTPヘッダーをそろえることで直せます。ファイル内の日本語がすでに「??」へ置換されている場合は、元の文字列をバックアップや検索結果、印刷物、画像データから復元して入力し直します。ブラウザ上で正しく見えるコピーをそのまま保存すると、別の文字コードで再び壊れることがあるため、保存時の設定を明示します。

古いフレーム構造そのものは、タイトルの文字化けの直接原因ではありません。ただし、修正対象が複数に分かれ、親ページと子ページで文字コードが異なる状態を作りやすくします。将来的な保守を考えるなら、フレームを通常のHTML構造へ段階的に移行し、共通メニューをテンプレートやサーバーサイド処理で管理すると、タイトルやメタ情報の統一が容易になります。

症状 主な原因 確認する場所 基本的な対処
タブだけ「??」になる 親HTMLのtitleが置換済み framesetの<title> 元のサイト名を再入力し、UTF-8で保存
日本語が「縺」のように崩れる Shift_JISとUTF-8の不一致 HTML宣言と実ファイル ファイルを正しい文字コードへ変換
ページ全体が文字化けする HTTPヘッダーの指定違い 開発者ツールのNetwork サーバー設定とHTML宣言を統一
ロゴだけ読めない 文字が画像に埋め込まれている GIF・JPEG・PNG 元画像を探すかロゴを再作成
修正後も古い表示が残る ブラウザやCDNのキャッシュ キャッシュ、配信設定 キャッシュ削除と再確認
一部の漢字だけ「?」になる 変換時の機種依存文字 固有名詞、旧データ 元データと照合して手入力で修復

作業後は、変更したファイル名、元の文字コード、変換後の文字コード、サーバー設定を記録しておきます。バックアップを日付付きで保存し、次回の更新時に同じエディターと保存形式を使えば、再発の可能性を抑えられます。検索結果に表示されるサイト名も、タイトル修正後すぐには変わらないため、クロールとキャッシュの更新期間を考慮して確認します。

「??」が出たままのタイトルは、訪問者に古いサイトや安全性に不安のあるページという印象を与えます。まずは公開ファイルを保存し、親フレームの<title>、HTMLの文字コード宣言、HTTPヘッダー、画像ロゴの順に点検してください。元の日本語が残っているうちにUTF-8へ統一し、各ページを実機で確認することが、確実な文字化け修正への近道です。