KiSAKU
技術系7分で読めます

「来なかった人」を見るために

公開 更新
「来なかった人」を見るために

アクセス解析は「来た人」しか教えてくれません。

検索結果に出たのに押されなかった、そもそも検索結果に出ていない——こうした「来なかった人」の情報は、GA4には一切残りません。それを見るための道具がGoogle Search Consoleです。今回はその導入と、所有権の確認方法を選ぶまでの判断を記録します。

この記事で扱うこと

Search ConsoleとGA4の役割の違い、ドメインプロパティとURLプレフィックスの選び分け、5つある所有権確認方法のうちどれを選んだか。そして、確認コードをコードに直接書かなかった理由。

GA4では見えないもの

まず、2つの道具が何を見ているのかを整理します。境界を勘違いすると、片方に無いものを延々と探すことになります。

Googleアナリティクス Search Console
見る対象 サイトに来た後の行動 サイトに来る前の状況
データの出どころ サイトに埋めたタグ Googleの検索システム
分かること 閲覧ページ、滞在、遷移、流入元 検索語、表示回数、順位、クリック率
分からないこと どんな言葉で探されたか サイト内で何をしたか

この違いがはっきり出るのが検索語です。GA4は「Google検索から来た」ことは分かりますが、何と入力して来たのかは教えてくれません。プライバシー保護のため、検索エンジン側が渡していないからです。

Search Consoleは検索エンジン側の記録なので、そこが見えます。さらにクリックされなかった表示も数えられています。これがGA4には原理的に存在しない情報です。

表示されているのに押されていない、が分かる

ある記事が検索結果に100回出て、クリックが2回だとします。GA4に残るのは「2」だけです。Search Consoleを見ると「100回出ている」と分かるので、内容ではなくタイトルの問題だと切り分けられます。逆に表示が0なら、書き方以前に見つけられていません。直す場所がまったく変わります。

プロパティの種類を選ぶ

登録の最初に、2種類のどちらかを選ばされます。

ドメイン URL プレフィックス
対象 すべてのサブドメイン、http/https両方 入力したアドレスの配下だけ
確認方法 DNSの設定のみ 5種類から選べる
向いている場面 サブドメインをまとめて見たい 特定の1サイトだけ見たい

今回はURLプレフィックスを選び、https://www.kisaku.site/ を登録しました。

理由は2つあります。ひとつは、このサイトには cms.kisaku.site/wp/ というWordPress用のサブドメインがあり、そこは検索結果に出したくないからです。ドメインプロパティにすると、見せたくない側の数字まで一緒に入ってきます。

もうひとつは、確認方法の選択肢です。ドメインプロパティはDNSレコードの追加が必須で、ドメイン管理会社の画面での作業になります。設定を間違えるとサイト全体が見えなくなる場所なので、必要のない作業は入れたくありませんでした。

wwwの有無は別物として扱われる

URLプレフィックスでは、https://kisaku.site/https://www.kisaku.site/別のプロパティです。転送を設定していても自動では統合されません。登録するのは転送先——つまり実際に表示されるほうです。ここを間違えると、いつまでもデータが0のままになります。

所有権の確認方法

URLを入力すると、そのサイトが自分のものだと証明するよう求められます。方法は5つ提示されました。

方法 やること 今回の判断
HTMLファイル 指定のファイルをサイト直下に置く ×
HTMLタグ metaタグを head に入れる 採用
Googleアナリティクス GA4のタグが入っていれば通る ×
Googleタグマネージャー GTMのタグが入っていれば通る ×
DNSレコード ドメイン設定にTXTを追加 ×

HTMLファイル方式を外したのは、Next.jsで public に置くこと自体はできるものの、この1ファイルが何のためにあるのか、後から見て分からなくなるからです。ファイル名は意味を持たない英数字の羅列で、消しても当面は気づきません。そして消すと所有権が外れます。

GA4やGTMを使う方式も外しました。一見いちばん楽ですが、計測を止めた瞬間に所有権の確認も外れます。将来「GTMをやめて直接タグを貼ろう」と判断したとき、Search Consoleまで巻き込まれます。関係のないもの同士を依存させない、という判断です。

DNSは前述のとおり、影響範囲が大きすぎるので今回は使いませんでした。

残ったHTMLタグ方式を選んでいます。head に1行入るだけで、これはNext.jsが正式に対応している範囲です。

確認コードを直接書かなかった理由

提示されるのはこういう1行です。

Search Consoleが提示するタグ
<meta name="google-site-verification" content="(英数字の文字列)" />

これを layout.tsx にそのまま書いても動きます。しかし、環境変数から読む形にしました。

layout.tsx(要点)
export const metadata: Metadata = {
  metadataBase: new URL("https://www.kisaku.site"),
  // ...
  verification: {
    google: process.env.NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION,
  },
};

Next.jsには verification という専用の項目が用意されていて、値を渡すと head にmetaタグを出力してくれます。手書きでタグを差し込む必要はありません。

環境変数にした理由は、値が未設定なら何も出力されないからです。コードを先にデプロイしておいて、確認コードを取得してから設定を足せます。実際、今回はコードのほうが先にできていました。

もうひとつ、この値がサイトの機能に関係ないものだという点も理由です。動作には一切影響しないので、コードの中に混ざっていると「何のための文字列か」を毎回思い出すことになります。設定として外に置けば、設定であることが見た目で分かります。

この値は秘密ではない

NEXT_PUBLIC_ が付いた環境変数は、ビルド時にコードへ埋め込まれ、誰でも見られる状態になります。この確認コードはもともとHTMLに出力するためのものなので、それで問題ありません。逆に言えば、秘密にすべき値をこの接頭辞で扱ってはいけません。接頭辞が「公開してよい」という宣言になっています。

登録しただけでは確認されない

metaタグがまだ本番に出ていないので、この時点でのプロパティは未確認の状態です。

手順としてはこうなります。

確認が通るまでの順番
1. Search Consoleでプロパティを追加し、確認コードを控える
2. Vercelの環境変数に確認コードを登録する
3. 再デプロイする(環境変数の追加だけでは反映されない)
4. Search Consoleに戻って「確認」を押す
環境変数は追加しただけでは効かない

NEXT_PUBLIC_ の値はビルド時にコードへ埋め込まれます。管理画面で追加しても、その後にビルドし直さなければ、出力されるHTMLは前のままです。「設定したのに反映されない」の大半はこれです。

確認が通ったあとは、サイトマップの送信が次の作業になります。sitemap.xml をまだ用意していないので、これは別のタスクとして残しました。

今回の学び

まず、2つの道具は「来た後」と「来る前」で分かれているということ。GA4だけを見ていると、記事が読まれない理由を内容の問題だと考えがちです。実際には検索結果に出ていないだけかもしれません。直す場所を間違えないために、両方が要ります。

次に、楽な確認方法ほど、他のものに依存していること。GA4やGTMを使う方式は一瞬で終わりますが、計測をやめた瞬間に所有権も外れます。関係のないもの同士を結びつけない——遠回りに見えても、独立させておくほうが後で自由が利きます。

そして、設定はコードの外に置くと、設定に見えること。確認コードを直接書いても動きますが、コードの中に混ざると意味を思い出す手間が毎回かかります。環境変数にしておけば、それが「あとで変わりうる値」だと見た目で分かります。

← ブログ一覧へ戻る