HTMLで作ったページの中に「この部分は見せたくないな」って思うこと、よくありますよね。
たとえば、あとで使う予定のパーツや、ボタンを押すまで見せたくない説明文など、一時的に非表示にしたい場面って意外と多いんです。
HTMLを非表示にする基本的な方法とは?

CSSで要素を非表示にするdisplay:noneの使い方
「display:none」は、Webページ上の要素を完全に非表示にするためによく使われるCSSプロパティです。
非表示になった要素は、画面上から消えるだけでなく、そのスペースも無くなります。
これはHTMLを見た目上完全に消したいときに便利な方法です。
主な使い方は以下のとおりです。
- HTML要素に直接style属性で指定する
- CSSファイルでクラスを定義して適用する
- JavaScriptで表示・非表示を切り替える
以下はHTMLに直接style属性を使った例です。
<div style="display:none;">この内容は表示されません</div>
また、CSSクラスを使う場合は次のようになります。
.hidden {
display: none;
}
<div class="hidden">この内容は非表示</div>
display:noneで非表示にされた要素は、ユーザーに一切見えなくなり、ページのレイアウトにも影響を与えません。
この性質を理解して正しく使うことが大切です。
visibility:hiddenとの違いと使い分け
「visibility:hidden」もHTML要素を非表示にする方法の一つですが、「display:none」とは明確な違いがあります。
最も大きな違いは“スペースが残るかどうか”です。
「visibility:hidden」を使うと、要素は非表示になりますが、その場所はページ上に残ります。
つまり、レイアウトはそのままで見えなくするだけです。
使い分けのポイントは次の通りです。
- 完全に消してスペースも無くしたい場合はdisplay:none
- 見えなくするだけでレイアウトを保ちたいならvisibility:hidden
たとえば、メニューの一部だけを一時的に見せないようにしたいけれど、他の項目の位置はそのままにしたいときはvisibility:hiddenが適しています。
以下のコードが例です。
<div style="visibility:hidden;">見えないけれど場所は残る</div>
見え方は同じでも、レイアウトに与える影響が異なるため、目的に応じて使い分けることが重要です。
position:absoluteとopacityを使った非表示テクニック
HTML要素を非表示にするには「position:absolute」と「opacity」を組み合わせた方法もあります。
これは一見すると上級者向けのテクニックですが、うまく使えばアニメーションやレイヤー操作にも活用できます。
まず、この方法の特徴を見てみましょう。
- opacity:0で透明にすることで要素を非表示に見せる
- position:absoluteで他の要素と重ならないように配置できる
- 要素は画面上に存在し、クリックや選択も可能
以下は基本的なコード例です。
.invisible-box {
position: absolute;
opacity: 0;
}
<div class="invisible-box">透明で見えないボックス</div>
この方法を使うと見た目には非表示でも、JavaScriptなどでアニメーションしながら表示することが可能です。
インタラクティブなUIにはぴったりの手法です。
HTMLの属性hiddenを使った非表示の実装
HTML5から追加された「hidden」属性を使うと、HTMLだけで要素を非表示にできます。
この方法はとてもシンプルで、CSSやJavaScriptを書かなくても非表示にできるというメリットがあります。
使い方はとても簡単です。
- HTMLタグにhidden属性を追加する
- CSSでhidden属性にスタイルを追加することも可能
- JavaScriptでhidden属性の追加・削除もできる
以下はシンプルな使用例です。
<div hidden>この内容は表示されません</div>
hidden属性はあくまで「非表示にする目的」のみなので、装飾やレイアウト制御には不向きですが、「まずは表示しない要素をHTML上に準備しておく」という場面には便利です。
JavaScriptを使ってHTML要素を非表示にする方法
JavaScriptを使うと、ユーザーの操作に応じてHTML要素を非表示にすることができます。
これにより、クリックやホバー、スクロールなどに連動した動的な非表示処理が可能になります。
基本的なやり方には次のような方法があります。
- style.display = “none” を使って非表示にする
- classListを操作して非表示用のクラスを付与・削除
- 要素にhidden属性を動的に追加する
次のコードは、ボタンを押すと要素が非表示になるシンプルな例です。
document.getElementById("hideBtn").addEventListener("click", function() {
document.getElementById("target").style.display = "none";
});
<button id=”hideBtn”>非表示にする</button>
<div id=”target”>この要素が消えます</div>
JavaScriptによる制御は柔軟性が高く、様々な表示切り替え処理に応用できます。
ただし、操作ミスやエラーで表示されなくなるリスクもあるため、正確なコードの記述が大切です。
画面リーダー対応の非表示とアクセシビリティ配慮
Webサイトを作るうえで大切なのがアクセシビリティへの配慮です。
特に視覚に障がいのある方が使う「画面リーダー」では、見えないはずの情報が読み上げられてしまうことがあります。
そのため、以下のポイントを意識して実装する必要があります。
- display:noneやhidden属性は画面リーダーにも非表示になる
- opacity:0やvisibility:hiddenは読み上げられる可能性がある
- aria-hidden=”true”を使って読み上げを抑制できる
例として、以下のようにaria属性を使います。
<div aria-hidden="true">読み上げさせたくない内容</div>
アクセシビリティを考慮した非表示は、見た目だけでなく情報の伝え方まで意識することが重要です。
誰にとっても使いやすいWebページを目指しましょう。
HTML要素の表示・非表示を切り替える方法

