Quando la tua agenzia acquisisce nuovi clienti, mantenere alte le prestazioni di tutti i siti che gestisci può diventare una sfida. Plugin mal codificati, immagini non ottimizzate e script di terze parti possono rallentare i siti dei clienti e abbassare gradualmente i punteggi di PageSpeed Insights (PSI).

Invece di controllare manualmente ogni sito WordPress, puoi automatizzare il monitoraggio delle prestazioni di tutti i tuoi siti e concentrarti sull’analisi delle anomalie solo quando si presentano, risparmiando al tuo team ore di lavoro ogni mese grazie a controlli automatici semplici ed efficaci.

In questo articolo vedremo come automatizzare il flusso di lavoro per il monitoraggio delle prestazioni di tutti i siti WordPress della tua agenzia ospitati da Kinsta utilizzando sia l’API di Kinsta che l’API di Google PageSpeed Insights. Come ultimo passo, scopriremo anche come condividere questi dati con il tuo team in tempo reale utilizzando i webhook di Slack e ad automatizzare il processo con un cron job.

Interessante, vero? Iniziamo.

Panoramica del flusso di lavoro: da Kinsta a PageSpeed Insights a Slack

Lo script collega tre API: Kinsta, Google PageSpeed Insights e Slack, per automatizzare il monitoraggio delle prestazioni del sito.

Inizia interrogando l’API di Kinsta per recuperare i domini e gli ambienti del sito web. In questo modo l’elenco dei domini rimane aggiornato man mano che si aggiungono siti di clienti.

Poi, per ogni sito restituito dall’API di Kinsta, lo script utilizza l’API di Google PSI per estrarre le metriche chiave: Punteggio di performance (0-100), First Contentful Paint (FCP) e Largest Contentful Paint (LCP).

Infine, lo script invia queste metriche, il nome del sito, i tre punteggi e un link a PageSpeed Insights a un canale Slack designato.

Impostazione degli strumenti

Prima di procedere con la codifica, genera due chiavi API ed effettua una rapida configurazione.

Utilizzo dell’API di Kinsta: verificare i permessi e generare la chiave API

L’API di Kinsta richiede una chiave API generata da un account con permessi specifici. Nel nostro esempio, dovrebbe essere il proprietario dell’azienda o un amministratore dell’azienda.

Per creare una chiave API Kinsta, accedi a MyKinsta e segui questi passaggi:

  • Vai alla pagina delle chiavi API (Il tuo nome > Impostazioni Azienda > Chiavi API).
  • Clicca su Crea chiave API.
  • Imposta la scadenza e assegna alla chiave un nome univoco.
  • Clicca su Genera.
Creare una chiave API in MyKinsta.
Creare una chiave API in MyKinsta.

Nota che questo è l’unico momento in cui potrai vedere la tua chiave API. Copiala e conservala in un luogo sicuro.

La seconda cosa di cui avrai bisogno è il tuo ID azienda MyKinsta. Puoi trovarlo facilmente nella query string dell’URL della tua dashboard MyKinsta (cerca il parametro idCompany ).

Con questi dati, puoi accedere all’API di Kinsta e utilizzare cURL per richiedere un elenco dei siti aziendali. Apri il tuo strumento a riga di comando preferito e inserisci il seguente comando, sostituendo <YOUR_COMPANY_ID> e <YOUR_API_KEY> con le tue credenziali.

curl -X GET "https://api.kinsta.com/v2/sites?company=<YOUR_COMPANY_ID>" 
	 -H "Authorization: Bearer <YOUR_API_KEY>"

Se l’ID dell’azienda e la chiave API sono corretti, dovresti ricevere una risposta JSON strutturata come segue:

{
	"company": {
		"sites": [
			{
				"id": "YOUR_SITE_ID",
				"name": "my-wordpress-website",
				"display_name": "My WordPress website",
				"status": "live",
				"site_labels": []
			}
		]
	}
}

Come puoi vedere, a questa risposta manca un’informazione essenziale: l’URL del sito web. Per recuperare il dominio primario di ogni ambiente, dovrai aggiungere il parametro include_environments=true alla stringa di query. Con questo parametro, l’API restituisce anche dati dettagliati per ogni ambiente (live e staging), compreso il dominio primario. Ecco una risposta generica:

{
	"company": {
		"sites": [
			{
				"id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
				"name": "firstsite",
				"display_name": "First site",
				"status": "live",
				"siteLabels": [
					{
						"id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
						"name": "Do not remove"
					}
				],
				"environments": [
					{
						"id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
						"name": "live",
						"display_name": "Live",
						"is_blocked": false,
						"id_edge_cache": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
						"cdn_cache_id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
						"is_opt_out_from_automatic_php_update": false,
						"web_root": "/release_v1",
						"image_optimization_type": "lossy",
						"is_additional_sftp_accounts_enabled": false,
						"is_premium": false,
						"wordpress_version": "6.3.1",
						"domains": [ ... ],
						"primaryDomain": {
							"id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
							"name": "example.com",
							"site_id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
							"is_active": true,
							"type": "live"
						},
						"ssh_connection": { ... }
						},
						"container_info": { ... }
					}
				]
			}
		]
	}
}

Successivamente, dovrai generare un’applicazione Google PageSpeed Insights e una chiave API.

Generare una chiave API per Google PageSpeed Insights

Il passo successivo consiste nel creare una chiave API per accedere al servizio Google PageSpeed Insights. Accedi a Google Cloud Console e segui i passaggi qui sotto.

Passo 1: crea un nuovo progetto o aprine uno esistente. Per questo articolo abbiamo creato un nuovo progetto di monitoraggio delle prestazioni.

Pagina del progetto Monitoraggio delle prestazioni nella console di Google Cloud
Pagina del progetto Monitoraggio delle prestazioni nella console di Google Cloud

Passo 2: vai su API e servizi > Libreria, poi cerca PageSpeed Insights API in fondo alla pagina e clicca sul pulsante.

Libreria Google Cloud API
Selezionare PageSpeed Insights API nella Libreria API di Google Cloud

Passo 3: nella pagina successiva, clicca su Abilita.

Abilitare l'API di PageSpeed Insights
Abilitare l’API di PageSpeed Insights

Passo 4: clicca su Crea credenziali nella scheda Credenziali.

Creare credenziali API PSI
Creare credenziali API PSI

Fase 5: per una maggiore sicurezza, ti consigliamo di impostare delle restrizioni per la chiave appena creata, selezionando solo l’API di PageSpeed Insights.

Impostare le restrizioni per PageSpeed Insights API
Impostare le restrizioni per PageSpeed Insights API

La tua chiave API di PageSpeed Insights è ora pronta per essere utilizzata. È necessario configurare un ultimo servizio. Devi creare una nuova app Slack.

Creare un’app Slack e configurare il Webhook in entrata

Per inviare messaggi a un canale Slack specifico, devi creare un’applicazione Slack. Segui questi passaggi:

Passo 1. Se utilizzi attivamente Slack per collaborare con il tuo team, allora hai uno spazio di lavoro attivo. In caso contrario, consulta la documentazione di Slack per crearne uno. Per questo esempio, supporremo che tu abbia un’area di lavoro My Company già esistente.

Passo 2. Vai alla dashboard di Slack API e clicca su Create an app (o Create a new app se non è la tua prima app).

Dashboard Slack API
Creare la prima app Slack.

Passo 3. Ti verrà chiesto di configurare gli ambiti e le impostazioni della tua app. Seleziona From Scratch.

Creare un'app Slack da zero.
Creare un’app Slack da zero.

Passo 4. Successivamente, dai un nome alla tua applicazione (ad esempio, Performance Bot) e seleziona il tuo spazio di lavoro.

Scegliere il nome dell'app e selezionare uno spazio di lavoro
Scegliere il nome dell’app e selezionare uno spazio di lavoro

Passo 5. Seleziona Incoming Webhook dalla barra laterale di sinistra e clicca su On. Successivamente, clicca su Add new webhook in fondo alla pagina.

Attivare i Webhook in entrata
Attivare i Webhook in entrata

Passo 6. Copia l’URL del Webhook e salvalo per riferimenti futuri.

URL Webhook per lo spazio di lavoro
URL Webhook per lo spazio di lavoro

Ora hai tutto ciò che serve per creare uno script che permetta di condividere automaticamente le metriche di performance del sito web con il tuo team su Slack. È ora di occuparci del codice.

Uno script PHP per automatizzare il monitoraggio delle prestazioni

Il passo successivo consiste nel creare uno script che comunichi con i tre servizi sopra citati per monitorare automaticamente le prestazioni di tutti i siti dei clienti dell’agenzia ospitati su Kinsta.

Passo 1: configurazione dello script

Nel tuo editor di codice preferito, crea un nuovo file .php e aggiungi il seguente codice:

<?php

