自分と社内のアクセスを除外する:IPアドレスの除外と内部トラフィック

公開 更新 書いた人 大林 諒

Googleアナリティクス4(GA4)を入れたばかりのサイトは、いちばんよく見ている人が社内の人です。受付が予約の確認でレッスン紹介を開き、代表が自宅で料金ページを直し、講師がブログの公開後に表示を確かめる。月に数百人しか来ない小さなサイトでは、この社内の閲覧だけで数字の何割かになります。この記事では、GA4の「内部トラフィックの定義」とデータフィルタで社内のアクセスを除く手順と、IPアドレスで除けない人をGoogleタグマネージャー(GTM)で除く方法を書きます。読み終わると、教室のWi-Fiと代表の自宅からのアクセスが数字に入らず、スタッフのスマホも必要なら除ける状態になります。GA4のプロパティとGTMのコンテナがすでにサイトに入っていることを前提にします。

この記事の内容
  1. 先に決めること
  2. 除外の手段の一覧
  3. 手順
  4. 応用
  5. できないことと、その代わり
  6. よく詰まるところ
  7. 次にやること

先に決めること

データフィルタは有効にした時点から効き、除いたデータはあとから戻せません。設定の前に次の5つを決めておくと、やり直しが起きません。

1つ目は、誰のアクセスを除くかです。サンプル料理教室なら、教室のWi-Fiにつないだパソコンとスマホ、代表の自宅、講師3名と受付2名の個人のスマホ、サイトを作った制作会社の4つに分かれます。制作会社は修正のたびに何十回もページを開くので、意外と数が多くなります。

2つ目は、どの手段で除くかです。GA4の画面だけでできるのはIPアドレスでの除外です。IPアドレスが変わらない場所(教室・固定回線の自宅)はこれで足ります。IPアドレスが毎回変わる人(スマホの回線・在宅のスタッフ・外出先)はIPで除けないので、GTMでブラウザに印を付ける方法を使います。

3つ目は、traffic_type の値です。GA4は社内と判定したアクセスに traffic_type というパラメータを付け、データフィルタはその値で除外します。初期値は internal です。IPで判定した分もGTMで付けた分も同じ internal に揃えると、フィルタ1つで済みます。データフィルタは1つのプロパティに10個までなので、場所ごとに値を分けるのはやめたほうが楽です。

4つ目は、いつ有効にするかです。テストの状態で数日動かし、除く対象が正しいと確かめてから有効にします。月の途中で切り替えると、その月だけ前半と後半で数え方が違う月になります。月初に有効にすると、毎月の数字を比べるときに説明が要りません。

5つ目は、切り替えた日をどこに残すかです。半年後に「この月から問い合わせ率が上がった」と見えたとき、それが社内アクセスを除いたせいだと分からなくなります。データポータル(Looker Studio)の月次レポートの注記欄や、社内の共有メモに「2026年11月1日から内部トラフィック除外を有効化」と1行書いておきます。

除外の手段の一覧

社内のアクセスを除く手段は1つではありません。サンプル料理教室で使うものと使わないものを並べます。

手段何で判定するか向く人設定する場所
内部トラフィックの定義+データフィルタIPアドレス教室・固定回線の自宅・会社の事務所GA4の管理画面
GTMで traffic_type を付けるブラウザのCookieとURLのクエリスマホ回線・在宅・外出先GTM
デベロッパートラフィックのフィルタdebug_mode か debug_event が入っているかGTMのプレビューやTag Assistantで確かめる人GA4の管理画面
ウェブホスト名のトラフィックのフィルタデータを送ってきたドメイン制作会社のテスト環境GA4の管理画面
オプトアウト アドオンブラウザの拡張機能自分のパソコンだけ除きたい人Chromeの拡張機能
レポートフィルタレポートの絞り込みデータを消さずに一部の画面だけで隠したいとき各レポート

サンプル料理教室で最終的に入れる設定は次のとおりです。IPアドレスは説明用の番号です。