ボタンで表示・非表示を切り替える基本スクリプト
HTMLの要素をボタンで表示・非表示に切り替えるには、JavaScriptを使うのが一般的です。
この方法はとてもわかりやすく、動きのあるWebサイトを作るときに役立ちます。
基本的には、クリックイベントを使って表示状態を変えるだけなので、初心者でも簡単に試せます。
まずは、やり方の流れを説明します。
- ボタンと表示切り替えたい要素をHTMLで用意する
- JavaScriptでボタンのクリックイベントを取得する
- displayの値を”none”または”block”で切り替える
実際のコードはこのようになります。
<button onclick="toggleDisplay()">表示/非表示</button>
<div id="content">ここが表示されます</div>
function toggleDisplay() {
var elem = document.getElementById(“content”);
if (elem.style.display === “none”) {
elem.style.display = “block”;
} else {
elem.style.display = “none”;
}
}
このように、ボタンを押すたびに表示状態が切り替わる仕組みになります。
とても基本的ですが、あらゆるWebページに応用できる大切なテクニックです。
jQueryを使ったスムーズな表示切り替え
jQueryを使うと、表示や非表示の切り替えをよりスムーズにアニメーション付きで実現できます。
クリック一つでスライド表示したり、フェードアウトさせたりできるので、動きのあるインターフェースに向いています。
ここでは代表的なjQueryの切り替えメソッドを紹介します。
slideToggle():スライドで開閉するfadeToggle():フェードイン・アウトで切り替えるtoggle():単純な表示・非表示の切り替え
以下はslideToggleを使った基本的な例です。
<button id="btn">メニュー表示</button>
<div id="menu">メニュー内容</div>
$(“#btn”).click(function() {
$(“#menu”).slideToggle();
});
たった数行で自然な切り替え効果を加えられるのがjQueryの魅力です。
見た目にも使いやすさにもこだわりたいときにおすすめです。
CSSトランジションを用いたアニメーション効果
CSSだけでも、アニメーションのような表示切り替えができます。
これには「CSSトランジション」を使います。
CSSトランジションは、変化に“なめらかさ”を加えるテクニックで、特にマウス操作や表示切り替えに効果的です。
以下のポイントをおさえて実装してみましょう。
- transitionプロパティで変化を滑らかにする
- 高さや不透明度の変化に使うとわかりやすい
- display:noneはトランジションが効かないので注意
基本的なコードの一例はこちらです。
.toggle-box {
height: 0;
overflow: hidden;
transition: height 0.5s ease;
}
.toggle-box.open {
height: 100px;
}
JavaScriptでクラスを切り替えることで、スムーズな開閉アニメーションが実現できます。
CSSだけでも動きを出したいときに便利な手法です。
状態を保持するためのlocalStorage活用法
HTMLの表示・非表示をページをまたいで維持したい場合、「localStorage」を使うのが効果的です。
localStorageはブラウザ内に情報を保存できる仕組みで、一度非表示にした要素を次回の表示でも非表示のままにすることが可能です。
使い方は以下のようになります。
- 状態を”true”や”false”で保存する
- ページ読み込み時に保存された状態を読み込む
- ボタンの操作時に保存内容を更新する
コードの例は次の通りです。
document.addEventListener("DOMContentLoaded", function() {
var state = localStorage.getItem("boxVisible");
if (state === "false") {
document.getElementById("box").style.display = "none";
}
});
function toggleBox() {
var box = document.getElementById(“box”);
if (box.style.display === “none”) {
box.style.display = “block”;
localStorage.setItem(“boxVisible”, “true”);
} else {
box.style.display = “none”;
localStorage.setItem(“boxVisible”, “false”);
}
}
この方法なら、一度隠した内容を次回訪問時にも維持できます。
設定やナビゲーションメニューにとても便利です。
チェックボックスやラジオボタンで制御する方法
HTMLのフォーム要素を使って、JavaScriptを使わずに表示・非表示を制御する方法もあります。
特にチェックボックスやラジオボタンとCSSを組み合わせると、条件付きの表示が可能になります。
この方法の特徴は以下の通りです。
- JavaScript不要でシンプル
- フォームとの連動がしやすい
- 表示条件をCSSだけで制御できる
以下はチェックボックスによる切り替えの例です。
<input type="checkbox" id="toggle">
<div class="box">この内容が切り替わります</div>
#toggle:checked ~ .box {
display: none;
}
JavaScriptが使えない環境でも動作するのがこの方法のメリットです。
設定画面やオプション切り替えに向いています。
クリック外判定で自動的に非表示にする実装
モーダルウィンドウやドロップダウンメニューなどでは、クリック以外の場所を押したときに非表示にする処理が必要になる場面があります。
これは「クリック外判定」と呼ばれるテクニックで、JavaScriptを使って実装します。
処理の流れはこのようになります。
- 要素の外側をクリックしたときのイベントを取得
- イベントの対象が要素内かどうかを判定
- 外側ならdisplay:noneなどで非表示にする
コードの一例はこちらです。
document.addEventListener("click", function(event) {
var menu = document.getElementById("menu");
if (!menu.contains(event.target)) {
menu.style.display = "none";
}
});
このようにしておくと、ユーザーがどこをクリックしても自然にメニューを閉じられるため、快適な操作性を実現できます。
ARIA属性によるアクセシビリティ向上の工夫
Webの表示切り替えではアクセシビリティに配慮することもとても重要です。
表示・非表示の切り替えが視覚的に伝わっても、スクリーンリーダーには正しく伝わらないことがあります。
これを解決するのが「ARIA属性」です。
ここでは代表的なARIA属性を紹介します。
aria-expanded:開いているか閉じているかを示すaria-hidden:非表示であることを示すaria-controls:操作対象のIDを示す
たとえば以下のように記述します。
<button aria-expanded="false" aria-controls="content">詳細を見る</button>
<div id="content" aria-hidden="true">詳細情報</div>
視覚に頼らずに状態を伝えられるようにすることが、全ての人に優しい設計につながります。
表示切り替えにも、こうした配慮を忘れずに取り入れましょう。
HTML非表示がSEOに与える影響とは?