$kinsta_api_key	 = 'YOUR_KINSTA_API_KEY';
$kinsta_company_id  = 'YOUR_COMPANY_UUID';
$google_api_key	 = 'YOUR_GOOGLE_API_KEY';
$slack_webhook_url  = 'YOUR_SLACK_WEBHOOK_URL';

echo "--- STARTING PERFORMANCE MONITORING ---n";

Sostituisci i segnaposto con i dati reali che hai recuperato in precedenza.

Passo 2: utilizzare l’API di Kinsta per recuperare l’elenco dei siti aziendali

Per ottenere l’elenco dei siti del tuo account Kinsta, devi utilizzare Kinsta API v2 e l’endpoint /sites.

Ecco come accedere all’API tramite cURL:

// 1. Fetch the list of sites from Kinsta
$url_kinsta = "https://api.kinsta.com/v2/sites?company=" . $kinsta_company_id . "&include_environments=true";
$ch = curl_init($url_kinsta);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer ' . $kinsta_api_key]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res_kinsta = curl_exec($ch);
$data_kinsta = json_decode($res_kinsta, true);
curl_close($ch);

$sites = $data_kinsta['company']['sites'] ?? [];
echo "Found " . count($sites) . " sites to analyze.n";

Nota che abbiamo utilizzato il parametro di query includes_environments=true per recuperare i dettagli dell’ambiente (live e staging).

Successivamente, interroga l’API di Google PSI e invia i dati all’app Slack.

Metriche di PageSpeed Insights e notifiche Slack

Ora devi inviare l’URL di ogni sito recuperato all’API di PageSpeed Insights. Quando chiami il servizio, PageSpeed Insights esegue un controllo delle prestazioni e restituisce un oggetto contenente le metriche delle prestazioni. Il tuo script invierà questi dati all’API di Slack, che genererà i messaggi corrispondenti.

Ecco il codice da aggiungere allo script:

foreach ($sites as $site) {
	$site_label = $site['display_name'];
	$primary_domain = "";

	// 2. Search the downloaded data directly for the live environment
	$environments = $site['environments'] ?? [];

	foreach ($environments as $env) {
		if ($env['name'] === 'live') {
			$raw_domain = $env['primaryDomain'] ?? $env['primary_domain'] ?? null;
			$primary_domain = is_array($raw_domain) ? ($raw_domain['name'] ?? "") : $raw_domain;
			break;
		}
	}

	if (empty($primary_domain)) {
		echo "Skipping $site_label (No Live domain found).n";
		continue;
	}

	echo "Analyzing $primary_domain... ";

	// 3. PageSpeed analysis
	$psi_url = "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://" . urlencode($primary_domain) . "&key=$google_api_key&category=performance&strategy=mobile";
	
	$res_psi = @file_get_contents($psi_url);
	if ($res_psi === false) {
		echo "PSI Error.n";
		continue;
	}

	$data_psi = json_decode($res_psi, true);

	$score = ($data_psi['lighthouseResult']['categories']['performance']['score'] ?? 0) * 100;
	$fcp   = $data_psi['lighthouseResult']['audits']['first-contentful-paint']['displayValue'] ?? 'N/A';
	$lcp   = $data_psi['lighthouseResult']['audits']['largest-contentful-paint']['displayValue'] ?? 'N/A';

	// 4. Send rich notification to Slack
	$report_link = "https://pagespeed.web.dev/analysis?url=https://" . $primary_domain . "&strategy=mobile";
	
	$slack_msg = [
		"text" => "🚀 *Performance Report: $site_label*nURL: `https://$primary_domain` nn" .
			"• *Score:* `$score` n" .
			"• *FCP:* $fcp n" .
			"• *LCP:* $lcpnn" .
			"[ <$report_link|View Full Report> ]"
	];

	$ch = curl_init($slack_webhook_url);
	curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($slack_msg));
	curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_exec($ch);
	curl_close($ch);

	echo "Done.n";
}

echo "--- MONITORING COMPLETED ---n";

In breve, questo codice itera sugli elementi dell’array $sites. Per ogni elemento dell’array, recupera Core Web Vitals e invia un messaggio a Slack.

Testare lo script

Puoi collegarti al tuo container utilizzando SSH ed eseguire lo script PHP direttamente dal terminale. In questo modo puoi risolvere rapidamente i problemi dello script e ricevere i risultati delle prestazioni in Slack in tempo reale.

In MyKinsta, vai su Siti WordPress > Nome del sito. Scorri verso il basso fino alla sezione Utente primario SFTP/SSH e trova il campo del comando terminale SSH. Dovrebbe avere un aspetto simile a questo:

