こんにちは。今回は、WordPressサイトでPDFのダウンロードを追跡する方法について、実際の実装経験をもとにご紹介します。Google Analytics 4(GA4)とサーバーサイドトラッキングを組み合わせることで、精度の高い追跡を実現しました。

 

## 背景

 

WordPressサイト内にあるPDFファイルのダウンロード数を正確に把握したいというニーズがありました。通常のクライアントサイドのトラッキングでは限界があるため、サーバーサイドでの実装を選択しました。

 

## 実装手順

### 1. GA4の設定

 

- 測定ID(GA4): G-1****23***
- API シークレット: track_pdf を作成し、安全に保管

 

### 2. サーバー環境の確認

 

- スクリプトの絶対パス:/home/users/2/mysite/web/mysite.jp/child/
- PDFファイルの配置:同ディレクトリ内の assets/pdfフォルダ

 

### 3. ログ記録の準備

 

- logsフォルダを作成:/home/users/2/mysite/web/mysite.jp/child/logs/
- 空のpdf_access.logファイルを作成
- logsフォルダのパーミッション:755
- pdf_access.logファイルのパーミッション:644
- logsフォルダ内に.htaccessファイルを作成し、Webアクセスを制限

Order deny,allow
Deny from all

 

### 4. トラッキングスクリプトの作成

 

`track_pdf_pamphlet.php`と`track_pdf_plans.php`を作成し、以下の機能を実装:

 

- PDFファイルへのアクセスをログに記録
- GA4にイベントを送信(pdf_downloadとpdf_download_pamphlet/plans)
- PDFファイルの出力
- エラーハンドリング

<?php //(track_pdf_pamphlet.php)
//PDFファイルへのパス
$pdf_path = '/home/users/2/mysite/web/mysite.jp/child/pdf/pamphlet.pdf';
$pdf_url = 'https://mysite.jp/child/pdf/pamphlet.pdf';

//アクセスログの記録
$log_message = date('Y-m-d H:i:s') . ' - ' . $_SERVER['REMOTE_ADDR'] . ' - ' . $pdf_url . "\n";
file_put_contents('/home/users/2/mysite/web/mysite.jp/child/logs/pdf_access.log', $log_message, FILE_APPEND);

//Google アナリティクスへのイベント送信(サーバーサイド測定プロトコルを使用)
$measurement_id = 'G-1****23***'; //あなたのGA4測定ID
$api_secret = 'AB****Ac************Vz';
$client_id = $_SERVER['REMOTE_ADDR']; //IPアドレスをクライアントIDとして使用

$data = [
    'client_id' => $client_id,
    'events' => [
        [
            'name' => 'pdf_download',
            'params' => [
                'file_name' => basename($pdf_url),
                'pdf_type' => 'pamphlet'
            ]
        ],
        [
            'name' => 'pdf_download_pamphlet',
            'params' => [
                'file_name' => basename($pdf_url)
            ]
        ]
    ]
];

$postdata = json_encode($data);

$ch = curl_init('https://www.google-analytics.com/mp/collect?measurement_id=' . $measurement_id . '&api_secret=' . $api_secret);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

//PDFファイルの出力
header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename="' . basename($pdf_path) . '"');
readfile($pdf_path);


//エラーハンドリング
if (!file_exists($pdf_path)) {
    die('PDF file not found.');
}
if (!is_writable('/home/users/2/mysite/web/mysite.jp/child/logs/pdf_access.log')) {
    error_log('Cannot write to log file');
}

 

### 5. .htaccessの設定

 

WordPressのルートディレクトリ(/child/)の.htaccessに以下を追加:

 


  RewriteRule ^pdf/pamphlet\.pdf$ track_pdf_pamphlet.php [L]
  RewriteRule ^pdf/plans\.pdf$ track_pdf_plans.php [L]

 

## 結果

 

実装後、Google アナリティクスでイベントを確認したところ、以下のイベントが正常に記録されていました:

 

- pdf_download
- pdf_download_pamphlet
- pdf_download_plans

 

これにより、PDFのダウンロード数を正確に把握できるようになりました。

 

## 注意点と学んだこと

 

1. **パーミッション管理**:ログファイルのパーミッション設定は忘れがちなので、チェックリストに入れるなどの工夫が必要です。

 

2. **セキュリティ**:ログファイルへのアクセス制限は重要です。.htaccessでの制限を忘れずに。

 

3. **エラーハンドリング**:PDFファイルの存在確認やログ書き込み権限のチェックは、トラブルシューティングに役立ちます。

 

4. **プライバシー考慮**:現在はIPアドレスをクライアントIDとして使用していますが、将来的にはより匿名性の高い方法を検討する余地があります。

 

## 今後の展望

 

1. 定期的なログ分析とバックアップの実施
2. トラフィック増加に備えたパフォーマンス最適化
3. エラー通知システムの導入検討

 

この実装により、PDFダウンロードの正確な追跡が可能になり、マーケティング施策の効果測定や、コンテンツの人気度分析に活用できるようになりました。

 

皆さんのプロジェクトでも、同様の課題がある場合は、ぜひこの方法を試してみてください。