【JavaScript】初回訪問時のみ要素を表示する方法

「初めて訪問したユーザーにだけウェルカムメッセージを出したい」——そんなときはlocalStorage「訪問済み」フラグを保存して判定します。

仕組みはシンプルで、フラグが無ければ表示してフラグを立てるだけです。リセット方法や「一定期間後にまた表示する」応用、ストレージの使い分けまで解説します。

この記事の結論:localStorage.getItem("visited") が無ければ初回訪問。要素を表示して localStorage.setItem("visited", "true") でフラグを立てます。リセットは removeItem、「N日後にまた表示」はタイムスタンプを保存して比較します。セッション中だけなら sessionStorage を使います。
スポンサーリンク

完成イメージ(動くデモ)

↓ このページを初めて開いたときだけメッセージが出ます。「リセット」を押すと初回表示を再現できます(ページを再読み込みすると2回目以降の挙動も確認できます):

判定中…

localStorage[“fvDemoVisited”] = -

localStorageで初回訪問を判定する(基本)

表示したい要素はCSSで display: none にしておき、初回訪問のときだけ JavaScript で表示します。getItem は値が無いと null を返すので、それで初回かどうか分かります。

HTML+CSS
<div id="welcome" style="display:none;">ようこそ!初めての訪問ですね。</div>
JavaScript:初回だけ表示
document.addEventListener("DOMContentLoaded", () => {
  const visited = localStorage.getItem("visited");

  if (!visited) {
    // 初回訪問:要素を表示
    document.getElementById("welcome").style.display = "block";
    // 訪問済みとして記録(次回からは表示されない)
    localStorage.setItem("visited", "true");
  }
});

localStorage はブラウザを閉じても残るため、2回目以降の訪問では表示されませんlocalStorage の基本操作はlocalStorageの使い方完全ガイドを参照してください。

プライベートモードでの注意:シークレットモードやストレージがブロックされた環境では、localStorage へのアクセスが例外を投げることがあります(古いSafariなど)。重要な判定は try...catch で囲み、失敗してもページが壊れないようにしておくと安全です。
JavaScript:try…catchで安全に判定
function isFirstVisit() {
  try {
    if (localStorage.getItem("visited")) return false;
    localStorage.setItem("visited", "true");
    return true;
  } catch (e) {
    return false; // ストレージが使えない環境では出さない
  }
}

if (isFirstVisit()) {
  document.getElementById("welcome").style.display = "block";
}

もう一度表示する・リセットする(removeItem)

動作確認のたびに初回表示を見たいときや、ユーザーの「もう一度表示」操作には、フラグを removeItem で削除します。

JavaScript:フラグをリセット
// 訪問済みフラグを削除(次回また初回扱いになる)
localStorage.removeItem("visited");

// すべて消すなら localStorage.clear();(他のデータも消えるので注意)

開発中は、ブラウザの開発者ツール(Application → Local Storage)から削除しても確認できます。

「N日後にまた表示」する(期限付き)

キャンペーン告知のように、一定期間が過ぎたら再表示したい場合は、「true」ではなく表示した日時(タイムスタンプ)を保存し、経過時間で判定します。

JavaScript:7日経ったらまた表示
const KEY = "welcomeShownAt";
const DAY = 24 * 60 * 60 * 1000;
const shownAt = localStorage.getItem(KEY);

// 未表示、または前回表示から7日以上経過していたら表示
if (!shownAt || Date.now() - Number(shownAt) > 7 * DAY) {
  document.getElementById("welcome").style.display = "block";
  localStorage.setItem(KEY, String(Date.now())); // 今の時刻を記録
}

localStorage 自体には有効期限がないため、このようにタイムスタンプを保存して自分で判定します。

応用:「最初の3回まで表示」のように回数で制御したい場合は、true の代わりに回数(数値)を保存します。const n = Number(localStorage.getItem("count") || 0); で読み出し、n < 3 なら表示して localStorage.setItem("count", String(n + 1)) とインクリメントします。

localStorage / sessionStorage / Cookie の使い分け

「初回かどうか」の保存先はいくつかあり、保持期間や用途で選びます

保存先 保持期間 サーバー送信 用途
localStorage 明示的に消すまで永続 されない 初回訪問フラグ(永続)
sessionStorage タブを閉じるまで されない そのセッション中だけ
Cookie 有効期限を指定 毎回送信される サーバー側でも判定したいとき

「同じタブを開いている間だけ」なら sessionStorage、保持期間の詳しい違いはlocalStorageとsessionStorageの違いと使い分け、Cookieの有無で表示を切り替える方法はCookieの有無で要素を表示・非表示する方法を参考にしてください。

よくある質問(FAQ)

QJavaScriptで初回訪問のときだけ要素を表示するには?
AlocalStorage.getItem("visited")null なら初回です。要素を表示してから localStorage.setItem("visited", "true") でフラグを立てると、2回目以降は表示されなくなります。
Qテストで何度も初回表示を確認するには?
AlocalStorage.removeItem("visited") でフラグを削除すれば、また初回扱いになります。ブラウザの開発者ツール(Application → Local Storage)から手動で削除してもOKです。
Q一定期間が過ぎたらまた表示するには?
Aフラグに「true」ではなく表示した日時(Date.now()を保存し、Date.now() - 保存値 > 期間 で判定します。localStorage には有効期限が無いため、自分でタイムスタンプを管理します。
QlocalStorageとCookieはどちらを使うべき?
A表示制御の判定だけならサーバーに送られない localStorage が手軽です。サーバー側でも初回かどうかを判定したい場合は、サーバーへ自動送信される Cookie を使います。

まとめ

初回訪問時のみ要素を表示するには、localStorage に訪問済みフラグを保存し、無ければ表示してフラグを立てる、という流れが基本です。リセットは removeItem で行います。

「一定期間後にまた表示」したいなら、タイムスタンプを保存して経過時間で判定します。セッション中だけなら sessionStorage、サーバー側でも判定するなら Cookie、と用途に合わせて使い分けましょう。