Як працює вкладка Performance, звідки беруться дані Lighthouse і Core Web Vitals, чому інколи "немає даних" хоча сайт справді працює, як часто оновлюється і що робити з кнопкою Refresh.
Performance показує швидкість і якість завантаження ваших сторінок очима Google. Це той самий сигнал який Google використовує для ранжування з 2021 року (Page Experience update).
Ми тягнемо дані з двох офіційних Google API:
Скан працює у двох режимах: щоденний (top-20 by clicks) о 08:00 UTC і раз на тиждень deep scan (top-100 by clicks) о 03:00 UTC. Кожен сайт отримує один deep scan на тиждень + 6 щоденних. Скануємо у двох стратегіях — Mobile і Desktop. Зберігаємо історію, не перетираємо.
Це найважливіше що треба зрозуміти про Performance. Lab і Field — це не "одне правильне, інше неправильне", вони відповідають на різні питання:
| Аспект | Lab (Lighthouse) | Field (CrUX) |
|---|---|---|
| Хто вимірює | Бот Google у датацентрі | Реальні юзери у Chrome (опт-ін) |
| На якому пристрої | Стандартний емулятор (Moto G4, 4G) | Реальні пристрої / мережі юзерів |
| Скільки даних | Один прогін на момент сканування | Агреговано за 28 днів |
| Що відповідає | "Як швидко вона працює в ідеалі" | "Як її бачать ваші реальні юзери" |
| Використовується Google для ранжування | ❌ Ні | ✅ Так — це той самий сигнал |
| Завжди є | ✅ Так — Google прогоняє по запиту | ❌ Тільки для сайтів з достатнім Chrome-трафіком |
Зверху сторінки — три ряди карток. Перші 4 — Lighthouse scores (0-100), решта 5 — Core Web Vitals. На hover показується звідки число (real users / synthetic).
Кольори: ≥90 зелений 50-89 жовтий <50 червоний
| Метрика | Що означає | Good | Needs Improvement | Poor |
|---|---|---|---|---|
| LCP Largest Contentful Paint | Час до появи найбільшого елементу на екрані | < 2.5 с | 2.5-4.0 с | > 4.0 с |
| INP Interaction to Next Paint | Затримка відповіді сайту на клік/тап | < 200 мс | 200-500 мс | > 500 мс |
| CLS Cumulative Layout Shift | Скільки сторінка "стрибає" поки вантажиться | < 0.1 | 0.1-0.25 | > 0.25 |
| FCP First Contentful Paint | Час до появи будь-чого крім білого екрану | < 1.8 с | 1.8-3.0 с | > 3.0 с |
| TTFB Time to First Byte | Час до першого байту від сервера | < 0.8 с | 0.8-1.8 с | > 1.8 с |
Числа на картках — це field (real users з CrUX) якщо доступно, інакше lab fallback. На hover видно джерело.
Нижче 9 KPI-карток є окремий блок Core Web Vitals з 4 картками: Passes CWV, LCP, INP, CLS.
Це саме той сигнал який Google використовує для ранжування, тому тут показуємо не середнє значення, а офіційну Google-логіку через гістограму:
Це стек-бар чарт під CWV-картками. Кожен бар — один тиждень за останні 25 тижнів. Висота стеку — 100% page-loads за цей тиждень, поділені на Good / NI / Poor (зелений / жовтий / червоний).
Пунктирна горизонтальна лінія на 75% — це Google's pass-cutoff. Якщо зелена частина бару доходить до неї — сайт passing CWV у цьому тижні.
Зверху селектор LCP / INP / CLS щоб перемикатись між метриками.
Нижче — line chart з історичними p75-значеннями Core Web Vitals за 25 тижнів. P75 означає 75-й перцентиль: те значення яке мали 75% користувачів або кращих.
Чому p75, а не середнє: Google свідомо не використовує середнє, бо воно "розмазується" — пара швидких користувачів може приховати проблеми у решти. P75 показує: "найгірший досвід серед 75% ваших юзерів". Якщо p75 = 2.4с — це значить що принаймні три чверті ваших юзерів бачать LCP за 2.4с або краще.
Внизу сторінки — таблиця сторінок які ми сканували, відсортована від найгіршої до найкращої по Performance score. Це action list — куди дивитись першочергово.
Ще нижче — "Top issues across pages": агреговані Lighthouse audits, які провалились на кількох сторінках. Це real action list для дев-команди: "5 сторінок з noindex tag", "8 сторінок мають Forced reflow", "1.2 MB unused JS на 6 сторінках".
Кожен audit — клікабельний, розкривається з конкретним рекомендованим фіксом від Google + список сторінок де він провалився.
Розклад автоматичного сканування (UTC):
| Час | Що відбувається |
|---|---|
| schedule 03:00 UTC | Weekly deep scan — top-100 by clicks. Запускається тільки для 1/7 сайтів кожного дня (день фіксований для сайту через хеш URL). За тиждень кожен сайт отримає один deep scan. |
| schedule 08:00 UTC | Daily scan — top-20 by clicks. Скіпає сайти що отримали скан за останні 20 годин (тобто включно з тими, кого зачепило ранковий deep scan). |
| timer ~3-30 хв на сайт | 20 сторінок = ~3-6 хв, 100 сторінок = ~15-30 хв. Працюють 3 PSI-воркери паралельно, не блокують GSC-syncs. |
Якщо потрібен скан раніше — натисніть Refresh now на сторінці Performance. Що відбудеться:
Інколи 9 KPI-карток зверху заповнені, але блок Core Web Vitals + Distribution + 25-week trend — порожні. Це не баг. Це означає що Chrome UX Report від Google не має статистики для цього сайту.
CrUX публікує дані тільки якщо у нього достатньо samples від реальних Chrome-користувачів. Google не публікує точне число, але практично — приблизно мінімум кілька тисяч унікальних Chrome-юзерів на місяць на origin. Якщо сайт:
...то CrUX повертає chrome ux report data not found для всіх URL цього сайту, навіть на origin-рівні.
Відкрийте pagespeed.web.dev, вставте URL сайту. Якщо там показано "Real-user experience data isn't available for this URL/origin" — це підтвердження, проблема не у нас, а у відсутності CrUX-покриття.
Якщо різниця 1-3 поінти — це норма. Lighthouse є varianца у кожному прогоні (мережа, CPU load на тестовому сервері Google). Ми зберігаємо історію, тому ви бачите тренд за тиждень — він стабільніший за один прогін. Якщо різниця 20+ поінтів — можливо у нас застарілий run, натисніть Refresh now.
Top-N за clicks у Google пошуку за останні 28 днів (з impressions як tiebreaker для сторінок з 0 кліків). Daily — top-20, weekly deep — top-100. Кліки краще відображають business-critical сторінки ніж raw impressions: реальні юзери туди прийшли і ви знаєте що сторінка важлива. Якщо сайт новий і трафіку немає — fallback на homepage. Конкретний список видно у per-URL таблиці внизу.
Поки що — ніяк, селектація автоматична. На roadmap є "custom URLs to monitor" — налаштування вручну.
Це баланс між свіжістю і квотою. PSI-квота Google = 25 000 викликів/день безкоштовно. У нас ~340 сайтів. Якщо робити 100 сторінок щоденно для всіх — це 68 000 викликів/день, більше 2.5× понад квоту. Тому:
Field-data (CrUX) Google і так оновлює лише раз на тиждень — тому daily частіше за weekly не дає інформативного приросту для real-user metrics.
День deep scan фіксований для кожного сайту через хеш його URL (детермінований). Не залежить від того коли ви додали сайт. Конкретний день видно непрямо — у per-URL таблиці внизу буде раптом 100 сторінок замість 20 у певний день тижня.
Ні. CrUX dataset — це не sitemap, ви не можете "субмітити" туди свій сайт. Google автоматично включає сайт коли у нього достатньо опт-ін Chrome-юзерів за останні 28 днів. Це пасивний dataset.
Можливо. INP вимірюється тільки коли у юзера є хоч одна взаємодія (клік, тап, тип). Якщо ваш сайт лендинг без CTA-кнопок або юзери приходять і йдуть — INP буде null/0. Це не означає ідеал, це означає "немає даних".
Звичайна Lighthouse varianца. Google запускає тест на shared compute — CPU contention впливає. Тому довіряйте тренду за тиждень, а не одному значенню.
GSC Core Web Vitals report агрегує по групах URL ("Good URLs", "Poor URLs") — корисно для понимання обсягу, але деталей мало. Ми показуємо те саме per-page, плюс per-week historical trend на 25 тижнів, плюс lab-аналітику. По суті — те саме джерело (CrUX), просто з більшою деталізацією.
Деталі по архітектурі — у файлі SYNC.md репозиторію. Технічні питання — через сторінку Changelog.