ssh wordpress@host-name -p port-number

Copia il comando del terminale SSH e incollalo nel terminale. Ti verrà richiesto di inserire la password fornita nella stessa sezione. Premi Invio e sarai connesso al tuo ambiente container.

Connessione SSH a Kinsta
Connessione SSH a Kinsta

Ora puoi testare il codice. Dalla riga di comando, naviga nella cartella in cui hai caricato lo script. In questo esempio, abbiamo utilizzato la cartella public:

cd public

Quindi, utilizza il seguente comando per eseguire lo script:

php performance-monitor.php

Lo script emette un messaggio per ogni azione che esegue. Una volta terminata l’esecuzione, dovresti vedere un elenco di messaggi simile al seguente:

--- STARTING FULL PERFORMANCE MONITORING ---
Found 5 sites to analyze.
Analyzing site1.kinsta.cloud... Done.
Analyzing site2.kinsta.cloud... Done.
Analyzing site3.kinsta.cloud... Done.
Analyzing example.com... Done.
Analyzing site5.kinsta.cloud... Done.
--- MONITORING COMPLETED ---

Se PSI non risponde tempestivamente, lo script passa al sito successivo. In questo caso, vedrai un messaggio simile a questo:

--- STARTING FULL PERFORMANCE MONITORING ---
Found 5 sites to analyze.
Analyzing site1.kinsta.cloud... Done.
Analyzing site2.kinsta.cloud... Done.
Analyzing site3.kinsta.cloud... Done.
Analyzing example.com... PSI Error.
Analyzing site5.kinsta.cloud... Done.
--- MONITORING COMPLETED ---

Mentre lo script elabora le risposte di Google PSI, invia un messaggio al tuo canale Slack. Per ogni sito analizzato con successo da PSI, dovresti vedere un messaggio Slack simile al seguente:

Rapporto automatico sulle prestazioni su Slack
Rapporto automatico sulle prestazioni su Slack

Fantastico. Hai appena creato il tuo sistema di monitoraggio automatico.

Ora potresti volerlo adattare alle tue esigenze specifiche. Ad esempio, se gestisci centinaia di siti di clienti, inviare un messaggio Slack per ogni sito potrebbe essere inefficiente.

Tuttavia, potresti impostare una condizione che verifichi il punteggio complessivo del sito e invii un messaggio al canale Slack solo se il valore restituito dall’API PSI è inferiore a una determinata soglia (ad esempio, 90). Il codice seguente potrebbe fare al caso tuo:

$threshold = 90;

// 4. Send rich notification to Slack
// The alert is triggered only if the current score is strictly lower than our limit.
if ($score < $threshold) {
	echo "Score below threshold. Sending Slack alert... ";

	$report_link = "https://pagespeed.web.dev/analysis?url=https://" . $primary_domain . "&strategy=mobile";

	// Prepare the Slack message
	$slack_msg = [
		"text" => "⚠️ *Performance Alert: $site_label*nThe site score has dropped below the threshold of *$threshold*!nn" .
			"• *Score:* `$score` n" .
			"• *FCP:* $fcp n" .
			"• *LCP:* $lcpnn" .
			"[ <$report_link|View Full Audit Report> ]"
	];

	// Execute the CURL request to the Slack Webhook
	$ch = curl_init($slack_webhook_url);
	curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($slack_msg));
	curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_exec($ch);
	curl_close($ch);

	echo "Done.n";
} else {
	echo "Score is optimal ($score). No alert sent.n";
}

Aggiorna il tuo script, salva il file e caricalo di nuovo. Quindi, connettiti al server tramite SSH, naviga nella cartella appropriata ed esegui nuovamente il seguente comando:

php performance-monitor.php

Se hai scelto un nome diverso per il tuo script, modifica il comando di conseguenza.

A questo punto il terminale dovrebbe mostrare una sequenza di messaggi simile a quella che segue:

--- STARTING FULL PERFORMANCE MONITORING ---
Found 5 sites to analyze.
Analyzing site1.kinsta.cloud... Score is optimal (100). No alert sent.
Analyzing site2.kinsta.cloud... Score is optimal (95). No alert sent.
Analyzing site3.kinsta.cloud... Score is optimal (100). No alert sent.
Analyzing example.com... Score below threshold. Sending Slack alert... Done.
Analyzing site5.kinsta.cloud... Score below threshold. Sending Slack alert... Done.
--- MONITORING COMPLETED ---

