多言語サイトのアクセスを見ていると、ある日こんな違和感が出ることがある。
「日本語のアクセス、減ってない?」 「その代わり英語や中国語や他言語が増えてない?」 「……というか、日本語の数字に自分が混ざってない?」
ここで面白いのは、3つとも同時に成立しうることだ。
外国語の流入は本当に伸びている。 日本語の外部流入は少し弱くなっている。 その一方で、運営者本人が新記事を確認し、リンクを踏み、トップへ戻り、また記事を開くため、日本語側だけ「謎の熱心な読者」が常駐している。
その読者、だいたい自分である。
この記事では、自分の閲覧をアクセス解析から除外する方法、localStorageとCookieの違い、「ページを開いただけで登録されたのか?」問題、過去データがどうなるか、多言語サイトの伸びをどう読むべきかまでまとめる。
1. 最初に見るべきは「総PV」ではなく、外部着地と内部回遊の分離
日本語ページを運営者本人がよく確認するサイトでは、総PVだけ見ると日本語が必要以上に強く見える。
特に混ざりやすいのは次の行動だ。
- 公開確認で記事を直接開く
- トップから記事へ移動する
- 関連記事リンクを踏む
- スマホとPCの両方で見る
- 修正後に何度もリロードする
- 「本番どうなった?」と1時間後にまた見る
普通の読者なら一回読んで帰るところを、運営者はQA担当・編集者・読者・監視員を一人で兼任している。
だから多言語サイトでは、少なくとも「外部から最初に来た閲覧」と「サイト内を回遊した閲覧」を分けて見るとよい。
外国語ページの外部着地が伸び、日本語だけ内部回遊が多いなら、「日本語人気が圧倒的」というより「運営者が日本語UIでよく巡回している」が混ざっている可能性がある。
2. 「開いた。登録された?」――何も実装していなければ、されていない
ここは重要だ。
「このブラウザを管理者として除外したい」と決めたあと、サイトを一度開いた。
では、その時点でブラウザは管理者として登録されたのか。
答えは、コードが何も書き込んでいなければNOである。
ブラウザは空気を読んで、
「この人、たぶん運営者ですね。以後PVから消しておきます」
とはならない。
管理者ブラウザとして扱うには、実際に次のような処理が必要だ。
- localStorageへ owner フラグを書き込む
- Cookieへ owner フラグを書き込む
- ログイン済み管理画面から除外フラグを付ける
- サーバー側で特定の内部トラフィックとして判定する
つまり「開く」は訪問であって、「登録」は書き込み処理である。
ここを混同すると、管理者除外を設定したつもりで、その後も自分が元気にPVを育て続ける。
3. localStorageとCookie、どっちを使えばいい?
ブラウザ単位で自分を識別する代表的な方法はlocalStorageとCookieだ。
localStorage
localStorageは、そのサイトのoriginごとにブラウザ内へ値を保存できる。
例えば開発者ツールのコンソールで次のように設定できる。
localStorage.setItem("analytics_owner", "1");
クライアント側の計測コードなら、
if (localStorage.getItem("analytics_owner") === "1") {
return;
}
のように、イベント送信そのものを止められる。
長所は簡単なこと。 短所は、サーバーやEdge Workerが最初のHTTPリクエストを受け取った時点ではlocalStorageの値が見えないことだ。
Cookie
Cookieは条件が一致するHTTPリクエストに付いてサーバーへ送られる。
例えばブラウザから設定するなら、概念的にはこうなる。
document.cookie =
"analytics_owner=1; Path=/; Max-Age=31536000; SameSite=Lax; Secure";
サーバーやEdge Worker側でCookieを確認し、ownerならPVカウンターへ入れない。
サーバー側でアクセスを数えているなら、こちらの方が相性がよい。
もっときれいにするなら、ログイン済み管理画面や非公開の設定ルートからSet-Cookieを返し、JavaScriptから触る必要がなければHttpOnlyも検討できる。
ただし、このフラグは「アクセス解析から除外する目印」にすぎない。
管理者権限そのものに使ってはいけない。 自分で書けるCookieやlocalStorageを認証に使ったら、家の表札に「社長」と書けば社長室へ入れる会社になる。
4. Edge・サーバー計測ならCookie、ブラウザイベントだけならlocalStorage
選び方はかなり単純だ。
クライアント側だけでイベントを送っている
localStorageで十分。
ページ表示後にJavaScriptが発火し、そこでanalyticsイベントを送る方式なら、送信前にowner判定すればいい。
CDN、Edge Worker、サーバー、アクセスログ側でPVを数えている
Cookieが向いている。
なぜなら、サーバーが数えるタイミングはブラウザJavaScriptが動く前だからだ。
localStorageはブラウザの中にしかない。 Workerからは「その人のlocalStorageに1が入っているか」は見えない。
一方Cookieなら、対象リクエストに付いてくるので、集計処理より前に除外できる。
「自分のアクセスを除外したい」という同じ目的でも、計測場所が違えば最適な道具も違う。
5. 一人運営なら「秘密の一回設定」で十分
大規模企業なら社内IPや認証アカウントで内部トラフィックを分類する。
一人運営の小さなサイトなら、もっと雑でよい。
例えば、
- 自分だけが知っている設定画面を開く
- owner Cookieを1年間セットする
- 以後、そのCookieがあるリクエストは集計しない
- 解除ボタンでCookieを消せるようにする
これでかなり楽になる。
ただしブラウザ単位なので、
- PCのChrome
- スマホのSafari
- 別ブラウザ
- 別プロファイル
- シークレットモード
はそれぞれ別物だ。
一台で設定したから全宇宙の自分が消えるわけではない。
スマホで確認したら、そのスマホの自分は普通に一票を投じる。
6. 過去のカウントは勝手に減らない
owner除外を今日入れても、昨日までのPVが自動で引かれるわけではない。
これはかなり大事だ。
実装後にできることは、基本的に「これから混ぜない」ことだ。
過去分を直すなら、
- 生ログからownerを再判定する
- 対象イベントを再集計する
- 既存集計を補正する
といった別作業になる。
アクセスがまだ小さい初期サイトで、過去の数十PVを完璧に洗い直すために半日使うのは、たいてい割に合わない。
「昔は自分が少し混ざっている。ここから先は除外済み」
と境界線を引くだけでも十分だ。
データ分析は歴史修正競技ではない。
7. GA4の内部トラフィック除外と、ブラウザCookie方式は別物
Google Analytics 4には、IPアドレスを使って内部トラフィックを定義し、データフィルタで除外する公式機能がある。
会社の固定回線やオフィスなら使いやすい。
一方、一人運営で、
- 自宅
- モバイル回線
- 旅行先
- テザリング
- VPN
のように接続元が変わるなら、IPだけで追うのは面倒になる。
そこで独自のファーストパーティ分析なら、ブラウザCookieやログイン状態でownerを示す方が扱いやすいことがある。
ただしGA4の公式フィルタと独自Cookie除外は同じ機能ではない。
GA4を使っているならGA4のテストフィルタを先に確認する。 独自分析なら独自分析の収集点で除外する。
「アクセス解析」という言葉だけで全部同じ箱に入れない方がいい。
8. 多言語サイトの伸びは「自分除外後の外部着地」で見る
自分の閲覧が混ざっていると、多言語サイトの成長判断も歪む。
例えば総PVだけ見て、
「日本語70、外国語30。まだ日本語が圧倒的だな」
と思っていたとする。
しかし日本語70のうち、
- 自分の確認閲覧が20
- サイト内回遊が20
- 外部着地が30
で、外国語30がほぼ全部外部着地なら、話はかなり変わる。
新規需要を見るなら比較したいのは、
「日本語の外部着地」対「外国語の外部着地」
である。
さらに日別データが取れるなら、ローリング7日合計だけではなく日ごとの増減も見る。
ローリング指標は古い日が窓から落ちるだけでも数字が減るため、「今日読者が減った」とは限らない。
9. 最低限のテスト手順
owner除外を入れたら、感覚で「たぶん効いた」にしない。
最低限これだけ確認する。
- ownerフラグが本当にブラウザへ保存されたか
- 通常ページを1回開く
- 計測イベントが送信されない、またはownerとして捨てられることを確認する
- 別ブラウザでは通常どおり計測されることを確認する
- ownerフラグを削除すると再び計測されることを確認する
localStorageなら開発者ツールのApplication/Storageで確認できる。 Cookieも同様にブラウザのストレージ画面やHTTPリクエストで確認できる。
「設定ページを開いたから登録されたはず」はテストではない。
コンピューターは察してくれない。 察するのは人間だけで十分である。
10. まとめ――世界進出の前に、自分を母集団から退場させる
多言語サイトで外国語アクセスが増え始めると、かなり楽しい。
しかし日本語側には、運営者本人という最強の固定客が住み着きやすい。
だから、
- 外部着地と内部回遊を分ける
- ownerブラウザを明示的に登録する
- ブラウザイベントだけならlocalStorage
- サーバー・Edge計測ならCookie
- 開いただけでは登録されない
- 過去データは原則そのまま
- 新規需要はowner除外後の外部着地で見る
という形にすると、数字の意味がかなりきれいになる。
「海外から読まれ始めた!」
その横で自分が日本語PVを100回押していたら、国際化の比較相手として強すぎる。
まず自分をランキングから外そう。
参考資料(3件)
- MDN: Window.localStorage
https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage - MDN: Set-Cookie header
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Set-Cookie - Google Analytics Help: Exclude internal traffic
https://support.google.com/analytics/answer/10104470
