HOME / BLOG
BLOG

WordPressでGoogle Analytics Data APIを使ってPVを取得する方法

デフォルト画像

WordPressで運営ダッシュボードを作るなら、Google Analytics Data APIからPVを取得できると一気に実用度が上がります。管理画面に入らなくても、記事別のPVやセッションを自分のテーマ上で確認できるからです。

この記事では、GA4のData APIを使って、WordPressからページ別PVを取得する基本形を作ります。秘密鍵の置き場所、REST API化、キャッシュの考え方までまとめます。

全体の流れ

  1. Google CloudでAnalytics Data APIを有効化する
  2. サービスアカウントを作成し、GA4プロパティに閲覧権限を付与する
  3. WordPress側でGoogle公式PHPクライアントを読み込む
  4. runReportでpagePathごとのPVを取得する
  5. REST APIや管理画面カードに表示する

Composerでライブラリを入れる

テーマ直下に直接入れるより、子テーマまたは小さな自作プラグインにまとめるほうが管理しやすいです。

composer require google/analytics-data

認証情報を設定する

JSON鍵は絶対に公開ディレクトリやGit管理下へ置かないようにします。wp-content/uploads配下も避けてください。

// wp-config.php など、Git管理外・公開されない場所に置く
define('NINES_GA4_PROPERTY_ID', '123456789');
define('NINES_GA_CREDENTIALS', '/home/your-user/secure/ga-service-account.json');

PVを取得するPHP

GA4ではPV相当の指標としてscreenPageViewsを使います。pagePathで絞り込むと、特定記事やトップページの表示回数を取得できます。

<?php
use Google\Analytics\Data\V1beta\BetaAnalyticsDataClient;
use Google\Analytics\Data\V1beta\DateRange;
use Google\Analytics\Data\V1beta\Dimension;
use Google\Analytics\Data\V1beta\Metric;
use Google\Analytics\Data\V1beta\RunReportRequest;

function nines_get_ga_pageviews(string $path = '/', int $days = 28): array
{
    $client = new BetaAnalyticsDataClient([
        'credentials' => NINES_GA_CREDENTIALS,
    ]);

    $request = (new RunReportRequest())
        ->setProperty('properties/' . NINES_GA4_PROPERTY_ID)
        ->setDateRanges([
            new DateRange([
                'start_date' => $days . 'daysAgo',
                'end_date' => 'today',
            ]),
        ])
        ->setDimensions([
            new Dimension(['name' => 'pagePath']),
        ])
        ->setMetrics([
            new Metric(['name' => 'screenPageViews']),
            new Metric(['name' => 'sessions']),
            new Metric(['name' => 'activeUsers']),
        ])
        ->setDimensionFilter([
            'filter' => [
                'field_name' => 'pagePath',
                'string_filter' => [
                    'match_type' => 'EXACT',
                    'value' => $path,
                ],
            ],
        ]);

    $response = $client->runReport($request);
    $row = $response->getRows()[0] ?? null;

    if (!$row) {
        return [
            'pageviews' => 0,
            'sessions' => 0,
            'users' => 0,
        ];
    }

    $values = $row->getMetricValues();

    return [
        'pageviews' => (int) $values[0]->getValue(),
        'sessions' => (int) $values[1]->getValue(),
        'users' => (int) $values[2]->getValue(),
    ];
}

WordPress REST APIとして返す

フロント側のダッシュボードからfetchするなら、自作REST APIにしておくと扱いやすいです。管理者だけが見られるデータならpermission_callbackで権限を必ず確認します。

add_action('rest_api_init', function () {
    register_rest_route('nines/v1', '/analytics/pageviews', [
        'methods' => 'GET',
        'callback' => function (WP_REST_Request $request) {
            $path = sanitize_text_field($request->get_param('path') ?: '/');
            $days = min(90, max(1, (int) ($request->get_param('days') ?: 28)));

            return rest_ensure_response(nines_get_ga_pageviews($path, $days));
        },
        'permission_callback' => function () {
            return current_user_can('edit_posts');
        },
    ]);
});

キャッシュを入れる

APIをページ表示のたびに叩くと遅くなります。transientで30分から1時間ほどキャッシュするのが現実的です。記事別PVを毎秒リアルタイムに見る必要はほとんどありません。

よくある失敗

  • GA4のプロパティIDではなく測定IDを入れてしまう
  • サービスアカウントを作っただけで、GA4側に権限追加していない
  • JSON鍵を公開ディレクトリに置いてしまう
  • APIの結果をキャッシュせず、表示が遅くなる

参考資料

まとめ

Analytics Data APIを使うと、WordPressの外にあるアクセス解析データを自分のテーマへ持ち込めます。まずはページ別PVだけ取得し、次に検索流入、人気記事、改善候補の表示へ広げていくのがおすすめです。