対象判定設定値
教室のWi-Fi(IPv4)IPアドレスが等しい203.0.113.45
教室のWi-Fi(IPv6)IPアドレスが範囲内2001:db8:1234:5600::/56
代表の自宅(IPv4)IPアドレスが等しい198.51.100.23
講師・受付のスマホGTMのCookiesc_internal=1
traffic_type の値すべて共通internal
データフィルタ内部トラフィック・除外名前 社内アクセス除外
データフィルタデベロッパートラフィック・除外名前 デバッグ除外

手順

IPアドレスを調べる

ここで調べるのは、インターネット側から見えるIPアドレス(グローバルIPアドレス)です。パソコンの設定画面に出る 192.168. で始まる番号は教室の中だけの番号なので、GA4に入れても一致しません。

  1. 教室のWi-Fiにつないだパソコンで、GA4の「管理」を開く
  2. 「データの収集と修正」→「データ ストリーム」を開き、サイトのウェブストリームを選ぶ
  3. 「タグ設定を行う」→「すべて表示」→「内部トラフィックの定義」→「作成」と進む
  4. 画面の「IP アドレスを確認」を押し、表示された番号を控える
  5. 同じことを教室のWi-Fiにつないだスマホでもやり、番号が同じか比べる
  6. 代表の自宅でも同じ手順で番号を控える
内部トラフィックの定義の作成画面と「IP アドレスを確認」の位置
内部トラフィックの定義の作成画面と「IP アドレスを確認」の位置

パソコンでは 203.0.113.45 のようなIPv4、スマホでは 2001:db8:1234:5600:... のような長いIPv6が出ることがあります。これは故障ではなく、同じ回線がIPv4とIPv6の両方でインターネットにつながっているためです。ブラウザがどちらを使うかは端末と状況で変わるので、両方を登録します。

IPv6・スマホ回線・在宅勤務の扱い

IPアドレスは、場所によって変わりやすさがまったく違います。登録する前に、それぞれ数日あけて2〜3回調べ、同じ番号が出るか確かめます。

場所IPの変わり方扱い
教室の固定回線(IPv4)変わらないことが多い「等しい」で登録
教室の固定回線(IPv6)後ろ半分が端末や時間で変わる。前半分は同じことが多い共通の前半分を「範囲内」で登録
代表の自宅の光回線ルーターの再起動などで変わることがある登録して、月1回変わっていないか確かめる
スマホのモバイル回線接続のたびに変わる。他の利用者と同じ番号を使うこともある登録しない。GTMの方法を使う
在宅のスタッフ家庭の回線ごとにばらばら人数が少なければGTMの方法を使う
会社のVPN経由VPNの出口のIPにまとまる出口のIPを登録

IPv6は、番号の後ろ半分が端末ごとに作られ、時間がたつと作り直されるのが普通です。1回調べた番号をそのまま「等しい」で入れると、翌日にはもう一致しません。2〜3回調べた番号を並べ、前から何ブロックまで同じかを見ます。2001:db8:1234:5600: までの4ブロックが同じなら /64、2001:db8:1234:56 までなら /56 を付けて「範囲内」で登録します。範囲を広げすぎると同じプロバイダの他の家庭まで社内扱いになるので、共通の部分より広くはしません。

スマホのモバイル回線は、IPでは除けないと考えたほうが正確です。回線の会社が多くの利用者に同じIPを順番に割り当てるので、たまたま一致した番号を登録すると、体験レッスンを申し込もうとしている一般の人まで除いてしまいます。講師のスマホは、教室のWi-Fiにつないでいるあいだは教室のIPで除かれ、外では除かれません。外でも除きたい人は、後ろの「IPで除けない人をGTMで除く」の方法を使います。

内部トラフィックを定義する

  1. 「管理」→「データの収集と修正」→「データ ストリーム」→ウェブストリームを選ぶ
  2. 「タグ設定を行う」→「すべて表示」→「内部トラフィックの定義」→「作成」を押す
  3. ルール名に 教室と代表自宅 と入れる
  4. traffic_type の値は internal のままにする
  5. 「IP アドレス」の「マッチタイプ」で「IP アドレスが等しい」を選び、「値」に 203.0.113.45 を入れる
  6. 「条件を追加」を押し、「IP アドレスが範囲内(CIDR 表記)」で 2001:db8:1234:5600::/56 を入れる
  7. もう1つ条件を追加し、「IP アドレスが等しい」で 198.51.100.23 を入れる
  8. 「作成」を押す