In Slack, riceverai un messaggio per ogni sito con un punteggio complessivo inferiore alla soglia di 90.

Un avviso automatico sulle prestazioni in Slack
Un avviso automatico sulle prestazioni in Slack

È fantastico, vero? Ma puoi ottimizzare ulteriormente il processo. Non ti piacerebbe risparmiare ancora più tempo eseguendo lo script automaticamente a intervalli prestabiliti senza dover accedere allo strumento a riga di comando?

Sì, hai indovinato. Hai bisogno di un cron job.

Automatizzare il processo con un cron job

Esistono diversi modi per impostare un cron job su Kinsta. Sebbene sia possibile farlo attraverso WordPress, gli utenti di Kinsta possono aggiungere cron job al server di ogni container del sito.

Per impostare un cron job su Kinsta, crea un comando cron e aggiungilo al file crontab del container tramite SSH.

Ad esempio, puoi utilizzare un comando come il seguente:

0 10 * * * /usr/bin/php /www/yoursite_123/public/your-script.php >> /www/yoursite_123/performance_monitor.log 2>&1

Ecco cosa fa questo comando:

  • 0 10 * * * imposta lo script da eseguire ogni giorno alle 10 del mattino.
  • /usr/bin/php è il percorso assoluto dell’interprete PHP sul server.
  • /www/yoursite_123/public/your-script.php è il percorso assoluto dello script. Assicurati di controllare il percorso e il nome effettivo dello script sul server.
  • L’operatore >> (reindirizzamento append) aggiunge nuovi dati alla fine del file specificato.
  • /www/yoursite_123/performance_monitor.log indica il file in cui verrà salvato tutto il testo stampato dallo script.
  • Il comando 2>&1 indica al server di indirizzare gli errori allo stesso file.

In questa sede non parleremo in dettaglio dei comandi cron. Puoi consultare la documentazione di The Open Group o utilizzare uno strumento crontab, come Crontab Generator o Cronitor.

Dopo aver creato il comando cron, devi aggiungerlo al container del sito. Puoi chiedere al nostro team di supporto di farlo per te o farlo tu tramite SSH. Se scegli quest’ultima soluzione, inizia digitando il seguente comando:

crontab -e

Ti verrà chiesto di selezionare un editor. Opta per “nano” se non sai quale scegliere.

Nell’editor, incolla il tuo comando alla fine del file. Salva il file e torna alla riga di comando. Dovresti vedere un messaggio che conferma che le modifiche sono state completate correttamente.

crontab installing new crontab

Ecco fatto. Ora lo script verrà eseguito a intervalli prestabiliti e invierà un messaggio al canale Slack di tua scelta con le metriche richieste per i siti dei tuoi clienti che hanno un rendimento insufficiente.

Scalare: cos’altro puoi automatizzare con l’API di Kinsta?

Lo script presentato in questo articolo può essere personalizzato e ampliato ulteriormente. Ad esempio, puoi integrare altri servizi, come Trello o Asana, esportare i dati o inviare ai clienti dei messaggi di posta elettronica periodici.

L’automatizzazione dei controlli sulle prestazioni dei siti dei tuoi clienti è solo l’inizio. L’integrazione dell’API di Kinsta con gli strumenti quotidiani del tuo team può trasformare le operazioni della tua agenzia eliminando le attività manuali di gestione e manutenzione dei siti, migliorando l’efficienza e riducendo i costi operativi. Inoltre, migliorerai la qualità del servizio, ridurrai i tempi di consegna e garantirai la migliore esperienza possibile ai tuoi clienti.

L’API di Kinsta permette di automatizzare diverse attività, tra cui la creazione di ambienti di staging, il passaggio selettivo delle modifiche dallo staging alla produzione, l’accesso ai log degli errori, la cancellazione della cache del sito, la gestione dei backup e altro ancora. Queste funzioni rendono la gestione dei siti WordPress facile e veloce, consentendoti di scalare in tutta tranquillità.

Che ne dici di portare la tua agenzia a un livello superiore? Esplora i nostri piani o contatta il nostro team di vendita per discutere delle tue esigenze specifiche.

Buona scalata!

Carlo Daniele Kinsta

Carlo è cultore appassionato di webdesign e front-end development. Gioca con WordPress da oltre 20 anni, anche in collaborazione con università ed enti educativi italiani ed europei. Su WordPress ha scritto centinaia di articoli e guide, pubblicati sia in siti web italiani e internazionali, che su riviste a stampa. Lo trovate su LinkedIn.