<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ウェブ解析 on Marketechlabo</title><link>https://www.marketechlabo.com/categories/web-analytics/</link><description>Recent content in ウェブ解析 on Marketechlabo</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Wed, 23 Mar 2022 00:00:00 +0900</lastBuildDate><atom:link href="https://www.marketechlabo.com/categories/web-analytics/index.xml" rel="self" type="application/rss+xml"/><item><title>URLの構造~ホスト名、パス、パラメータ、ハッシュの成り立ちとSEO</title><link>https://www.marketechlabo.com/web-analytics/url-structure-for-marketer/</link><pubDate>Wed, 23 Aug 2017 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/web-analytics/url-structure-for-marketer/</guid><description>
&lt;h2 id="urlと向き合う必要性"&gt;URLと向き合う必要性&lt;/h2&gt;
&lt;p&gt;URLはインターネット上でページのありかを特定する文字列。サイト制作、コンテンツ管理の観点のみならず、webマーケターにとってもさまざまな集客施策で直面するものである。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;リマーケティング広告を配信する際、訪問したURL別にリストを作る&lt;/li&gt;
&lt;li&gt;アクセス解析においてページビューはURL単位で計測する&lt;/li&gt;
&lt;li&gt;SEO上はURLの正規化など、特に重要&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;意外と技術的に込み入ったところがある。&lt;/p&gt;
&lt;p&gt;URLの基本は&lt;strong&gt;1URL＝1コンテンツ&lt;/strong&gt;であり、1URLで複数のコンテンツが対応する（そのURLでアクセスしたときに表示されるコンテンツが時によって異なる）のでもよくないし、複数のURLで同一のコンテンツが対応するのも問題となる。こちらはSEOでは重複コンテンツということで特に問題となる。&lt;/p&gt;
&lt;p&gt;ところが実際、特にシステムを使った動的サイトではURLは必ずしもこの原則に対応しない。そこでアクセス解析やSEOを実施する際には、この原則に合うよう&lt;strong&gt;技術的な調整をする&lt;/strong&gt;必要が出てくる。&lt;/p&gt;
&lt;h2 id="簡単にwebの通信の仕組み"&gt;簡単にwebの通信の仕組み&lt;/h2&gt;
&lt;p&gt;URLの話をする前に、まず簡単にwebの通信の仕組みと用語について説明する。&lt;/p&gt;
&lt;h3 id="用語"&gt;用語&lt;/h3&gt;
&lt;p&gt;よく出てくる用語&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ブラウザ: webページを表示させるソフト。Google ChromeやMicrosoft Edgeなどのソフトである。&lt;/li&gt;
&lt;li&gt;（web）サーバ: webページを公開する側のシステム&lt;/li&gt;
&lt;li&gt;（web）サイト: 実際にはwebページが1ページのみ独立して存在することは少なく、複数のページが組み合わさって一つの役割（企業の紹介、サービスの提供など）をなしている。そのひとまとまりに公開されているwebページ群をwebサイトという。&lt;/li&gt;
&lt;li&gt;HTTP: webページを表示させるための通信の仕様（プロトコル）の名前。HTTP/2などというのはバージョンが新しくなるという意味。HTTPSは暗号化された（セキュアな）HTTP通信という意味。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="手順"&gt;手順&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;ブラウザがサーバにアクセスし、こういうコンテンツが欲しいと要求する＝&lt;strong&gt;リクエスト&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;サーバからコンテンツのデータをブラウザに返す＝&lt;strong&gt;レスポンス&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;ブラウザはそれを受け取って表示する＝レンダリング&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;リクエストの内容を指定するのが&lt;strong&gt;URL&lt;/strong&gt;である。&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="HTTP通信の仕組み"
class="image_figure image_internal image_unprocessed"
src="/images/tech/http.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="マーケターがurlを指定する場面"&gt;マーケターがURLを指定する場面&lt;/h2&gt;
&lt;h3 id="リマーケティング"&gt;リマーケティング&lt;/h3&gt;
&lt;p&gt;リマーケティング広告を配信する際、特定のページを訪問した人にのみ広告を配信する。特定のページ別を訪問した人に対して入札を強めたり広告のクリエイティブを変えたりする。&lt;/p&gt;
&lt;p&gt;そのリストを作る際にURLを指定する。ここでURLの指定の仕方が間違っていると正しく広告が配信されなくなる。&lt;/p&gt;
&lt;h3 id="アクセス解析"&gt;アクセス解析&lt;/h3&gt;
&lt;p&gt;ページ別のページビュー数を把握する際、URL単位で見る。また特定のページを見たユーザを絞り込む際などにURLを指定する。&lt;/p&gt;
&lt;p&gt;その際、同じページであるはずなのにURLが異なるものが存在すると、同じコンテンツのページを見ているのに別々にカウントされてしまう。そうするとページを見た総数を正しく把握できなくなるなど、数字の読み違いが発生してしまう。&lt;/p&gt;
&lt;p&gt;たとえば&lt;strong&gt;広告などの流入元を識別するパラメータが付く場合と付かない場合&lt;/strong&gt;とでURLは異なるが、これらは同じページとしてカウントするのが適切である。また&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.example.com/products/index.html"&gt;https://www.example.com/products/index.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.example.com/products/"&gt;https://www.example.com/products/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;のように末尾に&lt;strong&gt;index.htmlが付く場合と付かない場合で同じページを表す場合&lt;/strong&gt;があるが、それも同様である。&lt;/p&gt;
&lt;p&gt;アクセス解析において同じページは同じURLとしてカウントしてほしい。&lt;/p&gt;
&lt;p&gt;そのためにシステム側、アクセス解析ツール側それぞれで調整が発生することがある。&lt;/p&gt;
&lt;h3 id="seo"&gt;SEO&lt;/h3&gt;
&lt;p&gt;SEOにおいても同じページなのにURLが異なるケースがあると、ページに対する評価が分散して本来のSEOパワーを引き出せなくなってしまう。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;link rel=&amp;quot;canonical&amp;quot;&amp;gt;&lt;/code&gt;を使ったりシステム側でURLを書き換えたりするなど、&lt;strong&gt;URLの正規化&lt;/strong&gt;が必要になる。&lt;/p&gt;
&lt;p&gt;アクセス解析でもSEOでも&lt;strong&gt;1URL＝1コンテンツ&lt;/strong&gt;の原則が守られていないケースでは1URL＝1コンテンツとして扱ってもらえるよう、アクセス解析ツールや検索ロボットに対して指示をする、調整が必要にある。&lt;/p&gt;
&lt;h2 id="urlの構造"&gt;URLの構造&lt;/h2&gt;
&lt;p&gt;URLの文字列はいくつかの要素に分解される。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.example.com/audio/list.php?page=2&amp;amp;sortby=price"&gt;http://www.example.com/audio/list.php?page=2&amp;sortby=price&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://example.com/audio/detail.php?id=123#rev"&gt;https://example.com/audio/detail.php?id=123#rev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;プロトコル&lt;/th&gt;
&lt;th&gt;ホスト&lt;/th&gt;
&lt;th&gt;パス名&lt;/th&gt;
&lt;th&gt;（?クエリ文字列）&lt;/th&gt;
&lt;th&gt;（#ハッシュ）&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;http://&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.example.com"&gt;www.example.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;/audio/list.php&lt;/td&gt;
&lt;td&gt;?page=2&amp;amp;sortby=price&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;https://&lt;/td&gt;
&lt;td&gt;example.com&lt;/td&gt;
&lt;td&gt;/audio/detail.php&lt;/td&gt;
&lt;td&gt;?id=123&lt;/td&gt;
&lt;td&gt;#rev&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;※クエリ文字列はある場合とない場合がある&lt;br&gt;
※ハッシュはない場合が多い&lt;/p&gt;</description></item><item><title>GA4の計測検証をBigQueryを使って行う</title><link>https://www.marketechlabo.com/web-analytics/verify-ga4-tracking-using-bigquery/</link><pubDate>Wed, 06 Jan 2021 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/web-analytics/verify-ga4-tracking-using-bigquery/</guid><description>
&lt;p&gt;GA4の計測の検証はBigQueryエクスポートを使って行うのが普通になる。検証の方法にはいくつかあるのだが、ほかの方法だと欠点がある。
リアルタイムレポートではイベントが発生し、パラメータに値が入ってきているのはわかるが、どのイベントでどのパラメータの値が入っているかまではわからない。DebugViewは有効化しないと使えない。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BigQueryエクスポートを使うとすべてのサイト訪問に対して計測して数分以内には各パケット（イベント）でどのパラメータにどの値が入っているかがわかるし、詳細な検証ができる&lt;/strong&gt;。
GA4のBigQueryデータはパラメータやユーザープロパティがネストされているため、クエリでは毎回それをフラット化する手続きをする必要があり、やや面倒。
検証の目的に合わせて使うクエリがパターン化されるのでこの記事ではそれを紹介する。&lt;/p&gt;
&lt;h2 id="検証用のおすすめ設定"&gt;検証用のおすすめ設定&lt;/h2&gt;
&lt;h3 id="ログのストリーミング出力設定"&gt;ログのストリーミング出力設定&lt;/h3&gt;
&lt;p&gt;GA4のBigQueryエクスポート設定で&lt;strong&gt;ログ出力をストリーミングにする&lt;/strong&gt;。これを有効にすることでイベント発生から数分以内にログがBigQueryに取り込まれる。この指定をしないと1日1回しかデータが取り込まれず、翌日の朝にならないと検証ができない。設定方法は以下の「頻度」の「ストリーミング」のチェックを入れる。
&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt=""
class="image_figure image_internal image_unprocessed"
src="/images/ga4-bq-export/06-specify-data-stream.jpg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="計測のバージョン番号をパラメータ設定する"&gt;計測のバージョン番号をパラメータ設定する&lt;/h3&gt;
&lt;p&gt;送信する変数（イベントパラメータ、ユーザープロパティ）をバージョン管理するといい。
&lt;strong&gt;イベントパラメータに現在の設定のバージョン番号を記録し、全イベントでそれを送る&lt;/strong&gt;。
GTMで送信するパラメータ／ユーザープロパティを変更する都度、バージョンを更新する。
計測された値がどの設定によるものなのか、簡単に照合できる。&lt;/p&gt;
&lt;p&gt;全イベントで共通して送るのでイベントタグでなく設定タグに入れておく。
&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt=""
class="image_figure image_internal image_unprocessed"
src="/images/ga4-verification/01-set-config-version.jpg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 id="計測バージョン番号の確認"&gt;計測バージョン番号の確認&lt;/h4&gt;
&lt;p&gt;各計測バージョンがいつからいつまで計測されていたのか、計測されたイベントの数（行数）を確認する&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; p.value.string_value v_name,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;min&lt;/span&gt;(timestamp_micros(event_timestamp)) min_time,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;max&lt;/span&gt;(timestamp_micros(event_timestamp)) max_time,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;count&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;) n_events
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; &lt;span style="color:#f92672"&gt;`&lt;/span&gt;prj.analytics_99999999.events_&lt;span style="color:#f92672"&gt;*`&lt;/span&gt; t1, &lt;span style="color:#66d9ef"&gt;unnest&lt;/span&gt;(event_params) p
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;where&lt;/span&gt; p.&lt;span style="color:#66d9ef"&gt;key&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;config_version&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;group&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;by&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;order&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;by&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;desc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt=""
class="image_figure image_internal image_unprocessed"
src="/images/ga4-verification/02-verify-version.jpg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="ページビューidについて"&gt;ページビューIDについて&lt;/h3&gt;
&lt;p&gt;同じページビューで発生したイベントをグルーピングするためのIDとして、GA4のBigQueryエクスポートには&lt;code&gt;batch_page_id&lt;/code&gt;が含まれている。同じページビューで発生したイベントはこの値が同じになるため、「あるページでバナーを閲覧→そのバナーをクリックした」などの行動を把握できる。&lt;/p&gt;
&lt;p&gt;以前はカスタムのページビューIDをGTMで設定する必要があったが、&lt;code&gt;batch_page_id&lt;/code&gt;がデフォルトで計測されるようになったため、通常はこちらを使えばよい。&lt;/p&gt;
&lt;h3 id="ページの読み込み開始タイムスタンプをパラメータ設定する"&gt;ページの読み込み開始タイムスタンプをパラメータ設定する&lt;/h3&gt;
&lt;p&gt;ページの読み込み開始からイベント発生までどのくらい時間が経過したのか、検証の観点からもユーザ行動把握の観点からも必要である。
イベント発生のタイムスタンプは常に計測される（&lt;code&gt;event_timestamp&lt;/code&gt;）が、経過時間の起点としてページの読み込み開始タイムスタンプをイベントパラメータに入れておくと、その&lt;strong&gt;差分からイベント発生までにかかった時間がわかる&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;ブラウザに格納されているページの読み込み処理のタイムスタンプにはいろいろ候補があるが、Navigation Timing API Level 2の&lt;code&gt;PerformanceNavigationTiming&lt;/code&gt;を使うのがよい。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;entries&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;performance&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;getEntriesByType&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;navigation&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;entries&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;length&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; Math.&lt;span style="color:#a6e22e"&gt;round&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;entries&lt;/span&gt;[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;].&lt;span style="color:#a6e22e"&gt;startTime&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;performance&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;timeOrigin&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;そのままGTMのカスタムJavaScript変数として登録すればいい。
&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt=""
class="image_figure image_internal image_unprocessed"
src="/images/gtm/gtm-variable-navigation-start.jpg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="計測されているパラメータ数を見る"&gt;計測されているパラメータ数を見る&lt;/h2&gt;
&lt;h3 id="イベントごとに計測されているパラメータの種類を一覧にする"&gt;イベントごとに計測されているパラメータの種類を一覧にする&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; event_name,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; p.&lt;span style="color:#66d9ef"&gt;key&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;key&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;count&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;) cnt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; &lt;span style="color:#f92672"&gt;`&lt;/span&gt;prj.analytics_99999999.events_&lt;span style="color:#f92672"&gt;*`&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;unnest&lt;/span&gt;(event_params) p
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;group&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;by&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;order&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;by&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt=""
class="image_figure image_internal image_unprocessed"
src="/images/ga4-verification/03-parameters-by-event.jpg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Googleアナリティクス4のBigQueryエクスポート仕様</title><link>https://www.marketechlabo.com/web-analytics/ga4-bigquery-export-spec/</link><pubDate>Thu, 11 Mar 2021 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/web-analytics/ga4-bigquery-export-spec/</guid><description>
&lt;p&gt;GA4のBigQueryエクスポートの仕様とデータの扱い方を説明する。GA4のログはネストされたレコードなど特殊な形式になっており、そのままでは扱いにくいのでいくつかテクニックがある。&lt;/p&gt;
&lt;h2 id="bigqueryへのエクスポート設定"&gt;BigQueryへのエクスポート設定&lt;/h2&gt;
&lt;p&gt;GA4の管理画面で設定するが、手順はこちらの記事を参照。
&lt;a href="https://www.marketechlabo.com/ga-app-web-property-to-bigquery/"&gt;https://www.marketechlabo.com/ga-app-web-property-to-bigquery/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="テーブルの場所"&gt;テーブルの場所&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;プロジェクト：GA4のBigQueryエクスポート設定で指定したプロジェクト&lt;/li&gt;
&lt;li&gt;データセット「&lt;code&gt;analytics_999999999&lt;/code&gt;」（「&lt;code&gt;999999999&lt;/code&gt;」の部分はプロパティID）&lt;/li&gt;
&lt;li&gt;テーブル名
&lt;ul&gt;
&lt;li&gt;前日までのデータ（日付別に）「&lt;code&gt;events_20210101&lt;/code&gt;」
&lt;ul&gt;
&lt;li&gt;「&lt;code&gt;20210101&lt;/code&gt;」の部分は日付&lt;/li&gt;
&lt;li&gt;GA4のBigQueryエクスポート設定画面の「エクスポートタイプ」で「毎日」のチェックを入れている場合に出力される&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;今日のデータ、前日未集計分のデータ「&lt;code&gt;events_intraday_20210102&lt;/code&gt;」
&lt;ul&gt;
&lt;li&gt;「&lt;code&gt;20210102&lt;/code&gt;」の部分は日付&lt;/li&gt;
&lt;li&gt;エクスポートタイプ設定で「ストリーミング」のチェックを入れている場合に出力される&lt;/li&gt;
&lt;li&gt;「ストリーミング」と「毎日」を両方オンにしている場合は毎日のテーブルが生成されるとこのテーブルが削除される&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;出力時刻は午前7-9時ごろ。レポートのタイムゾーンに依存するため、米国のままにしていると夜11時ごろに出力される。GA4ではなくFirebase Analyticsの場合はUTC。タイムゾーン設定がない。&lt;/p&gt;
&lt;h2 id="日付でシャーディングされたテーブル"&gt;日付でシャーディングされたテーブル&lt;/h2&gt;
&lt;p&gt;GA4のBigQueryエクスポートでは日単位でテーブルが分かれている。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;前日まで：events_20210101, events_20210102, &amp;hellip;, events_20210127&lt;/li&gt;
&lt;li&gt;当日：events_intraday_20210128&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;このように一つの内容（エンティティ）を表すテーブルを実体としては異なる複数のテーブルに分けて分散格納することをシャーディング（sharding）という。BigQueryでは共通の接頭辞で、末尾が&lt;code&gt;_YYYYMMDD&lt;/code&gt;形式の日付で異なる名前のシャーディングテーブルはウェブ画面上では一つのテーブルであるかのようにまとめて表示される。&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="シャーディングテーブル"
class="image_figure image_internal image_unprocessed"
src="/images/ga4-bq-export/sharding-tables.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;シャーディングされたテーブル群ではクエリをかける際、日単位で対象のテーブルを絞り込めばメモリの節約ができる。
またクエリでも以下のようにfrom句でテーブル名を指定する際にワイルドカード&lt;code&gt;*&lt;/code&gt;を付けると、そのワイルドカード条件にマッチするテーブル名、つまり前方一致でマッチするテーブル名のすべてを対象にできる。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;from&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;`&lt;/span&gt;prj.analytics_999999999.events_&lt;span style="color:#f92672"&gt;*`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;そしてwhere句で&lt;code&gt;_table_suffix&lt;/code&gt;を使ってワイルドカードの部分の文字列を指定することができる。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;from&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;`&lt;/span&gt;prj.analytics_999999999.events_&lt;span style="color:#f92672"&gt;*`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;where&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; _table_suffix &lt;span style="color:#66d9ef"&gt;between&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;20210101&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;and&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;20210110&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上はテーブル名末尾の日付文字列部分が&lt;code&gt;20210101&lt;/code&gt;から&lt;code&gt;20210110&lt;/code&gt;の間（2021年1月1日から2021年1月10日までのログ）を対象にしたクエリだが、結果は以下と同じ。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; ... &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; &lt;span style="color:#f92672"&gt;`&lt;/span&gt;prj.analytics_999999999.events_20210101&lt;span style="color:#f92672"&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;union&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;all&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; ... &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; &lt;span style="color:#f92672"&gt;`&lt;/span&gt;prj.analytics_999999999.events_20210102&lt;span style="color:#f92672"&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;union&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;all&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; :
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; ... &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; &lt;span style="color:#f92672"&gt;`&lt;/span&gt;prj.analytics_999999999.events_20210110&lt;span style="color:#f92672"&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;_table_suffix&lt;/code&gt;はアスタリスクの部分にマッチする文字列を表す。つまり下の2つのfromは同じものを意味する。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; &lt;span style="color:#f92672"&gt;`&lt;/span&gt;prj.analytics_999999999.events_&lt;span style="color:#f92672"&gt;*`&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;where&lt;/span&gt; _TABLE_SUFFIX &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;20210101&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; &lt;span style="color:#f92672"&gt;`&lt;/span&gt;prj.analytics_999999999.events_20210101&lt;span style="color:#f92672"&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;_table_suffix&lt;/code&gt;を指定してクエリ対象のテーブルを絞り込むことによって、処理するデータ量つまりクエリコストの節約ができる。単純に&lt;code&gt;from&lt;/code&gt;でワイルドカードを指定したまま&lt;code&gt;_table_suffix&lt;/code&gt;を使った絞り込みを行わないと全期間のテーブルがクエリの対象になり、そのデータサイズに対して課金される。クエリを実行する際は必ず&lt;code&gt;_table_suffix&lt;/code&gt;で期間を絞り込もう。&lt;/p&gt;
&lt;p&gt;一方でパーティショニングも同様にデータを分けて格納しているが、テーブルの実体としては一つである。シャーディングもパーティショニングもクエリを実行する際、日付単位で対象のテーブルを絞り込めばメモリの節約ができる。&lt;/p&gt;
&lt;p&gt;なおシャーディングテーブルは基本的に同じ列構成になるのだが、GA4の場合、同じシャーディングテーブル群であってもある日を境に列が追加されることがある。その場合&lt;code&gt;select *&lt;/code&gt;をすると列が一致しないというエラーが発生するので、列名もワイルドカードではなく個別に指定しなければならない。&lt;/p&gt;
&lt;h2 id="主な項目"&gt;主な項目&lt;/h2&gt;
&lt;p&gt;GA4のログは1行1イベントを表す履歴データである。1行の中にネストされたデータ構造を持つ列もある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ユーザー
&lt;ul&gt;
&lt;li&gt;ユーザー識別子&lt;/li&gt;
&lt;li&gt;ユーザープロパティ: &lt;code&gt;user_properties.***&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;イベント
&lt;ul&gt;
&lt;li&gt;イベント名: &lt;code&gt;event_name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;タイムスタンプ: &lt;code&gt;event_timestamp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;バッチ処理関連
&lt;ul&gt;
&lt;li&gt;ページビューの識別子: &lt;code&gt;batch_page_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;同一ページ内での何番目の計測パケット送信なのか: &lt;code&gt;batch_ordering_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;同じ計測パケットの中でのイベントの順序: &lt;code&gt;batch_event_index&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;イベントパラメータ: &lt;code&gt;event_params.***&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;トラフィック
&lt;ul&gt;
&lt;li&gt;ユーザーの最初の流入元: &lt;code&gt;traffic_source.***&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;各イベント行における流入元: &lt;code&gt;collected_traffic_source.***&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;セッションの流入元: &lt;code&gt;session_traffic_source_last_click.***&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;デバイス関連: &lt;code&gt;device.***&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;地域: &lt;code&gt;geo.***&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;eコマース関連変数
&lt;ul&gt;
&lt;li&gt;取引に関する情報: &lt;code&gt;ecommerce.***&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;商品に関する情報: &lt;code&gt;items.***&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;同意関連: &lt;code&gt;privacy_info.***&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;ストリームID: &lt;code&gt;stream_id&lt;/code&gt;（ウェブ、アプリなど1つのGA4プロパティで複数のストリームがある場合に識別する）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ユーザー"&gt;ユーザー&lt;/h3&gt;
&lt;p&gt;ユーザの識別子として2種類の列がある。&lt;/p&gt;</description></item><item><title>GA4無料版と有料版のBigQueryエクスポートの違い</title><link>https://www.marketechlabo.com/web-analytics/ga4-bigquery-export-differences/</link><pubDate>Wed, 23 Mar 2022 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/web-analytics/ga4-bigquery-export-differences/</guid><description>
&lt;h2 id="2種類のbigqueryエクスポート"&gt;2種類のBigQueryエクスポート&lt;/h2&gt;
&lt;p&gt;GA4のBigQueryエクスポートデータには以下の2種類がある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;イベントデータ&lt;/li&gt;
&lt;li&gt;ユーザーデータ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ユーザーデータは1行1人で、&lt;code&gt;user_pseudo_id&lt;/code&gt;単位で集約したデータと、&lt;code&gt;user_id&lt;/code&gt;単位で集約したデータのそれぞれのテーブルが生成される。
所属するオーディエンスの情報やユーザ（&lt;code&gt;user_pseudo_id&lt;/code&gt; / &lt;code&gt;user_id&lt;/code&gt;）単位の通算指標が含まれる。
分析によく使うのがイベントデータで、1行1イベントでイベントパラメータなどがネストされて含まれている。&lt;/p&gt;
&lt;h2 id="エクスポートの頻度"&gt;エクスポートの頻度&lt;/h2&gt;
&lt;p&gt;イベントデータの出力頻度は以下の3種類がある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ストリーミング＝リアルタイム。重複や使えない列あり（トラフィック関連の列）&lt;/li&gt;
&lt;li&gt;毎日→翌日に、前日分をまとめて、重複除外処理やトラフィック情報のアトリビューション処理済みの形で出力される&lt;/li&gt;
&lt;li&gt;毎日（高頻度）＝「毎日」のデータを当日高頻度で出力する。「ストリーミング」と「毎日」の中間だが、トラフィック関連の列は出力される&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらは設定画面の「頻度」に対応している。
&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt=""
class="image_figure image_internal image_unprocessed"
src="/images/ga4-bq-export/06-specify-data-stream.jpg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
この中で「毎日（高頻度）」は有料版限定のオプションになる（無料版の管理画面では選択肢が表示されない）。&lt;/p&gt;
&lt;h3 id="ストリーミングデータの問題点"&gt;ストリーミングデータの問題点&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;ストリーミングデータでは重複や欠損の行が一部含まれる可能性があるのと、流入元アトリビューション処理ができておらず、&lt;code&gt;traffic_source.***&lt;/code&gt;列と&lt;code&gt;session_traffic_source_last_click.***&lt;/code&gt;が欠損して出力される&lt;/strong&gt;。
&lt;a href="https://support.google.com/analytics/answer/9358801"&gt;https://support.google.com/analytics/answer/9358801&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-txt" data-lang="txt"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;このテーブルには、その日に発生したセッション アクティビティのレコードが保持されます。ストリーミング エクスポートはベスト エフォート型の処理であり、イベントの遅れやアップロードの失敗などにより、データに漏れが生じる場合もあります。データは 1 日を通して継続的にエクスポートされます。セッションが複数のエクスポート周期にまたがっていると、テーブルにはそのセッションのレコードが複数保存されることがあります。
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;BigQuery のストリーミング エクスポートには、新規ユーザーについては次のユーザー アトリビューション データは含まれません。
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;traffic_source.name（レポート ディメンション: ユーザーのキャンペーン）
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;traffic_source.source（レポート ディメンション: ユーザーの参照元）
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;traffic_source.medium（レポート ディメンション: ユーザーのメディア）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;1日1回の再計算の中ではこれらを処理し、より正確なデータを生成しなおす。より正確なデータや、Googleのアトリビューションと同じロジックの流入元データ&lt;code&gt;traffic_source.***&lt;/code&gt;（「ユーザーの参照元」など）と&lt;code&gt;session_traffic_source_last_click.***&lt;/code&gt;（「セッションの参照元」など）の情報が欲しければ毎日のデータを使う必要がある。&lt;/p&gt;
&lt;h2 id="bigqueryエクスポート設定のパターンと出力されるテーブル"&gt;BigQueryエクスポート設定のパターンと出力されるテーブル&lt;/h2&gt;
&lt;p&gt;BiqQueryエクスポート設定では2個のチェックボックスがあった。2個のいずれかを選択するのではなく、それぞれチェックを入れる形式である。つまり以下の3パターンの出力設定がある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ニアリアルタイムのデータのみ&lt;/li&gt;
&lt;li&gt;1日1回再計算データのみ&lt;/li&gt;
&lt;li&gt;ニアリアルタイム＋1日1回再計算&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;それぞれについて生成されるテーブル名を見ていく。
まず**データセット名はいずれも&lt;code&gt;analytics_計測ID&lt;/code&gt;**となる&lt;/p&gt;
&lt;h3 id="ニアリアルタイムデータのみ"&gt;ニアリアルタイムデータのみ&lt;/h3&gt;
&lt;p&gt;生成されるテーブル名&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;events_intraday_YYYYMMDD&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;（&lt;code&gt;YYYYMMDD&lt;/code&gt;の部分は毎日の日付が入る）
（例）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2022年3月1日の日中は
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;events_intraday_20220301&lt;/code&gt;: 2022年3月1日のリアルタイムデータ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2022年3月2日の日中は
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;events_intraday_20220301&lt;/code&gt;: 2022年3月1日の全データ（不完全かも）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;events_intraday_20220302&lt;/code&gt;: 2022年3月2日のリアルタイムデータ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2022年3月3日の日中は
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;events_intraday_20220301&lt;/code&gt;: 2022年3月1日の全データ（不完全かも）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;events_intraday_20220302&lt;/code&gt;: 2022年3月2日の全データ（不完全かも）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;events_intraday_20220303&lt;/code&gt;: 2022年3月3日のリアルタイムデータ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;というテーブルが存在することになる。&lt;/p&gt;</description></item><item><title>GA4/Firebaseのログをフラット化する汎用クエリ</title><link>https://www.marketechlabo.com/web-analytics/ga4-firebase-log-preprocessing/</link><pubDate>Thu, 27 Jan 2022 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/web-analytics/ga4-firebase-log-preprocessing/</guid><description>
&lt;p&gt;GA4（Firebase）のログを扱う際、ネストされているイベントパラメータやユーザープロパティをフラット化しないと使いにくい。ところが格納されているパラメータやプロパティは決まっているわけではないため、通常はそれをハードコーディングで指定することが多い。つまり使用しているパラメータやプロパティに応じて&lt;strong&gt;その都度クエリを手動作成することになる&lt;/strong&gt;。
しかしそれでは面倒なので、どんなイベントパラメータやユーザープロパティを使っていても、それがどんな型であっても、オールマイティにフラット化するクエリを作る。存在するパラメータやプロパティに基づいて動的にクエリを作って実行する。&lt;strong&gt;このクエリひとつあればどんなケースにも対応できる&lt;/strong&gt;、汎用的なものである。&lt;/p&gt;
&lt;h2 id="イベントパラメータユーザープロパティ名を使った動的クエリ"&gt;イベントパラメータ（ユーザープロパティ）名を使った動的クエリ&lt;/h2&gt;
&lt;p&gt;フラット化の詳細はこちらを参照。
&lt;a href="https://www.marketechlabo.com/ga4-bigquery-export-spec/"&gt;https://www.marketechlabo.com/ga4-bigquery-export-spec/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;たとえばネストされたイベントパラメータ&lt;code&gt;ga_session_id&lt;/code&gt;（整数型）と&lt;code&gt;page_location&lt;/code&gt;（文字列型）をフラット化するクエリは&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; user_pseudo_id,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; event_name,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; (&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; p.value.int_value &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;unnest&lt;/span&gt;(event_params) p &lt;span style="color:#66d9ef"&gt;where&lt;/span&gt; p.&lt;span style="color:#66d9ef"&gt;key&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;ga_session_id&amp;#34;&lt;/span&gt;) ga_session_id,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; (&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; p.value.string_value &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;unnest&lt;/span&gt;(event_params) p &lt;span style="color:#66d9ef"&gt;where&lt;/span&gt; p.&lt;span style="color:#66d9ef"&gt;key&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;page_location&amp;#34;&lt;/span&gt;) page_location
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; &lt;span style="color:#f92672"&gt;`&lt;/span&gt;bigquery&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;data&lt;/span&gt;.ga4_obfuscated_sample_ecommerce.events_&lt;span style="color:#f92672"&gt;*`&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;なおこの記事ではGoogleが公開しているサンプルデータセット&lt;code&gt;bigquery-public-data.ga4_obfuscated_sample_ecommerce&lt;/code&gt;を使っている。実際のプロジェクトでは自身のプロジェクトとデータセットに差し替えること。&lt;/p&gt;
&lt;p&gt;この中で動的になるのは以下の部分&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; p.value.&lt;span style="color:#960050;background-color:#1e0010"&gt;【動的：型】&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;unnest&lt;/span&gt;(event_params) p &lt;span style="color:#66d9ef"&gt;where&lt;/span&gt; p.&lt;span style="color:#66d9ef"&gt;key&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;【動的：パラメータ名】&amp;#34;&lt;/span&gt;) &lt;span style="color:#960050;background-color:#1e0010"&gt;【動的：パラメータ名】&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ここに入る値は&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ga_session_id&lt;/code&gt;の場合、&lt;code&gt;p.value.int_value&lt;/code&gt;と&lt;code&gt;&amp;quot;ga_session_id&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;page_location&lt;/code&gt;の場合、&lt;code&gt;p.value.string_value&lt;/code&gt;と&lt;code&gt;&amp;quot;page_location&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;である。なおBigQueryではマルチバイト文字を列名にする際はバッククォートで囲む必要があり、列名の部分に日本語がある場合バッククォートを入れないとエラーになる。動的に実行する場合はパラメータ名をそのまま列名にすることになるため、パラメータ名に日本語を入れると不都合である。このような&lt;strong&gt;動的処理をすることを踏まえるとパラメータ名には日本語を使わないほうがいい&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;イベントパラメータではなくユーザープロパティの場合も同様にできる。つまり&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;イベントパラメータ（ユーザープロパティ）名と型の一覧を取得し、ループで文字列として代入し、SQL文を生成する&lt;/li&gt;
&lt;li&gt;そのSQL文をクエリとして実行する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ことが求められる。&lt;/p&gt;
&lt;h2 id="同じイベントパラメータに複数の型が混在する対策"&gt;同じイベントパラメータに複数の型が混在する対策&lt;/h2&gt;
&lt;p&gt;変数の型によって格納されるカラムは異なる。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;変数の型&lt;/th&gt;
&lt;th&gt;列名&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;event_params.value.string_value&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;int64&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;event_params.value.int_value&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;float64&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;event_params.value.double_value&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;（タイムスタンプや&lt;code&gt;date&lt;/code&gt;など、これ以外の型はイベントパラメータでは扱われない）&lt;/p&gt;
&lt;p&gt;同じパラメータに複数の型が混在するケースがある。例えば16進数として生成された値では、たまたま数字だけで構成された値は整数（&lt;code&gt;int64&lt;/code&gt;）になるし、A-Fの文字が入ると文字列（&lt;code&gt;string&lt;/code&gt;）になる。それぞれ&lt;code&gt;p.value.int_value&lt;/code&gt;と&lt;code&gt;p.value.string_value&lt;/code&gt;という別の列に格納される。つまりそれぞれの列から値を取得することになる。&lt;/p&gt;
&lt;p&gt;さらに出力を「1パラメータ＝1列」として格納するため型を合わせる（キャスト）必要がある。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; user_pseudo_id,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; event_name,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; (&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;case&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;when&lt;/span&gt; p.value.string_value &lt;span style="color:#66d9ef"&gt;is&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;not&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;null&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt; safe_cast(p.value.string_value &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; string)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;when&lt;/span&gt; p.value.int_value &lt;span style="color:#66d9ef"&gt;is&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;not&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;null&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt; safe_cast(p.value.int_value &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; string)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;when&lt;/span&gt; p.value.double_value &lt;span style="color:#66d9ef"&gt;is&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;not&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;null&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt; safe_cast(p.value.double_value &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; string)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;unnest&lt;/span&gt;(event_params) p &lt;span style="color:#66d9ef"&gt;where&lt;/span&gt; p.&lt;span style="color:#66d9ef"&gt;key&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;param1&amp;#34;&lt;/span&gt;) param1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; &lt;span style="color:#f92672"&gt;`&lt;/span&gt;bigquery&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;data&lt;/span&gt;.ga4_obfuscated_sample_ecommerce.events_&lt;span style="color:#f92672"&gt;*`&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ところがどの型にキャストすればいいのかが問題になるが、&lt;/p&gt;</description></item><item><title>ウェブログからSQLで指標を計算する8構文～GA4のBigQueryを題材に</title><link>https://www.marketechlabo.com/web-analytics/weblog-metrics-ga4/</link><pubDate>Thu, 05 Nov 2020 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/web-analytics/weblog-metrics-ga4/</guid><description>
&lt;p&gt;Googleアナリティクス4プロパティが登場し、&lt;a href="/ga-app-web-property-to-bigquery/"&gt;誰でもBigQueryにログを出力できるようになった&lt;/a&gt;。ログ分析を始める環境は揃ったわけだが、ログ分析のノウハウはあまり世に出ていない。SQLを使ってこれらを分析する方法を少し紹介する。どんな高度なログ分析をするにしても、これが基本となる。&lt;/p&gt;
&lt;h2 id="ウェブ分析の指標"&gt;ウェブ分析の指標&lt;/h2&gt;
&lt;p&gt;ウェブ分析の基本は&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ページビュー数&lt;/li&gt;
&lt;li&gt;セッション数&lt;/li&gt;
&lt;li&gt;人数&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;のカウントである。複雑な分析も、結局カウントしているのは&lt;strong&gt;この3つの指標に集約される&lt;/strong&gt;ことが多い。Eコマースになると購入金額の合計なども入ってくることはある。&lt;/p&gt;
&lt;p&gt;そしてこれに「○○した」という条件が付いて&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;イベント○○が発生した回数
&lt;ul&gt;
&lt;li&gt;○○したページビュー数
&lt;ul&gt;
&lt;li&gt;パラメータ△△の値が□□だったイベント○○が発生した回数（ページ□□のページビュー数）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;○○したセッション数&lt;/li&gt;
&lt;li&gt;○○した人数&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;をひたすらカウントする。たとえば&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;資料ダウンロードボタンをクリックした回数&lt;/li&gt;
&lt;li&gt;80％以上スクロールしたページビュー数&lt;/li&gt;
&lt;li&gt;自然検索から流入したセッション数&lt;/li&gt;
&lt;li&gt;コンバージョン完了ページを見た人数&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;である。これらも&lt;strong&gt;ページビュー数／セッション数／PV数のカウントであるのは同じで、「○○した」条件に絞り込んでカウントしているだけ&lt;/strong&gt;である。&lt;/p&gt;
&lt;p&gt;そして絶対数だけでなく率の指標&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;○○したセッション率（セッション単位CVRなど）&lt;/li&gt;
&lt;li&gt;○○した人数率（ユーザ単位CVRなど）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;を計算して歩留まりを見る。これに&lt;strong&gt;さまざまなディメンションをかけて比較するだけ&lt;/strong&gt;で、見ている指標はほとんどこれだけなのである。&lt;/p&gt;
&lt;h2 id="指標をbigqueryからsqlで計算する"&gt;指標をBigQueryからSQLで計算する&lt;/h2&gt;
&lt;h3 id="無条件の単純なページビュー数セッション数人数のカウント"&gt;無条件の単純なページビュー数／セッション数／人数のカウント&lt;/h3&gt;
&lt;p&gt;GA4に限らずログ分析の原則として、1行1ページビューになっていれば
ページビュー数は行数のカウント&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;COUNT&lt;/span&gt;(&lt;span style="color:#960050;background-color:#1e0010"&gt;ユーザ&lt;/span&gt;ID)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;セッション数はユニークなセッションIDの数のカウント&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;COUNT&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;DISTINCT&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;セッション&lt;/span&gt;ID)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ユーザ数はユニークなユーザIDの数のカウント&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;COUNT&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;DISTINCT&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;ユーザ&lt;/span&gt;ID)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;となる。&lt;/p&gt;
&lt;p&gt;GA4の形式の場合、ページビュー数（ページビューイベントが発生した回数）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SELECT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;COUNT&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;CASE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;WHEN&lt;/span&gt; event_name &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;page_view&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;THEN&lt;/span&gt; user_pseudo_id
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ELSE&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;END&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ) &lt;span style="color:#66d9ef"&gt;AS&lt;/span&gt; n_pageviews
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;`&lt;/span&gt;prj.analytics_999999999.events_&lt;span style="color:#f92672"&gt;*`&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;event_name = 'page_view'&lt;/code&gt;である行数をカウントする。&lt;/p&gt;
&lt;p&gt;総人数&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SELECT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;COUNT&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;DISTINCT&lt;/span&gt; user_pseudo_id
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ) n_visitors
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;`&lt;/span&gt;prj.analytics_999999999.events_&lt;span style="color:#f92672"&gt;*`&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ユーザを特定する列&lt;code&gt;user_pseudo_id&lt;/code&gt;（明示的にSDK内でユーザーIDを設定している場合は&lt;code&gt;user_id&lt;/code&gt;を使う。いずれも文字列型）があるので、これをユニークカウントする。&lt;/p&gt;
&lt;p&gt;総セッション数&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SELECT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;COUNT&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;DISTINCT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CONCAT(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; user_pseudo_id,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;-&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;CAST&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; (&lt;span style="color:#66d9ef"&gt;SELECT&lt;/span&gt; ep.value.int_value &lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;UNNEST&lt;/span&gt;(event_params) ep &lt;span style="color:#66d9ef"&gt;WHERE&lt;/span&gt; ep.&lt;span style="color:#66d9ef"&gt;key&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;ga_session_id&amp;#39;&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;AS&lt;/span&gt; string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; )
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; )
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ) &lt;span style="color:#66d9ef"&gt;AS&lt;/span&gt; n_sessions
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;`&lt;/span&gt;prj.analytics_999999999.events_&lt;span style="color:#f92672"&gt;*`&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;GA4の仕様で、単体でユニークなセッションを特定するIDを指す列はない。&lt;strong&gt;ユーザごとのセッションを特定する&lt;/strong&gt;（あくまでユーザ内なのでグローバルにセッションを特定できるわけではない）変数がページビューイベントのパラメータ&lt;code&gt;ga_session_id&lt;/code&gt;（整数型）になる。&lt;/p&gt;</description></item><item><title>Googleアナリティクスなどのツールにとらわれないウェブ解析の基本的な考え方</title><link>https://www.marketechlabo.com/web-analytics/web-analysis-basic/</link><pubDate>Mon, 25 Jun 2018 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/web-analytics/web-analysis-basic/</guid><description>
&lt;h2 id="ツールを問わずやりたいのはアクセス解析"&gt;ツールを問わずやりたいのはアクセス解析&lt;/h2&gt;
&lt;p&gt;Googleアナリティクスは無料でアクセス解析、ウェブ解析ができるツールで、手軽に使えるような環境からよく「Googleアナリティクスの使いかたを学びたい」という声が出てくる。
有料なので使う人はあまり多くはないが、アクセス解析ツールといえばAdobe Analyticsも同じ仲間であり、やることは同じである。&lt;/p&gt;
&lt;p&gt;重要なのは「Googleアナリティクス」という固有のツールの使い方を知ることではなく、アクセス解析／ウェブ解析の目的とプロセスを学ぶことである。ツールの違いは方言みたいなもので、使うときに知識として学べばいい。そうしておけばGA、AAだけでなく、どんなツールにも対応できるし、ログ解析にも応用できる。&lt;/p&gt;
&lt;p&gt;逆にそれを知らないと、情報量が多い、画面構成が複雑であるアクセス解析ツールに惑わされて
肝心のやりたいことをできない、出すべき情報を得るのに無駄に時間がかかってしまう。
ということで、まずはアクセス解析の基本的な考え方を整理する。&lt;/p&gt;
&lt;h2 id="分析の基本的な考え方"&gt;分析の基本的な考え方&lt;/h2&gt;
&lt;p&gt;アクセス解析／ウェブ解析の前に、そもそも分析とはどういうものかを踏まえておく必要がある。これについては以下のページを参照のこと。シリーズの後のページまでは読まなくてもいいが、このページの内容は押さえておこう。
&lt;a href="/objectives-approach-data-analysis/"&gt;/objectives-approach-data-analysis/&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="ウェブ解析でもクロス集計を意識する"&gt;ウェブ解析でもクロス集計を意識する&lt;/h3&gt;
&lt;p&gt;ウェブ解析においても上のページで説明したようなクロス集計を意識するのがいい。&lt;strong&gt;ディメンションごとに指標を見る。ドリルダウン、スライス、ダイスを駆使して深掘りをする&lt;/strong&gt;ということである。&lt;/p&gt;
&lt;p&gt;それを強く意識することが、数多くの項目とレポートの種類がある解析ツールの画面に惑わされない秘訣になる。
そしてそういったツールがなくても、データさえ揃っていればピボットテーブルを駆使してExcelでも分析ができるということがわかるだろう。ある程度進んだ分析ではGoogleアナリティクスの画面を使わず、ExcelやTableau、Looker Studioをメインに使った分析が普通になる。GA4では探索機能もあり、画面上でのアドホックな深掘りがしやすくなっている。&lt;/p&gt;
&lt;p&gt;Adobe Analyticsでも同様に「ワークスペース」というTableau／ピボットライクな画面を使った分析が中心になっている。&lt;/p&gt;
&lt;h2 id="アクセス解析の指標とディメンション"&gt;アクセス解析の指標とディメンション&lt;/h2&gt;
&lt;p&gt;指標とディメンションが重要になるわけだが、実際にアクセス解析ツールの画面で見ると&lt;/p&gt;
&lt;h3 id="指標"&gt;指標&lt;/h3&gt;
&lt;h4 id="ビルトイン指標"&gt;ビルトイン指標&lt;/h4&gt;
&lt;p&gt;アクセス解析ツールにビルトインで実装されている指標で使うのは&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PV数&lt;/li&gt;
&lt;li&gt;セッション数（訪問数）&lt;/li&gt;
&lt;li&gt;人数（ユーザ数、ユニークユーザ数）&lt;/li&gt;
&lt;li&gt;コンバージョン数（問合せ数）&lt;/li&gt;
&lt;li&gt;滞在時間&lt;/li&gt;
&lt;li&gt;直帰率&lt;/li&gt;
&lt;li&gt;離脱率&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;あたりになる。Googleアナリティクスでは約200の指標があるが、実際に使うのはほとんどここに集約される。&lt;/p&gt;
&lt;p&gt;なおGA4ではユニバーサルアナリティクスから指標体系が一部変更されている。特にエンゲージメントセッション数、エンゲージメント率といった指標が追加されている。GA4における直帰率はエンゲージメントセッションの逆（10秒以上滞在、2ページ以上閲覧、キーイベント発生のいずれもなかったセッションの割合）として定義されており、ユニバーサルアナリティクスの直帰率とは定義が異なる点に注意が必要である。&lt;/p&gt;
&lt;h4 id="指標は作ることもある"&gt;指標は作ることもある&lt;/h4&gt;
&lt;p&gt;ところが重要なのはこれらの指標に基づいて&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;○○した&lt;/strong&gt;セッション数&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;○○した&lt;/strong&gt;人数&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;などの指標を新たに作れるということである。
「○○した」というのは、「商品詳細ページを閲覧した」「会社概要ページを見た」など、こちらが知りたい内容に合った特定の行動である。「コンバージョンしたセッション数」などというのも、結局「コンバージョン完了ページを閲覧したセッション数」ということでしかない。&lt;/p&gt;
&lt;p&gt;こういった「特定のステップに到達した数」を指標化するというのは、コンセプトダイアグラムやカスタマージャーニー的な考え方で必要となる。そこでは**「○○した」の部分の着眼点**が重要になる。&lt;/p&gt;
&lt;h4 id="数と率は分けて考える"&gt;数と率は分けて考える&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;絶対数&lt;/strong&gt;と&lt;strong&gt;率・平均&lt;/strong&gt;系の指標は分けて考える&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;絶対数→セッション数、CV数&lt;/li&gt;
&lt;li&gt;率・平均→CVR、平均PV数&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;たとえば「対前月比でCV数は減少したが、CVRは上がった」というケース。
絶対数と率（平均）は時にトレードオフの関係になることもある。特にCV数が大きくなるとCVRが下がるというのは広告の世界でありがちで、獲得ボリュームを増やそうとするとCPAは悪化するのは当然のことである。&lt;/p&gt;
&lt;h4 id="指標の因果関係を踏まえて"&gt;指標の因果関係を踏まえて&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;「セッション数」×「コンバージョン率」＝「コンバージョン数」&lt;/li&gt;
&lt;li&gt;「セッション数」×「平均PV数」＝「PV数」&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;「コンバージョン数が増えた」
なぜコンバージョン数が増えるのか？セッション数を増やせばCV数も増えるし、CVRが上がればCV数が増える。「コンバージョン数が増えた」というだけではどちらなのか分からない。この意識は目標・KPI設計においても重要となる。直接「コンバージョン数を増やす」アクションはない。「流入を増やす」か「コンバージョン率を上げる」か、どちらかのアクションしかないのである。&lt;/p&gt;
&lt;p&gt;PV数についても同様で、ユーザが訪問して、何ページか見る。その一人一人が「何ページ」見たかというのが平均PV数である。その積み重ねでトータルのPV数になる。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;数×率（平均）＝数
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;努力できる施策に直結する指標は率・平均系の指標になる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;コンバージョン数 → コンバージョン率&lt;/li&gt;
&lt;li&gt;流入数 → 平均流入単価&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;数の問題だけであればお金をかけて広告を出せば解決する。それだと赤字になって意味がないので、CPAという平均の指標が重要になる。&lt;/p&gt;
&lt;h3 id="切り口ディメンション"&gt;切り口（ディメンション）&lt;/h3&gt;
&lt;p&gt;アクセス解析ツールにビルトインで実装されているディメンションでよく使うのは&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;デバイス（モバイル／デスクトップ／タブレット）&lt;/li&gt;
&lt;li&gt;新規訪問かリピート訪問か&lt;/li&gt;
&lt;li&gt;ユーザ属性（性別、年齢など）&lt;/li&gt;
&lt;li&gt;流入元&lt;/li&gt;
&lt;li&gt;流入ページ（ランディングページ）&lt;/li&gt;
&lt;li&gt;ページ（URL）&lt;/li&gt;
&lt;li&gt;ページのカテゴリ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;あたりになる。Googleアナリティクスでは約250のディメンションがあり、これら以外のディメンションを使うこともある（指標ほど使うものが限定されているわけではない）が、まずはこのあたりを意識しておけばいい。&lt;/p&gt;
&lt;h4 id="ディメンションの深掘りはマクロからミクロへ"&gt;ディメンションの深掘りはマクロからミクロへ&lt;/h4&gt;
&lt;p&gt;ディメンションの深掘り、ドリルダウンはマクロからミクロに掘り下げていく方向で考える。最初からすべてミクロに見ていたのでは追いつかない。&lt;/p&gt;</description></item><item><title>メディアサイトのアクセス解析と重要な指標、コンテンツ分析の着眼点</title><link>https://www.marketechlabo.com/web-analytics/evaluate-contents/</link><pubDate>Sat, 12 Aug 2017 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/web-analytics/evaluate-contents/</guid><description>
&lt;p&gt;ニュースメディアや雑誌のウェブ版に加え、企業が自社で運営するオウンドメディアも多数存在する。こういったサイトではお問い合わせ、資料請求といった目先のコンバージョンがない。会員登録などはあったとしても、サイト全体のゴールというほどの位置づけではない。
こういった目先のコンバージョンポイントのないメディアサイトのアクセス解析で考慮することを解説する。&lt;/p&gt;
&lt;h2 id="メディアサイトの分析で考慮すること"&gt;メディアサイトの分析で考慮すること&lt;/h2&gt;
&lt;h3 id="メディアサイトのイシュー"&gt;メディアサイトのイシュー&lt;/h3&gt;
&lt;p&gt;メディアサイトの運用の主眼は&lt;strong&gt;PV数&lt;/strong&gt;を増やすことに置かれていることが多い。
それ以外では&lt;strong&gt;ユーザ数&lt;/strong&gt;を増やす、&lt;strong&gt;滞在時間&lt;/strong&gt;を上げる、&lt;strong&gt;会員数&lt;/strong&gt;を増やすなどである。&lt;/p&gt;
&lt;p&gt;それを実現するためのサイト内での施策は&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;コンテンツ
何がウケるのか、どんな記事を書いたらいいのか&lt;/li&gt;
&lt;li&gt;UI
基本的にページ遷移させることに主眼
&lt;ul&gt;
&lt;li&gt;メニュー等共通パーツ&lt;/li&gt;
&lt;li&gt;テンプレートごと&lt;/li&gt;
&lt;li&gt;記事ごと
&lt;ul&gt;
&lt;li&gt;リンク&lt;/li&gt;
&lt;li&gt;ページ分割&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;キャンペーンや広告（タイアップ）の企画&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;オウンドメディアの場合、&lt;strong&gt;将来のコンバージョン&lt;/strong&gt;につながる&lt;strong&gt;ユーザの獲得&lt;/strong&gt;ということが重要になる。
とはいえメディアである。メディアとしての役割が果たせないとわざわざオウンドメディア施策をやる意味はないので、上記のことは考慮しなければならない。&lt;/p&gt;
&lt;h3 id="ページの分類"&gt;ページの分類&lt;/h3&gt;
&lt;p&gt;メディアサイトの構造はどうなっているのか。
たとえばEコマースであれば&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;トップページ&lt;/li&gt;
&lt;li&gt;商品一覧&lt;/li&gt;
&lt;li&gt;商品詳細&lt;/li&gt;
&lt;li&gt;カート～購入遷移&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;が代表的なサイト構成となる。
メディアサイトでは、2つの切り口から見ることになる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ユーザに情報を与える上での（=情報設計上の）機能&lt;/li&gt;
&lt;li&gt;内容（トピック）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;重要なのは最初の&lt;strong&gt;計測設計の段階でこれらの属性を各URLに紐づけておくこと&lt;/strong&gt;。
そしてGoogleアナリティクスであればコンテンツグループとして登録することである。&lt;/p&gt;
&lt;h4 id="ページの機能別分類"&gt;ページの機能別分類&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;トップページ&lt;/li&gt;
&lt;li&gt;記事一覧
&lt;ul&gt;
&lt;li&gt;カテゴリ別&lt;/li&gt;
&lt;li&gt;著者別&lt;/li&gt;
&lt;li&gt;○○別&lt;/li&gt;
&lt;li&gt;新着記事一覧&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;個別記事&lt;/li&gt;
&lt;li&gt;その他個別ページ
&lt;ul&gt;
&lt;li&gt;キャンペーンLP&lt;/li&gt;
&lt;li&gt;業態に応じてケースバイケース&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;会員登録遷移&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらは機能による分類である。
トップページはサイトを代表するページという機能がある。会員登録遷移には会員登録させるという機能がある。
どんな話題を扱っていても、共通してこれらの機能は必要となる。&lt;/p&gt;
&lt;p&gt;そして機能によって閲覧状況、ユーザに期待する動きは異なる。個別記事ページはすべてのテキストを読んでもらうことがゴールになるし、記事一覧ページは目的の記事に遷移してもらうことがゴールになる。
機能別に見るべき指標やその目標値は異なる。読了率やページ閲覧時間などを記事一覧ページで適用するのがナンセンスなのはわかるだろう。&lt;/p&gt;
&lt;p&gt;そもそも機能の違うページは比較対象にならない。トップページを個別記事ページと比較する意味はないし、記事一覧ページと比較することも不適切である。あくまでこれらは別々に議論、評価すべきもの。比較というのはユーザに与える機能、すなわち&lt;strong&gt;ページを見るシナリオがある程度同じページ間で行うべき&lt;/strong&gt;ものである。&lt;/p&gt;
&lt;p&gt;分析において念頭に置くべきは機能分類ごとに分析するということなのである。
ちなみによく言われる「コンテンツ」というのは記事一覧ページ＋個別記事ページのこと。これらをトピックや編集意図によって分類して分析していくことになる。&lt;/p&gt;
&lt;h4 id="ページの内容トピックによる分類"&gt;ページの内容（トピック）による分類&lt;/h4&gt;
&lt;p&gt;これとは別にコンテンツによる分類、すなわち記事のさまざまな切り口からの分類がある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;カテゴリ
&lt;ul&gt;
&lt;li&gt;大カテゴリ&lt;/li&gt;
&lt;li&gt;小カテゴリ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;著者&lt;/li&gt;
&lt;li&gt;編集意図（メタ情報）
&lt;ul&gt;
&lt;li&gt;特定の情報を知ってもらいたい&lt;/li&gt;
&lt;li&gt;エンゲージメント強化&lt;/li&gt;
&lt;li&gt;賑やかし&lt;/li&gt;
&lt;li&gt;自然検索からの集客&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;カテゴリや著者は記事の属性、インデックスとしてCMSに登録されているものだろう。編集意図というのが難しいかもしれないが、記事ごとにある、記事の目的や閲覧者に対して期待する行動などに基づく分類である。たとえば自然検索集客のためのストック型コンテンツ、バズ狙いの面白記事、コンバージョンさせるための訴求型コンテンツといったものになる。&lt;/p&gt;
&lt;p&gt;すべてがバズ狙いの賑やかしの記事であっても中身の薄いメディアになるし、エンゲージメント強化ばかり意識していても訪問者が来なければ意味がない。メディアにおいて重要なのは&lt;strong&gt;編集方針&lt;/strong&gt;に基づいてこれらの個別記事ごとの狙い（意図）のバランスを取っていくことである。これがメディアの「色」になり、ブランドになる。&lt;/p&gt;
&lt;p&gt;ストック型の記事を作るのにバズ狙いの要素を入れるとコンテンツがブレて本来の効果を発揮しにくくなるだろう。CMSには登録しないかもしれないが、あとでそれぞれの編集意図が正しく機能しているかを確認し、編集にフィードバックするためにも必要な分類である。&lt;/p&gt;
&lt;p&gt;またここではキーワードやタグクラウドのように細分化されすぎた切り口で見ても分析とアクションがとりにくい。分析にはある程度の粒度が必要である。
「コンテンツ」の部分、主に個別記事についてこれらの分類ごとにパフォーマンスを見ていくことになる。&lt;/p&gt;
&lt;p&gt;Googleアナリティクスでコンテンツグループを設定する場合は、機能別分類で1軸、残りを内容別の各分類（カテゴリ、著者、…）に割り当てることになる。&lt;/p&gt;
&lt;h2 id="コンテンツの役割と見るべき指標"&gt;コンテンツの役割と見るべき指標&lt;/h2&gt;
&lt;p&gt;上記は分類、ディメンションにあたるもので、今度は見るべき数値、指標を説明する。&lt;/p&gt;</description></item><item><title>webサイトの訪問履歴をCRM的な観点で見る</title><link>https://www.marketechlabo.com/web-analytics/website-crm/</link><pubDate>Tue, 14 Feb 2017 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/web-analytics/website-crm/</guid><description>
&lt;h2 id="webサイトの分類とkpiの方向性"&gt;Webサイトの分類とKPIの方向性&lt;/h2&gt;
&lt;h3 id="目的のあるサイト"&gt;目的のあるサイト&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;特定分野のポータルサイト、情報サイト（比較サイト、不動産ポータルなど）
&lt;ul&gt;
&lt;li&gt;リードを送る&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;企業サイト
&lt;ul&gt;
&lt;li&gt;ブランド紹介、理解&lt;/li&gt;
&lt;li&gt;実店舗誘導&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ECサイト&lt;/li&gt;
&lt;li&gt;リード獲得型（問合せ、資料請求）&lt;/li&gt;
&lt;li&gt;キャンペーン、プロモーションサイト
&lt;ul&gt;
&lt;li&gt;知ってもらう&lt;/li&gt;
&lt;li&gt;参加してもらう&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;会員向けサイト
&lt;ul&gt;
&lt;li&gt;特定の行動&lt;/li&gt;
&lt;li&gt;アクティブ率を高める&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;→目的の達成数がKGIになる。KPIはそれを構成する要素。
基本的には目的達成までのカスタマージャーニー、コンセプトダイアグラムを描き、各ステップの到達数を見ていくのがいい。
目的の種類によってセッション限りで達成する場合と、ある程度のリードタイムをもって達成する場合がある。その場合は訪問間隔や訪問回数などCRM観点も意識する。&lt;/p&gt;
&lt;h3 id="目的のない暇つぶしサイト"&gt;目的のない（暇つぶし）サイト&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;動画&lt;/li&gt;
&lt;li&gt;ニュース&lt;/li&gt;
&lt;li&gt;まとめサイト&lt;/li&gt;
&lt;li&gt;ソーシャルメディア&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;→訪問者の特定の行動がマネタイズに結びつかない以上、KGIは広告収入が主なものとなる。
KPIは媒体価値を高めるものとしての閲覧系の指標&lt;/p&gt;
&lt;h2 id="目的なし暇つぶし系のサイトのkpi"&gt;目的なし（暇つぶし）系のサイトのKPI&lt;/h2&gt;
&lt;p&gt;目的なし（暇つぶし）系のサイト、メディアサイトのKPIを追う。
訪問者の特定の行動がマネタイズに結びつかない以上、KGIは広告収入が主なものとなる。
KPIは媒体価値を高めるもの。&lt;/p&gt;
&lt;p&gt;媒体価値というのは基本的に訪問者に対して与える影響度の大きさということで、概念としては大体&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;訪問者の質&lt;/li&gt;
&lt;li&gt;訪問者の数&lt;/li&gt;
&lt;li&gt;回数&lt;/li&gt;
&lt;li&gt;接触した、メッセージを伝えた時間&lt;/li&gt;
&lt;li&gt;メッセージを伝えたときの意識の深さ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;といったものの掛けあわせになる。&lt;/p&gt;
&lt;h3 id="pv数延べ滞在時間"&gt;PV数、延べ滞在時間&lt;/h3&gt;
&lt;p&gt;メディアサイトでよく言われるPV至上主義。&lt;br&gt;
PV数はそもそも「どれだけの&lt;strong&gt;量&lt;/strong&gt;の訪問者がどれだけの&lt;strong&gt;長さ&lt;/strong&gt;そのサイトにいたか」のグロスの指標。&lt;br&gt;
「サイトにいたか」という意味では滞在時間も同じ目的の指標になる。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;PV数＝訪問（セッション）数×平均PV数
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;延べ滞在時間＝訪問（セッション）数×平均滞在時間
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="平均pv数平均滞在時間"&gt;平均PV数、平均滞在時間&lt;/h4&gt;
&lt;p&gt;平均PV数、平均滞在時間とも&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;訪問（セッション）あたりの&lt;strong&gt;回遊&lt;/strong&gt;（遷移）状況&lt;/li&gt;
&lt;li&gt;訪問（セッション）あたりの&lt;strong&gt;精読&lt;/strong&gt;状況＝実際にページを読んでいる時間&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;のこと。単純にページを遷移させるのであればある程度小手先のテクニックが使える。しかし実際に読んでいるかは別問題ということで、PVではなく滞在時間に着目する考え方が出てきている。&lt;strong&gt;実際に意識を持って読んでもらっている時間&lt;/strong&gt;というのが重要になる。&lt;/p&gt;
&lt;h4 id="訪問数流入数セッション数"&gt;訪問数（流入数、セッション数）&lt;/h4&gt;
&lt;p&gt;PV数、延べ滞在時間を構成するもう一つの要素が訪問数＝セッション数。&lt;strong&gt;流入&lt;/strong&gt;そのものでもある。メディアの影響度のボリュームは一般にリーチとフリークエンシーで構成される。セッション数も概念としてはこれらを掛けたもの&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;セッション数＝リーチ（ユーザ数）×フリークエンシー（平均訪問回数）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ということになる。施策によって流入は増やすものである。&lt;/p&gt;
&lt;h5 id="フリークエンシー訪問回数"&gt;フリークエンシー（訪問回数）&lt;/h5&gt;
&lt;p&gt;どれだけ&lt;strong&gt;リピート&lt;/strong&gt;訪問を生み出したか。&lt;br&gt;
施策によってある程度上積みできるものではある。&lt;/p&gt;
&lt;h5 id="リーチユーザ数"&gt;リーチ（ユーザ数）&lt;/h5&gt;
&lt;p&gt;実はリーチは後でついてくるもの。強いて言えば新規ユーザを獲得する流入元を開拓するのがユーザ数を増やすことにはなるが、基本的には流入数を増やすことでユーザ数は増えるものである。&lt;/p&gt;
&lt;p&gt;ただ、流入数は増えているがリピート訪問ばかりでユーザ数が減少しているなどという事態はよろしくない。ユーザ数の&lt;strong&gt;増加率&lt;/strong&gt;は健全な成長のKPIになる。&lt;/p&gt;
&lt;p&gt;ユーザ数自体は&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;月間のユニークユーザ数&lt;/li&gt;
&lt;li&gt;ウィンドウ○日のアクティブユーザ数&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;などで測れる。&lt;/p&gt;
&lt;h2 id="見ていくポイントと流れ"&gt;見ていくポイントと流れ&lt;/h2&gt;
&lt;p&gt;それぞれの指標の数値を上げていくためにはどうすればいいか。着目すべきポイントを整理する。
&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="指標と要因"
class="image_figure image_internal image_unprocessed"
src="/images/web-analysis/indicators-factors.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;流入&lt;/li&gt;
&lt;li&gt;回遊・精読&lt;/li&gt;
&lt;li&gt;リピート&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;回遊とリピートはサイト内の努力によるところも大きいが、&lt;strong&gt;流入の質&lt;/strong&gt;にも依存する。回遊もリピートも多いのが理想だが、両方満たす流入自体そんなにあるものではない。つまり両方追っていたのでは流入自体が増えない。回遊が少なくてもリピートが多ければいい。その逆もあり。と考える必要がある。さすがに回遊もリピートもしないのは微妙ではある。&lt;/p&gt;</description></item></channel></rss>