トピックを検索
すべてのページで同じページタイトル
サイトの共通レイアウトが全ページに一つのタイトルを設定し、ルーターも変更しないため、タブ、ブックマーク、履歴がすべて同じ名前になります。
問題
複数のタブを開いている人やスクリーンリーダー利用者が、今どのページにいるのか、どのタブに戻ればよいのか分かりません。
園芸店のオンラインショップで、春植え球根、買い物かご、お問い合わせのページを新しいタブで開き、見比べようとしています。どのタブにも「Fernway Garden」と表示されます。買い物かごを探すには、タブを一つずつクリックするしかありません。スクリーンリーダー利用者がウィンドウを切り替えると、毎回「Fernway Garden」と読み上げられ、ページの中を読まないと現在地が分かりません。履歴やブックマークにも同じ名前が並ぶため、昨日見たページに戻るには一つずつ開くことになります。
このショップはシングルページアプリケーションで、これはシングルページアプリケーションが2.4.2を満たせない最もよくある原因です。ブラウザーが読み込むHTMLは一つだけで、その共通レイアウトが <title>Fernway Garden</title> を設定します。その後はルーターがページを読み込まずにクライアント側で本文を入れ替えるため、アプリ自身のコードが変えない限り、タイトルはそのままです。サーバーで描画するサイトでは、各ページが自分の <title> を持って届くため、このような失敗はまれです。シングルページアプリケーションでは、誰かがルーターにタイトルを組み込むまで、新しいプロジェクトは最初からこの状態です。どのページにもタイトルはありますが、ページの内容を表していません。WCAG 2.4.2は、各ページに主題や目的を表すタイトルを求めています。商品一覧でも買い物かごでも同じタイトルでは、どちらも表していません。
同時に開くページが増えるほど問題は大きくなります。タブが一つなら迷いませんが、同じ名前のタブが5つあれば迷います。ノートパソコンの幅の狭いタブや、スマートフォンのタブ一覧には、タイトルの最初の数語しか表示されません。そのため、サイト名から始まるタイトルは、後ろが異なっていても同じように見分けられません。
10グループ中3グループに影響
- 全盲 (影響あり)
- 弱視 (影響あり)
- 色覚 (影響なし)
- ろう (影響なし)
- 難聴 (影響なし)
- 発話 (影響なし)
- 手の操作 (影響なし)
- 届く範囲・力 (影響なし)
- 認知 (影響あり)
- 光過敏 (影響なし)
- 視覚を使わない スクリーンリーダーは、ページを開いたときやウィンドウを切り替えたときに、まずタイトルを読み上げます。どのタイトルも同じだと手がかりにならず、ページの中を読み進めないと現在地が分かりません。
- 言語・認知・学習の能力が限られる 現在地を覚えておく代わりに、タブ、履歴、ブックマークに頼っている人にとって、同じ名前が並んだ一覧は何の助けにもなりません。
- 視覚が限られる 画面を拡大している人は、画面の一部しか見ていません。タブのタイトルで現在地をすばやく確かめられないと、ページ内を見回すことになります。
axeの document-title のようなページ単位のチェックは、ページを一つずつ確認し、タイトルがあって空でないかだけを見ます。そのため、このサイトはすべてのページが合格です。一方、サイト全体を巡回するクローラー(多くは検索エンジン対策用)は、複数のURLで重複するタイトルを報告します。サイト全体でこの問題を見つけられるので、一度実行してください。ただし、どちらのツールも、タイトルがページを表しているかは判断しません。「Page 2」や「basket-view」のようなルート名でも合格します。また、クローラーは各URLを新しく読み込むため、アプリ内を移動した後にタイトルが古いまま残る問題(戻る操作の後も前の画面のタイトルのままなど)には気づきません。提案された修正にも同じ確認が必要です。共通レイアウトでタイトルを設定するだけでは、同じ問題を繰り返します。開いたページだけでなく、アプリ内を移動した後のタイトルも確認してください。
修正方法
各ページのタイトルでページ名を先、サイト名を最後に示し、画面が変わるたびにタイトルも更新します。
- 1どのページにもタイトルがあり、異なるページが同じタイトルを共有しない。
- 2ページ自身の名前を先に、サイト名を最後に置く。
- 3ページを読み込まずに画面が変わるときも、タイトルを合わせて変える。
<!-- app.html, the shared layout --><head> <title>Fernway Garden</title></head>商品一覧から買い物かごまで、どの画面も同じタイトルです。タブ、ブックマーク、スクリーンリーダーのどれにも、どのページかが伝わりません。
各ページがHTMLの中で自分のタイトルを送るため、スクリプトが動く前から、どのブラウザーでもタイトルがあります。ページ名が先にあるので、幅の狭いタブでも見え、スクリーンリーダーも最初に読み上げます。
どちらも2.4.2を満たします。サーバーが各ページを描画する場合は、テンプレートでタイトルを設定するのが最も簡単です。失敗するスクリプトも、合わせて管理するものもありません。クライアント側で画面を入れ替えるシングルページアプリケーションでは、タイトルを運ぶ新しいHTMLがないため、ルーターで設定する必要があります。多くのフレームワークには、これを行いサーバー側でも出力するheadのコンポーネント(<svelte:head>、Next.jsの metadata、Angularのルートの title)があります。ページの作り方に合う方法を使ってください。両方を使うサイトも多くあります。
ページ名を先に、サイト名を最後に置き、ダッシュや縦線で区切ります。例:「買い物かご – Fernway Garden」。サイトは利用者がすでに分かっているので、必要なのはどのページかです。セクション内のページでは、具体的なものから順に並べます。例:「チューリップミックス – 春植え球根 – Fernway Garden」。
同じテンプレートを使うページには、見分けられる情報を加えます。たとえば次のような方法があります。
- 検索結果には検索語を入れ、役に立つなら件数も入れる。例:「tulips の検索結果(24件)– Fernway Garden」
- 購入手続きの各ステップには、何番目のステップかを入れる。例:「お届け先、ステップ2/4 – Fernway Garden」
- エラーと一緒に戻されたフォームは「エラー:」で始め、最初に聞こえるようにする。
タイトルは短くします。タブや検索結果では、最初の30文字ほどが特に重要です。キーワードを詰め込んでも、ページを見つけやすくはなりません。タイトルはページの言語で書き、ページのほかの部分と一緒に翻訳します。
ページ内で開くダイアログやパネルには、専用のタイトルは要りません。独自のURLを持つ画面には必要です。タイトルを変えただけでは、画面が変わったことはスクリーンリーダー利用者に伝わりません。新しい画面の告知とフォーカスの移動は別の課題で、画面遷移のトピックで扱います。
AI コーディングアシスタントで修正しますか? このガイドを Markdown で取得
修正の確認
マウスを使わない5つの確認
確認方法: スクリーンリーダー
OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。ルートやテンプレートを追加した際は、再度確認します。
制限
このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。タイトルがページを表しているかは、ツールでは判断できません。利用者の立場でタイトルを読んでください。iframeや新しいウィンドウで内容を開くアプリでは、そこにもタイトルが必要です。実際のページで、操作全体を確認してください。
よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。
コードを更新しても、使いやすさを保つために
ガイドの内容を、コーディングエージェントやCIで使える開発ルールにまとめます。更新後は、キーボードとスクリーンリーダーで再テストし、問題が再発していないか確認します。