[Solved] Sending GA4 event from Server Side PHP not working – Php

by
Ali Hasan
composer-php google-analytics

Quick Fix: In PHP, ensure events is an array of objects with name and params properties. Set Content-type header to application/json and use json_encode() to encode the data instead of http_build_query(). Replace placeholder values with actual measurement ID and API secret key.

The Problem:

User is unable to send Google Analytics 4 (GA4) events from the server side using PHP. The code snippet in JavaScript works fine, but the PHP code snippet doesn’t send the event to GA4 and doesn’t return an error message either.

The Solutions:

Solution 1: Correcting PHP Server-Side GA4 Event Sending

The provided PHP code to send GA4 events from the server encounters several issues that prevent successful event transmission:

  1. Incorrect Event Format: The events array should be an array of objects, each containing name and params properties. It should be structured like this:
'events' => [
    ['name' => 'form_submission', 'params' => ['form_name' => '', 'is_lead' => '', 'submission_url' => '']]
]
  1. Incorrect Content-Type: The Content-type header should be set to application/json because the request body is in JSON format.

  2. Improper Data Encoding: The http_build_query() function, used to encode the data, is not suitable for JSON data. Use json_encode() instead.

Here’s the corrected PHP code:

$measurement_id = 'G-XXXXXXXXXX';
$api_secret = 'api_secret_key';
$url = "https://www.google-analytics.com/mp/collect?measurement_id=$measurement_id&api_secret=$api_secret";

$data = [
    'client_id' => '1552776741.1677766660', 
    'events' => [
        ['name' => 'form_submission', 
        'params' => [
            'form_name' => 'Send A Message 2', 
            'is_lead' => 'Non-Lead Submission', 
            'submission_url' => 'Unknown'
            ]
        ]
    ]
];

$options = [
    'http' => [
        'header'  => "Content-type: application/json",
        'method'  => 'POST',
        'content' => json_encode($data)
    ]
];
$context  = stream_context_create($options);
$resp = file_get_contents($url, false, $context);

// Handle response as needed

Ensure you replace G-XXXXXXXXXX with your actual measurement ID and api_secret_key with your API secret key.

Q&A

What mistakes are in the php code that prevents data from being sent to GA4?

The ‘events’ array should be wrapped in an object, the content-type header should be ‘application/json’ and data should be json_encoded.

Why is http_build_query is not suitable to encode the data?

It should be encoded as JSON instead. You can use json_encode().

Video Explanation:

The following video, titled "Google Analytics 4 Measurement Protocol || Send events to GA4 via ...", provides additional insights and in-depth exploration related to the topics discussed in this post.

Play video

Not set in Google Analytics 4. How to solve it? Analytics Mania ... How To set up GA4 Server Side in Google Tag Manager - Sgtm - GA4 set up.