Googleはdisplay:noneの要素をどう評価するか
HTML要素に「display:none」を使って非表示にした場合、そのコンテンツはユーザーの画面には見えませんが、検索エンジンの評価には影響があるとされています。
特にGoogleでは、このような非表示の内容をどのように扱うかが気になるポイントです。
まず理解しておくべきポイントは次の通りです。
- GoogleはJavaScriptやCSSを解析して非表示要素も認識する
- ただしdisplay:noneのコンテンツは“重要度が低い”と判断される可能性がある
- 明らかにユーザーを騙すような非表示はペナルティ対象になる
以下のように非表示の内容がある場合でも、クロール自体はされます。
<div style="display:none;">検索されたいけど非表示のテキスト</div>
しかしこのような要素は、「価値のあるコンテンツ」として正当に評価されない可能性があるため、SEOでの効果を期待するのはおすすめできません。
検索に強くしたい情報は、常にユーザーに見える状態にしておくことが基本です。
クローキングとみなされるリスクと対策
「クローキング」とは、検索エンジンとユーザーに異なるコンテンツを見せる行為のことで、Googleでは明確にガイドライン違反とされています。
非表示要素の使い方によっては、意図せずにこのクローキングとみなされる可能性があります。
クローキングとみなされやすいケースは次の通りです。
- 検索エンジン向けにキーワードを詰め込んだ非表示テキスト
- ユーザーには見せずにランキングだけ狙うコンテンツ
- CSSやJavaScriptで人間にだけ非表示にするスクリプト
このような使い方をすると、Googleからの信頼を失い、検索順位が大きく下がったりインデックスから除外されたりする危険性があります。
逆に、以下のようなケースでは問題ありません。
- タブ表示などで最初に非表示にしておくが、ユーザーが操作すれば見える内容
- 画像の読み込み時に一時的に隠す目的の非表示
- JavaScriptでの動的表示に関わる一部非表示処理
「検索エンジンだけに見せたい」ではなく、「ユーザーの体験を良くするために非表示にしている」ことが明確であれば、SEOに悪影響は出ません。
インデックスさせたい要素を非表示にする際の注意点
時には、インデックスさせたい重要な情報を、デザイン上や機能上の理由で非表示にしなければならない場面もあります。
このようなときは、検索エンジンにしっかり伝える工夫が必要です。
注意点として押さえておきたいのは以下の点です。
- display:noneを使うとユーザーに見えず、Googleの評価も下がる
- クローラビリティ(クロールのしやすさ)に注意する
- 検索で出したいテキストは可能な限り表示状態にする
どうしても非表示にする場合は、以下のようにHTML構造を工夫しましょう。
<section aria-hidden="false">重要な説明テキスト</section>
また、構造化データやmeta情報などで内容を補足すると、非表示でも一定の評価を受ける可能性があります。
ただし、それでも「表示されたコンテンツが一番評価されやすい」ことを忘れてはいけません。
JavaScript非表示要素のインデックス可否
JavaScriptによって非表示にされた要素については、Googleはかなりの範囲でJavaScriptを実行して中身を読み取れるようになっています。
しかし、全てが確実にインデックスされるとは限らないため注意が必要です。
特に次のようなケースでは、インデックスが難しくなる可能性があります。
- JavaScriptが正しく読み込まれない
- 初期状態で非表示かつ、ユーザー操作が必要なコンテンツ
- 表示処理が遅延しすぎてレンダリングに失敗する
たとえば以下のようなコードでは、JavaScriptによって要素が後から表示されます。
<div id="info" style="display:none;">後から表示される内容</div>
window.onload = function() {
document.getElementById("info").style.display = "block";
}
このような実装の場合、GooglebotがJavaScriptを正しく解釈できないと、内容がインデックスされない恐れがあります。
そのため、重要な情報はなるべくHTMLで初期表示するようにすると安心です。
検索順位への影響とベストプラクティス
非表示コンテンツが多すぎると、ページの品質評価が下がる原因になることがあります。
SEOにおいては、ユーザーに見える部分が多く、かつ有益であることが重要です。
検索順位を守るために、以下のベストプラクティスを意識しましょう。
- 検索に強くしたい情報は必ず表示状態にする
- 非表示にするのはナビゲーションや補足情報などに留める
- 重要なテキストはファーストビューに含める
- 構造化データやmetaタグで内容を補完する
ユーザーにとって有益なコンテンツが見えない状態だと、Googleは「価値が低いページ」と判断してしまう可能性があります。
ページを作るときは、SEOの基本である「見えるコンテンツの充実」を最優先に考えることが大切です。
ユーザー体験とSEOのバランスを取る方法
Web制作では、デザイン性や使いやすさとSEOのバランスをとることが求められます。
見た目を整えるために非表示にしたり、タブで分けたりすることはよくありますが、それがSEOに悪影響を与えてはいけません。
このバランスをとるための工夫をいくつか紹介します。
- タブコンテンツは初期状態で1つは表示しておく
- 重要な情報は画面に出しておき、補足だけを非表示にする
- 非表示部分にもaria属性などで意味を持たせる
- アクセシビリティに配慮して誰でも操作できるようにする
たとえば、製品の詳細情報を非表示にしたい場合は、概要だけを見せた上で「もっと見る」ボタンを設けて展開するのが効果的です。
このように、「ユーザーにとって見やすい設計」と「Googleが理解しやすい構造」の両方を意識することで、SEOと体験の両立が可能になります。
構造化データと非表示コンテンツの関連性
構造化データを使うと、検索エンジンにページの意味や構成をより正確に伝えることができます。
これにより、非表示にしているコンテンツの一部も、検索エンジンに評価される可能性が高くなります。
以下のような構造化データを活用できます。
- FAQ構造化データでよくある質問と回答を示す
- Product構造化データで商品情報を詳細に記述する
- HowTo構造化データで手順を伝える
たとえば、以下のようにFAQを非表示にしていても構造化データで補えます。
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "非表示でもSEOに影響ある?",
"acceptedAnswer": {
"@type": "Answer",
"text": "場合によっては影響があります。
“}
}]
}
</script>
構造化データを活用すれば、非表示の情報でも検索エンジンがその価値を理解しやすくなり、リッチリザルトとして表示される可能性も高まります。
見せ方だけでなく「伝え方」にも意識を向けましょう。
よくあるトラブルとその解決方法

