Інтеграція Google PageSpeed Insights API для моніторингу швидкості сайту
PageSpeed Insights повертає два типи даних: лабораторні (Lighthouse, симульоване середовище) та полевих (Chrome UX Report, реальні користувачі). Обидва важливі, але по-різному. Лабораторні показують стан прямо сейчас — після деплоя, після додання нового скрипту. Полевих — реальний досвід користувачів за останні 28 днів. Мониторинг потрібен для обох.
Отримання ключа API та базовий запит
PSI API безплатний. Ключ створюється в Google Cloud Console → APIs & Services → Credentials. Без ключа ліміт — 400 запитів на день, з ключем — 25 000.
import requests
from typing import Literal
PSI_API_URL = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed'
def fetch_psi(
url: str,
api_key: str,
strategy: Literal['mobile', 'desktop'] = 'mobile',
) -> dict:
params = {
'url': url,
'key': api_key,
'strategy': strategy,
'category': ['performance', 'seo', 'accessibility', 'best-practices'],
}
resp = requests.get(PSI_API_URL, params=params, timeout=60)
resp.raise_for_status()
return resp.json()
Видобування Core Web Vitals
Структура ответа PSI багаторівнева. Полевих дані (CrUX) у loadingExperience, лабораторних — у lighthouseResult.audits.
Збереження результатів
Створіть PostgreSQL таблицю для зберігання лабораторних та полевих метрик у часі:
CREATE TABLE psi_results (
id SERIAL PRIMARY KEY,
url TEXT NOT NULL,
strategy VARCHAR(10) NOT NULL,
measured_at TIMESTAMP DEFAULT NOW(),
field_lcp_ms INTEGER,
lab_performance_score NUMERIC(4,2),
lab_lcp_ms INTEGER
);
Мониторинг списку сторінок
Для сайту з кількома пріоритетними сторінками (головна, топ-10 посадочних, чекаут) запуск за розписанням.
Алерти при деградації
Відстеження падіння Lighthouse score та переходу CWV з «хорошо» у «потребує покращення».
Важливі обмеження
PSI API запускає Lighthouse в хмарці Google, а не у вас. Результати варіюються 5–15% між запусками — це нормально. Для надійних показників краще запустити 3 вимірювання та взяти медіану. PSI не підтримує авторизовані сторінки — для мониторинга особистого кабінету, кошика після логіну використовуйте локальний Lighthouse через Node.js.
Запуск через cron
# Crontab: щодня о 6:00
0 6 * * * /usr/bin/python3 /opt/monitoring/psi_monitor.py
Результати агрегуються по тижнях — щоденний шум у лабораторних даних досить великий, недельний тренд набагато інформативніший.
Сроки
Скрипт сбору + PostgreSQL storage + email/Telegram алерти — 1–2 робочих дні. З Grafana-дашбордом, порівнянням до/після деплоя, інтеграцією в CI/CD pipeline — 3–4 дні.