内部トラフィックの定義で条件を3つ入れた状態
内部トラフィックの定義で条件を3つ入れた状態

マッチタイプの初期値は「IP アドレスが範囲内(CIDR 表記)」です。1つの番号だけを登録するときは「IP アドレスが等しい」に選び直します。条件はANDではなくORで判定されます。3つのどれかに一致すれば社内扱いです。マッチタイプには「等しい」「で始まる」「で終わる」「を含む」「範囲内(CIDR 表記)」「正規表現に一致」があります。小さな会社なら「等しい」と「範囲内」の2つで足ります。「で始まる」で 203.0. のように短く書くと、関係のない会社まで一致するので使いません。

この時点では、社内のアクセスに traffic_type=internal という印が付くだけで、数字はまだ1件も減りません。減らすのは次のデータフィルタです。

データフィルタをテストの状態で作る

  1. 「管理」→「データの収集と修正」→「データフィルタ」を開く
  2. 「フィルタを作成」を押し、種類で「内部トラフィック」を選ぶ
  3. 「データフィルタ名」に 社内アクセス除外 と入れる
  4. 「フィルタ オペレーション」で「除外」を選ぶ
  5. パラメータの値が internal になっているか確かめる
  6. フィルタの状態で「テスト」を選ぶ
  7. 「作成」を押す
データフィルタの作成画面で「内部トラフィック」「除外」「テスト」を選んだ状態
データフィルタの作成画面で「内部トラフィック」「除外」「テスト」を選んだ状態

データフィルタ名は同じプロパティの中で重複できず、40文字以内で、使える文字は文字・数字・アンダースコア・スペースです。ハイフンや記号を入れると保存できません。

フィルタの状態は3つあります。

状態何が起きるか使う場面
テスト除外はしない。一致したデータに「テスト データフィルタ名」が付く作ってから数日、正しく一致するか確かめる
有効一致したデータを処理しない。除いたデータは戻らない確かめ終わってから
無効フィルタを使わない一時的に止めたいとき

作成や編集には、プロパティの「編集者」以上の権限が要ります。制作会社に閲覧者の権限しか渡していないなら、この作業はこちらでやります。

テストの状態で確かめる

テストの状態のフィルタは、一致したイベントに「テスト データフィルタ名」という印を付けます。データ探索でこの印を数えると、有効にしたら何件減るかが分かります。反映まで24〜36時間かかることがあるので、作った翌々日に見ます。

  1. 「探索」→「自由形式」で新しいデータ探索を作る
  2. ディメンションに「テスト データフィルタ名」と「イベント名」を追加する
  3. 指標に「イベント数」を追加する
  4. 行に「テスト データフィルタ名」と「イベント名」、値に「イベント数」を置く
  5. フィルタで「テスト データフィルタ名」が 社内アクセス除外 を含む、を指定する
データ探索の行に「テスト データフィルタ名」と「イベント名」を置いた表
データ探索の行に「テスト データフィルタ名」と「イベント名」を置いた表

確かめるのは3点です。教室で開いたページビューが出ているか。代表が自宅で開いた日の数が出ているか。体験申込完了のキーイベント(旧コンバージョン)が社内の件数として出ていないか。最後の点が大事で、受付が電話で受けた申込を代わりにフォームで送っている運用だと、本物の申込が社内扱いで消えます。その場合は受付の代理入力だけ別の端末で送るか、代理入力を除外の対象から外す方法を先に決めます。

有効にする

  1. 「管理」→「データの収集と修正」→「データフィルタ」を開く
  2. 社内アクセス除外 を選ぶ
  3. フィルタの状態を「有効」に変えて保存する
  4. 切り替えた日を、月次レポートの注記と社内メモに書く

有効にしたあとは、一致したデータは処理されず、GA4のレポートにもBigQueryにも残りません。あとで「無効」に戻しても、有効だったあいだに除いたデータは戻りません。逆に、有効にする前のデータにはさかのぼって効きません。先月までの数字には社内のアクセスが入ったままです。

データフィルタの一覧で状態が「有効」になっている行
データフィルタの一覧で状態が「有効」になっている行

