PageSpeed Insightsで“[id] 属性が有効でフォーカス可能な要素の ID が一意ではありません”という改善案が出た時の対処法です。
これはフォーカス可能な要素(入力フォームなど)の中に重複したIDを指定しているページを検証した時に出る改善案です。
WordPressを使っている当サイトでは「サイト内検索」のボタン部分にこの指摘が出ていましたので対処しました。その時の内容です。
対処方法は簡単で、既存のid名を重複しないように変更すればOKです。
PSI:“[id]属性が有効でフォーカス可能な要素のIDが一意ではありません”の対処法
数カ月前にGoogleが提供するサイト診断ツール「PageSpeed Insights」の仕様が変更され、ユーザー補助という項目に出る改善案が多くなりました。
ユーザー補助と題されているだけあり、検索やコメントなどでも使用されるフォーム要素(入力フォーム)のユーザビリティ関連でよく怒られます…。
今回はその指摘の1つである、
[id]属性が有効でフォーカス可能な要素のIDが一意ではありません
というのに対処した時の内容を記事にします。
新しくなったPSIの診断では、当サイトの「サイト内検索」のフォーム部分がボコボコに怒られており、これまで対処を重ねてきました。
今回の内容は「ARIA IDが一意ではありません」という指摘とほとんど同じ内容です。
1つの記事にしても良かったのですが、備忘録でもあるのでこちらに分けました。
では早速見ていきましょう・w・
原因はフォーカス可能な要素内のid名の重複
まず“[id]属性が有効でフォーカス可能な要素のIDが一意ではありません”が出る原因ですが、これは1ページ内に重複するidが存在していることにあります。
本来は一意であるはずのid(id名)が1ページ内に複数あり、スクリーンリーダーを使った時や、要素のフォーカス時にややこしいではないか!という内容です。
参考
「フォーカス可能な要素」とは、簡単に言えばパソコンのTabキーで飛べる部分です。クリックできるリンク部分や、入力フォームもこれに当たります。
さらに詳しい内容は以下のサイトで解説されているので、参考になるかと思います。
ここで改めて「PageSpeed Insights」を確認してみると、
2つの<input>要素内に「id=”searchsubmit”」と書いてあり、同じid名が指定されていることが分かりますが、今回はこれを被らないようにする必要があります。
![[id]属性が有効でフォーカス可能な要素のIDが一意ではありません-PageSpeed Insights_003](http://sologaku.com/wp-content/uploads/2023/03/id%E5%B1%9E%E6%80%A7%E3%81%8C%E6%9C%89%E5%8A%B9%E3%81%A7%E3%83%95%E3%82%A9%E3%83%BC%E3%82%AB%E3%82%B9%E5%8F%AF%E8%83%BD%E3%81%AA%E8%A6%81%E7%B4%A0%E3%81%AEID%E3%81%8C%E4%B8%80%E6%84%8F%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93-PageSpeed-Insights_003-300x151.jpg)
![[id]属性が有効でフォーカス可能な要素のIDが一意ではありません-PageSpeed Insights_004](http://sologaku.com/wp-content/uploads/2023/03/id%E5%B1%9E%E6%80%A7%E3%81%8C%E6%9C%89%E5%8A%B9%E3%81%A7%E3%83%95%E3%82%A9%E3%83%BC%E3%82%AB%E3%82%B9%E5%8F%AF%E8%83%BD%E3%81%AA%E8%A6%81%E7%B4%A0%E3%81%AEID%E3%81%8C%E4%B8%80%E6%84%8F%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93-PageSpeed-Insights_004-145x300.jpg)
当サイトの場合は、フォーム要素であるサイト内検索のボタン部分で怒られました。
静的サイトなら該当するid名を異なるものに変更するだけでOKなのですが、当サイトはWordPressということで少し面倒なことになりました。
WordPressでは「検索」を2つ使うとダメ?
WordPressには簡単にサイト内検索を実装できるウィジェットで「検索」というのがありますが、これを2つ使うとidが被ります。
使用中のWordPressのテーマにもよりますが、この「検索」ウィジェットを当サイトのようにパソコン用・モバイル用と2つ使用しているとidが被ります。
WordPressのサイト内検索には基本的に「searchform.php」というファイルが使われますが、これが2回読み込まれるので同じidが2つ出力されるわけですね~。
ということで、WordPressで“[id]属性が有効でフォーカス可能な要素のIDが一意ではありません”が出た時の対処方法は以下2つになります。
- サイト内検索を1回しか使わないようにする。
- 2つのうち1つのサイト内検索を自前で用意する。
今回は2つめの方法で、異なるidのサイト内検索を実装することで対処します。
対処法:要素内のidを重複しないようにする
当サイトの場合は「searchform.php」内に以下のような記述があり、これが先ほどの検索ウィジェットを使った時に読み込まれます。
<form method="get" id="searchform" action="<?php echo esc_url( home_url( '/' ) ); ?>"> <label class="hidden" for="s"> <?php __( '', 'default' ); ?> </label> <input type="text" placeholder="<?php echo esc_attr( st_get_search_form_placeholder() ); ?>" value="<?php the_search_query(); ?>" name="s" id="s" /> <input type="submit" value="" class="fa" id="searchsubmit" /> </form>
なのでこのコードを参考に、id名だけ「searchsubmit」から別のものに変更したものを、サイドバーのサイト内検索(パソコン用)で出力するように自前で用意します。
モバイル用のサイト内検索は検索ウィジェットでid="searchsubmit"
を出力。
パソコン用にコードを直書きした別のidのサイト内検索を出力する感じですね。
WordPressの場合はサイドバーの出力には基本的に「sidebar.php」というファイルが使われるので、今回はこれにサイト内検索のコードを直書きします。
ポイント
親テーマ内にある「sidebar.php」を編集するとテーマアップデート時に内容が消えてしまうので、これを子テーマにコピーして編集します。
「sidebar.php」を開いて該当する箇所にサイト内検索のコードを書きます。
<form method="get" id="searchform" action="<?php echo esc_url( home_url( '/' ) ); ?>"> <label class="hidden" for="s"> <?php __( '', 'default' ); ?> </label> <input type="text" placeholder="<?php echo esc_attr( st_get_search_form_placeholder() ); ?>" value="<?php the_search_query(); ?>" name="s" id="s" /> <input type="submit" value="" class="fa" id="pc-searchsubmit" /> </form>
ほとんど同じコードですが、id=”xxx”の部分を「pc-searchsubmit」に変更して検索ウィジェットが出力する「searchsubmit」というid名と重複しないようにしました。
補足
id名を変更しているので、場合によってはCSSを当て直す必要があります。
id名が変更され、重複していないか確認する
作業を終えたら早速idを確認しましょう!
まずはChromeのデベロッパーツールを使ってidを確認します。
![[id]属性が有効でフォーカス可能な要素のIDが一意ではありません-PageSpeed Insights_008](http://sologaku.com/wp-content/uploads/2023/03/id%E5%B1%9E%E6%80%A7%E3%81%8C%E6%9C%89%E5%8A%B9%E3%81%A7%E3%83%95%E3%82%A9%E3%83%BC%E3%82%AB%E3%82%B9%E5%8F%AF%E8%83%BD%E3%81%AA%E8%A6%81%E7%B4%A0%E3%81%AEID%E3%81%8C%E4%B8%80%E6%84%8F%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93-PageSpeed-Insights_008-694x352.jpg)
![[id]属性が有効でフォーカス可能な要素のIDが一意ではありません-PageSpeed Insights_007](http://sologaku.com/wp-content/uploads/2023/03/id%E5%B1%9E%E6%80%A7%E3%81%8C%E6%9C%89%E5%8A%B9%E3%81%A7%E3%83%95%E3%82%A9%E3%83%BC%E3%82%AB%E3%82%B9%E5%8F%AF%E8%83%BD%E3%81%AA%E8%A6%81%E7%B4%A0%E3%81%AEID%E3%81%8C%E4%B8%80%E6%84%8F%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93-PageSpeed-Insights_007-694x352.jpg)
同じようなサイト内検索ですが、id名は別々のものが付与されています。
続いて肝心の「PageSpeed Insights」の方でもチェックしてみます。
[id] 属性が有効でフォーカス可能な要素の ID はすべて一意です
OKですね!
まとめ
以上、PageSpeed Insightsで“[id]属性が有効でフォーカス可能な要素のIDが一意ではありません”が出た時の対処法でした。
内容自体は簡単でid名を重複しないように変更すればOKなのですが、WordPressだとその部分が自動出力なので結構面倒です。
ある程度の専門知識が必要になるので、分からない方は「検索」ウィジェットを1つに絞って対応する感じになるかと思います…。
PageSpeed Insightsの改善必須項目ではないので無視するのもアリかもです。
Copyright © 2024 ソロ学 All Rights Reserved.