非表示にしたつもりが表示される原因と対策
HTML要素を「非表示にしたはずなのに、なぜか表示されてしまう」という現象はよくあるトラブルの一つです。
特に、CSSやJavaScriptの記述ミスが原因になることが多いです。
原因を正しく見つけて対応することが大切です。
よくある原因を次のようにまとめました。
- CSSでdisplay:noneを指定していない
- 別のスタイルで上書きされている
- JavaScriptで再度display:blockにされている
- セレクターが正しく指定されていない
- HTML構造が崩れてスタイルが効かなくなっている
たとえば、以下のようなコードで非表示にしたつもりでも、別の場所でdisplay:blockと書かれていれば表示されてしまいます。
<div id="box" style="display:none;">隠す内容</div>
<style>
#box { display: block; }
</style>
このような場合は、CSSの優先順位(Specificity)や読み込み順を見直すことで解決できます。
スタイルの競合や上書きには特に注意が必要です。
スマホ表示で非表示設定が反映されない場合
スマートフォンで見たときに、非表示にしたはずの要素がなぜか見えてしまうというトラブルもよく発生します。
これは、レスポンシブデザイン用のCSSメディアクエリが原因になっていることが多いです。
確認すべきポイントを以下にまとめました。
- メディアクエリで異なるdisplay指定がされていないか
- スマホ専用のCSSファイルが読み込まれていないか
- 画面幅に応じてclassの切り替えが起きていないか
例えば、以下のようなコードではPCでは非表示でもスマホでは表示されてしまいます。
@media (max-width: 768px) {
#menu { display: block; }
}
#menu { display: none; }
このように、メディアクエリの条件によってスタイルが変わってしまうことをしっかり理解しないと、意図しない表示になる恐れがあります。
スマホ表示では必ず実機またはシミュレーターで確認するようにしましょう。
非表示にしても要素がクリックされる理由
見えないはずの要素が、なぜかクリックやタップに反応してしまうという問題もあります。
これは、要素が完全に非表示になっておらず、透明になっているだけのケースで起こることが多いです。
このトラブルが起きる原因は次の通りです。
- opacity:0で透明にしただけでdisplayは残っている
- visibility:hiddenもスペースが残っていてクリック可能
- position:absoluteで重なっているが見えないだけ
たとえば以下のようなスタイルを使うと、ユーザーには見えなくてもクリック可能な状態になります。
.invisible {
opacity: 0;
position: absolute;
z-index: 100;
}
このような場合は、クリックできないようにpointer-events: none;を追加することで防ぐことができます。
見えないからといって必ずしも「存在しない」わけではないことに注意しましょう。
CSSやJSの競合による表示バグの対処法
HTMLやCSS、JavaScriptを複数のファイルやライブラリで管理していると、それぞれのスタイルや関数が競合して意図しない動作が発生することがあります。
これによって非表示の制御が効かなくなることもあります。
よくある競合パターンを以下にまとめました。
- 複数のCSSで同じセレクターに異なるスタイルが指定されている
- jQueryとVanilla JSが混在して処理が二重に行われている
- 同じIDの要素を複数使っていて対象が誤っている
- ライブラリの初期化タイミングが競合している
たとえば、jQueryとJavaScriptが同時に同じIDに処理を書いていると、うまく表示・非表示の制御ができなくなることがあります。
document.getElementById("box").style.display = "none";
$("#box").fadeIn();
このような場合は、どのスクリプトが最後に実行されるかを確認し、順序や対象の統一をすることが重要です。
1つずつ検証しながら、どこで競合が起きているのかを特定していきましょう。
非表示が解除されないときのデバッグ手順
JavaScriptで表示・非表示を切り替える処理をしているのに、非表示のまま解除されない場合は、デバッグの手順を踏んで1つずつ確認することが大切です。
デバッグの基本ステップを以下に整理しました。
- JavaScriptエラーが出ていないかコンソールで確認する
- セレクターで正しい要素を取得できているか調べる
- イベントが正しく発火しているか確認する
- displayプロパティが正しく切り替わっているか確認する
- 他のCSSやスクリプトで上書きされていないか調べる
たとえば、以下のコードでイベントが動作していない場合はセレクターの指定が間違っているかもしれません。
document.getElementById("btn").addEventListener("click", function() {
document.getElementById("target").style.display = "block";
});
うまく動かないときは、まずエラーを見て、少しずつ要素と処理を分解して確認するのがデバッグの基本です。
焦らず順番に見ていけば、必ず原因は見つかります。
レスポンシブ対応で非表示にする際の注意点
レスポンシブ対応をするとき、画面サイズに応じて要素を表示・非表示に切り替えることはよくあります。
しかしその際には、画面サイズごとのスタイルの重なりや優先順位に注意が必要です。
ポイントをしっかり押さえておきましょう。
- display:noneの指定がメディアクエリ内か確認する
- 重要なコンテンツはどの画面幅でも表示されるようにする
- 非表示にする要素が他のレイアウトに影響しないようにする
以下はスマホだけで非表示にする例です。
@media (max-width: 600px) {
.pc-only { display: none; }
}
見せる・見せないだけでなく、画面ごとにどう見せたいかを設計することで、よりわかりやすいサイトを作ることができます。
非表示の指定にも、しっかり意図を持たせましょう。
フレームワーク別の非表示設定の違い
最近では、HTMLやCSSをそのまま書くのではなく、BootstrapやTailwind CSSなどのフレームワークを使って非表示をコントロールするケースが増えています。
それぞれのフレームワークによってクラス名や使い方が異なるため、正しく理解しておくことが必要です。
代表的な非表示クラスを以下にまとめます。
- Bootstrap:
d-none(display:none) - Tailwind CSS:
hidden(display:none) - Foundation:
hideクラスなど
たとえば、Tailwind CSSで非表示にするには次のように書きます。
<div class="hidden">この内容は非表示</div>
フレームワークを使うと簡単に非表示が指定できますが、カスタマイズや上書きの影響を受けやすくなるため、クラス名の優先順位や競合にも注意が必要です。
各フレームワークの公式ドキュメントを参考に、最適な非表示の方法を選びましょう。
まとめ

HTMLを非表示にする方法や、表示の切り替え方についてたくさん紹介してきました。
ここで、大事なポイントをもう一度わかりやすくまとめておきます。
- display:noneは要素を完全に消す方法
- visibility:hiddenは見えないけど場所は残る
- JavaScriptやjQueryで動きのある切り替えができる
- 非表示が多すぎるとSEOに悪影響
- ユーザーにとって見やすい作りが大切
表示や非表示をうまく使いながら、見やすくて楽しいページを作っていきましょう。
今日学んだことを、自分のサイトにもどんどん使ってみてください。