データを消さずに、ある画面だけで社内の分を隠したいならレポートフィルタを使います。ただし画面ごとに絞り込みを付けることになり、毎月の数字を代表に見せる用途では付け忘れが出ます。小さな会社なら、テストで確かめてデータフィルタを有効にするほうが手間がかかりません。

デベロッパートラフィックのフィルタを作る

GTMのプレビューで確かめているときのアクセスは、デバッグモードのアクセスとしてGA4に届きます。DebugViewで見るためのものですが、何もしなければ通常のレポートにも入ります。体験申込フォームのテスト送信を10回やれば、キーイベントが10件増えます。デベロッパートラフィックのフィルタは、debug_mode か debug_event の値が入っているイベントをレポートから除きます。DebugViewに残るかどうかはヘルプに書かれていないので、有効にする前にテストの状態とDebugViewで確かめます。

  1. 「管理」→「データの収集と修正」→「データフィルタ」を開く
  2. 「フィルタを作成」を押し、種類で「デベロッパー トラフィック」を選ぶ
  3. 「データフィルタ名」に デバッグ除外 と入れる
  4. 「フィルタ オペレーション」で「除外」を選ぶ
  5. フィルタの状態で「テスト」を選んで作成する
  6. 数日後にデータ探索で確かめ、「有効」に変える
データフィルタの種類で「デベロッパー トラフィック」を選ぶところ
データフィルタの種類で「デベロッパー トラフィック」を選ぶところ

デバッグモードになるのは、Tag AssistantやGTMのプレビューで開いたブラウザと、Googleタグに debug_mode を true で入れたときです。DebugViewは「管理」→「データの表示」→「DebugView」で開きます。

ここで1つ確かめることがあります。サイトのコードやGTMのGoogleタグに debug_mode が入ったままになっていないかです。入っていると、全訪問者がデバッグモードで届き、このフィルタを有効にした瞬間に全部が消えます。debug_mode を false にしても無効にはならず、パラメータそのものを消す必要があります。

// 消し忘れると、全員がデバッグモードになる書き方
gtag('config', 'G-XXXXXXXXXX', { 'debug_mode': true });

// false にしてもデバッグモードは切れない。行ごと消す
gtag('config', 'G-XXXXXXXXXX', { 'debug_mode': false });

応用

IPで除けない人をGTMで除く

講師のスマホや在宅のスタッフは、IPでは除けません。GA4のヘルプにも、traffic_type パラメータはイベントに手動で付けられると書かれています。そこで、スタッフが一度だけ特別なURLを開くとブラウザにCookieが入り、そのCookieがあるブラウザからのアクセスに traffic_type=internal を付ける仕組みをGTMで作ります。

全体の流れはこうです。

  1. スタッフが https://sample-cooking.example/?sc_internal=on を一度開く
  2. GTMのカスタムHTMLタグが、そのブラウザに sc_internal=1 のCookieを書く
  3. 以後、そのブラウザで開いたページでは、GTMの変数が internal を返す
  4. Googleタグが traffic_type にその値を入れてGA4へ送る
  5. GA4のデータフィルタ 社内アクセス除外 が除外する

GTMで作るものは次の5つです。

種類名前中身
変数(URL)Query - sc_internalコンポーネントタイプ「クエリ」、クエリキー sc_internal
変数(ファーストパーティ Cookie)Cookie - sc_internalCookie名 sc_internal
変数(カスタム JavaScript)traffic_type下のコード
タグ(カスタム HTML)内部フラグ - Cookieを書く下のコード、sc_internal がURLにあるページで配信
Googleタグの設定既存のGoogleタグ構成パラメータ traffic_type、値 {{traffic_type}}

カスタムHTMLタグのコードです。?sc_internal=off を開くとCookieを消します。

<script>
(function () {
  var v = new URLSearchParams(location.search).get('sc_internal');
  if (v === 'on') {
    document.cookie = 'sc_internal=1; path=/; max-age=31536000; SameSite=Lax';
  } else if (v === 'off') {
    document.cookie = 'sc_internal=; path=/; max-age=0; SameSite=Lax';
  }
})();
</script>

トリガーは「ページビュー」で、「一部のページビュー」→「Page URL」「を含む」sc_internal= にします。

カスタムJavaScript変数 traffic_type のコードです。Cookieを書くタグより先にGoogleタグが動いても、最初のページから印が付くように、URLのクエリも見ます。

