Lighthouse — это инструмент для аудита веб-страниц, предоставляющий метрики производительности, доступности, SEO и прогрессивных веб-приложений (PWA). Интеграция с системами аналитики позволяет собирать детализированные данные о производительности страниц в реальном времени, объединять их с пользовательскими метриками и автоматизировать процесс мониторинга качества сайтов.
Для интеграции с аналитикой чаще всего используется Node.js API Lighthouse. Базовый пример запуска аудита страницы:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
async function runLighthouse(url) {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
const options = {logLevel: 'info', output: 'json', port: chrome.port};
const runnerResult = await lighthouse(url, options);
const reportJson = runnerResult.report;
await chrome.kill();
return JSON.parse(reportJson);
}
Ключевое здесь — получение runnerResult.report, которое
содержит все метрики Lighthouse в формате JSON, пригодном для передачи в
аналитические системы.
Отчёт Lighthouse включает следующие важные разделы:
categories — категории аудита
(performance, accessibility, seo,
best-practices, pwa), каждая с оценкой от 0 до
1.audits — конкретные проверки с результатами, оценками и
дополнительными данными (например, numericValue для метрик
времени загрузки).timing — временные показатели запуска аудита и общего
времени обработки.fetchTime — отметка времени создания отчёта, которая
полезна для временных рядов в аналитике.Для передачи в систему аналитики часто выбирают метрики из
categories и ключевые numericValue из
audits, такие как First Contentful Paint
(FCP), Largest Contentful Paint (LCP),
Cumulative Layout Shift (CLS) и Time to
Interactive (TTI).
Для отправки данных в Google Analytics можно использовать Measurement Protocol:
const fetch = require('node-fetch');
async function sendToGA(metrics, trackingId, clientId) {
const payload = {
v: '1',
tid: trackingId,
cid: clientId,
t: 'event',
ec: 'Lighthouse',
ea: 'Page Metrics',
el: 'Performance Audit',
ev: Math.round(metrics.performance * 100)
};
const queryString = Object.entries(payload).map(([k,v]) => `${k}=${v}`).join('&');
await fetch(`https://www.google-analytics.com/collect?${queryString}`, { method: 'POST' });
}
Здесь важно корректно масштабировать показатели (например, умножать
оценки от 0 до 1 на 100 для передачи в ev).
Для крупных проектов полезно запускать Lighthouse автоматически через CI/CD:
Пример выгрузки в базу:
const { Client } = require('pg');
async function saveMetricsToDB(metrics) {
const client = new Client({ connectionString: process.env.DATABASE_URL });
await client.connect();
const query = `
INS ERT IN TO lighthouse_metrics (fcp, lcp, cls, tti, audit_time)
VALUES ($1, $2, $3, $4, $5)
`;
await client.query(query, [
metrics.fcp,
metrics.lcp,
metrics.cls,
metrics.tti,
metrics.fetchTime
]);
await client.end();
}
Для более глубокой аналитики можно связывать метрики Lighthouse с пользовательскими тегами или идентификаторами сессий. Это позволяет:
Для этого можно добавлять в JSON отчёта дополнительные поля
userSegment или campaignId, а затем передавать
их в BI или системы аналитики вместе с метриками.
Интеграция Lighthouse с системами аналитики превращает локальный аудит страниц в инструмент постоянного мониторинга производительности и качества, обеспечивая своевременное обнаружение проблем и возможность их коррекции на ранних этапах разработки и эксплуатации сайта.