-
Notifications
You must be signed in to change notification settings - Fork 1
Category Ranking
Requires: Version 3.0.0 and over
本稿の内容はGoogle Analytics 4に対応したものになっています。
カテゴリー別PVランキングを作るには、イベント(ページ閲覧)にカスタムディメンションを紐づける必要があります。「/article/1234というページを閲覧した」というイベントに「category=1」というカスタムディメンションを紐づけることで、「categoryが_1_のページ閲覧(ScreenView)イベント」をフィルタリング検索することができます。
カスタムディメンションの設定方法は公式ドキュメントを参考にしてください。本稿では、紐づけるための情報をどのように取得するかを2つの方法で説明します。
Ga Communicatorの設定画面にはプレースホルダー機能があります。これは出力するスクリプトの一部を置換することで、JavaScriptから値を利用できるようにするものです。たとえば、%post_id%
は現在のページの投稿IDに変わります。
設定するScriptに次のように書けば、カスタムディメンションを利用できます。
// gtag.jsの場合
// gtagConfigはプラグインが利用する変数で、GAへの通知に使われます。
// やや冗長ですが、このように2回指定する必要があります。
gatagConfig.custom_map = {
dimension1: 'post',
dimension2: 'post_type',
dimension3: 'category',
};
gtagConfig.post = %post_id%;
gtagConfig.post_type = "%post_type%";
gtagConfig.category = "%post_terms%";
// GTM(JSを別の場所で管理している場合)
window.gacom = {
post: %post_id%,
post_type: '%post_type%',
terms: '%post_terms%'
};
// 他のJS(e.g. GTM)からアクセス、JSの読み込み順に注意。
var dataLayer = dataLayer || [];
dataLayer.push({
'post_id': window.gacom.post,
'category': window.gacom.terms,
});
metaタグ機能を利用すると、metaタグに値が出力されるので、それを利用します。
それでは、カテゴリー別のランキングを取得するために、ランキング取得のロジックを次のように決定しましょう。
- ページビューとパスの一覧を取得する(=通常のランキング)
- カスタムディメンションcategoryで
_1_
が含まれているもの(タームID: 1のついた記事)でフィルタリングする
フィールド名の指定方法は 公式ドキュメント をご覧ください。
$ranking = Kunoichi\GaCommunicator::get_instance()->ga4_get_report( [
'dimensionFilter' => [
'filter' => [
'fieldName' => 'customEvent:category',
'stringFilter' => [
'matchType' => 'CONTAINS',
'value' => '_1_',
],
],
],
] );
上記により、 [ パス, タイトル, ビュー数 ]
の配列が入手できます。投稿タイプでの絞り込みや、著者別人気記事なども同様の方法で取得することが可能です。
カテゴリー別一覧を作るには、カスタムディメンションを登録する必要があります。 今回はカスタム定義のスロット2にカテゴリーを登録します。 カスタム定義の登録の作業はGoogle Analytics上で行う必要があります。
いくつかのプレースホルダーが用意されていますが、カテゴリーは用意されていません。 プレースホルダーをフィルターで追加してください。今回のケースでは、重複を想定し、次のようなデータの形になることを目指します。
ga( 'set', 'dimension2', '_2_, _3_, _4_,_102_' );
この変わったデータ形式は、正規表現でうまくIDを扱うためです。たとえば、上記を 2,3,4,102
として登録してしまった場合、「カスタムディメンションに10を含む」で検索した場合、マッチしてしまいます。これを防ぐために _
を前後に付与しています。もちろん、これは一つの実装例ですので、もっとよい形式がありえるなら、それでも構いません。
登録は ga_communicator_placeholders
フィルターフックを利用します。
add_filter( 'ga_communicator_placeholders', function( $placeholders ) {
$placeholders[] = [
'name' => 'category_ids',
'description' => 'CSV list of category ids.',
'callback' => function() {
if ( ! is_singular() ) {
return '';
}
$terms = get_the_category( get_queried_object_id() );
if ( ! $terms || is_wp_error( $terms ) ) {
return '';
}
return implode( ',', array_map( function( $term ) {
return sprintf( '_%d_', $term->term_id );
}, $terms ) );
},
];
return $placeholders;
} );
設定 > Googleアナリティクス設定 > 追加のスクリプト
で、次のように設定してください。
ga('set', 'dimension2', %category_ids%);
これですべてのページビューにカテゴリーのCSVが紐づけられます。
カテゴリー別のページビューランキングを取得するには、ディメンションにカテゴリーIDを、メトリクスにPVとパスを指定します。
$authors = Kunoichi\GaCommunicator::get_instance()->get_report( [
'dimensions' => [
[
'name' => 'ga:dimension2',
],
[
'name' => 'ga:pagePath',
],
],
'dimensionFilterClauses' => [
[
'operator' => 'AND',
'filters' => [
[
'dimensionName' => 'ga:dimension2',
'operator' => 'REGEXP',
'expressions' => [
'_1_', // カテゴリーID1を含むもののみ
],
],
],
],
];
] );
上記により、カテゴリーID1に属する投稿のみのランキングが作成できます。 注意点としては、カテゴリーを途中で変更したときに重複したデータが作成されうることです。