function () {
  var q = {{Query - sc_internal}};
  var c = {{Cookie - sc_internal}};
  if (q === 'off') {
    return undefined;
  }
  if (q === 'on' || c === '1') {
    return 'internal';
  }
  return undefined;
}

最後に、Googleタグを開き、「設定」欄で「パラメータを追加」を押し、「構成パラメータ」に traffic_type、「値」に {{traffic_type}} を入れます。「構成の設定変数」で設定用の変数を選んでいる場合は、その変数の中に同じ行を足します。

GTMのGoogleタグの「設定」欄で構成パラメータに traffic_type を足したところ
GTMのGoogleタグの「設定」欄で構成パラメータに traffic_type を足したところ

公開する前に、GTMのプレビューで2つ確かめます。?sc_internal=on を付けて開いたときに、変数 traffic_type が internal になっているか。付けずに別のブラウザで開いたときに、undefined のままか。後者が internal になっていたら、全員が社内扱いで消えるので公開しません。

この方法は、Cookieがブラウザごとに入る点に注意が要ります。同じスマホでも、SafariとChrome、LINEやInstagramのアプリの中で開くブラウザは、それぞれ別のCookieです。講師がInstagramのプロフィールからサイトを開くと、そのアクセスは社内扱いになりません。よく使うブラウザで1回ずつ ?sc_internal=on を開いてもらいます。また、ブラウザによってはスクリプトで書いたCookieが期限より早く消えます。3か月に1回、スタッフにもう一度開いてもらう運用にしておくと漏れが減ります。

広告のタグも社内では止める

GA4のデータフィルタは、GA4の中の数字にしか効きません。GTMで入れているGoogle広告のコンバージョンタグとMetaのピクセルは、受付がテストで体験申込フォームを送るたびに、それぞれ広告側でコンバージョンを数えます。体験レッスン向けの広告の成果が実際より多く見え、自動入札がその数字で学習します。

同じ traffic_type 変数を使い、広告のタグだけ社内では配信しないようにします。

  1. GTMの「トリガー」→「新規」を押す
  2. トリガーのタイプで「カスタム イベント」を選ぶ
  3. イベント名に .* と入れ、「正規表現一致を使用」にチェックを入れる
  4. 「一部のカスタム イベント」を選び、{{traffic_type}}「等しい」internal にする
  5. 名前を 例外 - 社内アクセス にして保存する
  6. Google広告のコンバージョンタグとMetaのピクセルのタグを開き、「トリガー」の「例外」の欄に 例外 - 社内アクセス を追加する
Google広告のコンバージョンタグの「例外」に社内アクセスのトリガーを追加した状態
Google広告のコンバージョンタグの「例外」に社内アクセスのトリガーを追加した状態

「例外」に入れたトリガーは、配信トリガーと同じ種類のイベントで判定されます。ページビューのトリガーで例外を作ると、フォーム送信のイベントで動くタグは止まりません。イベント名を .* にしたカスタムイベントにしておくと、どのイベントで動くタグにも効きます。GA4のタグにはこの例外を付けません。GA4にはデータが届き、データフィルタで除かれるほうが、テストの状態で件数を確かめられて扱いやすいからです。

なお、この例外はIPで判定した社内のアクセスには効きません。IPでの判定はGA4のサーバー側で行われ、GTMからは見えないためです。教室のWi-Fiで送ったテスト申込を広告側でも数えたくないなら、教室のパソコンでも ?sc_internal=on を開いておきます。

ブラウザの拡張機能で自分だけ除く

代表が自分のパソコンのChromeだけ除きたいなら、Googleが出しているGoogle アナリティクス オプトアウト アドオンがあります。入れたブラウザでは、どのサイトを開いてもGA4へのデータ送信が止まります。設定は拡張機能を入れるだけです。

ただし、止まるのはGA4だけで、広告のタグは止まりません。また、そのブラウザではDebugViewもリアルタイムも自分のアクセスが映らないので、計測を確かめる人には向きません。ブラウザの拡張機能ではなくヘルプでは「アドオン」と呼ばれていますが、代表のように見るだけの人には手軽で、GTMを触る人はCookieの方法のほうが扱いやすくなります。

