こんにちは。今回は、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ダウンロードの正確な追跡が可能になり、マーケティング施策の効果測定や、コンテンツの人気度分析に活用できるようになりました。
皆さんのプロジェクトでも、同様の課題がある場合は、ぜひこの方法を試してみてください。