制作会社のテスト環境を除く

制作会社が staging.sample-cooking.example のようなテスト用のサイトを持っていて、そこに本番と同じGTMのコンテナが入っていると、テスト環境のアクセスも同じGA4に届きます。このときは、データフィルタの種類「ウェブホスト名のトラフィック」で、データの送り元のドメインを基準に除けます。先にデータ探索で「ホスト名」ごとのイベント数を出し、本番以外のドメインがあるか見てから作ります。制作会社には、テスト環境では別のコンテナか、GTMの環境機能を使ってもらうよう頼むのがいちばん確実です。

できないことと、その代わり

できないこと理由代わりの手
有効にする前の過去のデータから社内分を消すフィルタは作成後のデータにしか効かない切り替えた日を記録し、前後の月を比べるときに注記する
有効にして除いたデータを戻す除いたデータは処理されず残らない必ずテストの状態で数日確かめてから有効にする
アプリの利用者を内部トラフィックで除く内部トラフィックのフィルタはウェブのみアプリの計測がある会社だけの話。小さな教室では対象外
スマホのモバイル回線をIPで除く接続ごとに変わり、他人と共有されるGTMのCookieの方法
IPでの判定をGTMの条件に使う判定はGA4側で行われる教室の端末でもCookieを入れておく
広告側のコンバージョンを社内分だけ消すGA4のフィルタは広告のタグに効かないGTMのタグの「例外」にトリガーを入れる
1人の人を全端末で除くCookieはブラウザごとよく使うブラウザで1回ずつ印を付ける

よく詰まるところ

症状原因直し方
設定したのに社内のアクセスが減らない内部トラフィックの定義だけ作り、データフィルタを作っていないデータフィルタを「内部トラフィック」「除外」で作る
データフィルタを作ったのに減らない状態が「テスト」のままデータ探索で確かめたうえで「有効」に変える
テストのデータ探索に何も出ない反映前。24〜36時間かかることがある2日待ってから見る
教室のパソコンは除かれるがスマホが除かれないスマホはIPv6でつながっているIPv6の前半分を「範囲内」で追加する
先週まで除かれていた代表の自宅が戻ってきた自宅のIPアドレスが変わった調べ直して条件を書き換える。頻繁に変わるならCookieの方法に切り替える
フィルタを有効にしたら全部の数字が0に近くなったサイトかGoogleタグに debug_mode が入ったまま、またはIPの範囲が広すぎるすぐ「無効」にし、debug_mode の行を消す、範囲を狭める。消えた分は戻らない
体験申込のキーイベントが減りすぎた受付が代理入力した本物の申込まで社内扱いになった代理入力の端末を除外から外すか、代理入力の分を別に数える
データフィルタ名が保存できないハイフンや記号、40文字超え文字・数字・アンダースコア・スペースだけにする
一般の人まで社内扱いになっているGTMの traffic_type 変数が常に internal を返しているプレビューで、印のないブラウザの値が undefined か確かめる
講師のスマホがInstagramから開くと除かれないアプリ内ブラウザのCookieは別アプリ内ブラウザでも ?sc_internal=on を開く
GA4は減ったが広告の成果は減らない広告のタグは別に数えている広告のタグの「例外」にトリガーを入れる
データフィルタがもう作れない1プロパティ10個の上限値を internal に揃えて1つのフィルタにまとめる
フィルタを作れない・編集できない権限が閲覧者やアナリストプロパティの編集者以上の人が作業する

次にやること

社内のアクセスを除いたら、ほかの初期設定もまとめて見直します。データ保持期間とGoogleシグナルは「GA4の初期設定:データ保持期間・内部トラフィックの除外・Googleシグナル」に書いています。社内ではないのに怪しいアクセスが混じっているときは「botとスパムのアクセスを見分ける:GA4でできることと、できないこと」が続きです。GTMのプレビューとDebugViewの使い方は「公開前の確認:GTMのプレビューとGA4のDebugView」で、デベロッパートラフィックのフィルタと一緒に読むと流れがつながります。除外したあとでユーザー数やセッション数の動きが気になったら「ユーザー・セッション・イベント数の違い:GA4の数字が合わない理由」を見てください。

あわせて読む