← Back to the blog

This post is not translated into English yet — you are reading the Ukrainian version.

Performance budget, який захищає SEO

Як перетворити SEO та Core Web Vitals з разового аудиту на перевірюваний контракт між продуктом, дизайном і frontend.

Performance budget із лімітами для завантаження, взаємодії та стабільності сторінки

Разовий performance-аудит майже завжди знаходить проблеми. Команда стискає зображення, прибирає кілька script, отримує кращий Lighthouse score — а через два релізи сторінка знову повільна.

Проблема не в тому, що оптимізація була неправильною. Проблема в тому, що після неї продукт продовжив додавати вагу без правил, які захищають результат.

Performance budget перетворює швидкість із побажання на контракт.

SEO і швидкість мають спільну системну причину

SEO часто передають маркетингу, а performance — frontend-команді. Проте одна архітектурна зміна може вплинути на обидва напрями:

  • ключовий текст з’являється лише після client-side запиту;
  • hero-зображення не видно браузеру до виконання JavaScript;
  • сторонній script блокує main thread під час першої взаємодії;
  • компонент не резервує місце під медіа й зміщує контент;
  • помилка canonical або routing створює дублікати сторінок.

Пошукова видимість і швидкий інтерфейс не є двома незалежними чеклістами. Обидва залежать від того, що система віддає в HTML, як пріоритезує ресурси та чи зберігає стабільну URL-модель.

Почніть із маршруту, а не із середнього score

У сайту немає однієї швидкості. Product page, стаття, checkout і dashboard мають різний контент, трафік і сценарії взаємодії.

Оберіть критичні типи сторінок і для кожного запишіть:

  • головну дію користувача;
  • ймовірний LCP-елемент;
  • критичний контент, який має бути доступний у rendered HTML;
  • JavaScript, необхідний до першої взаємодії;
  • дозволені сторонні інтеграції;
  • власника бюджету.

Це важливіше за оптимізацію випадкової сторінки, яку легко зробити зеленою, але яка не представляє реальний трафік.

Budget має вимірювати причини й результат

Core Web Vitals описують досвід у трьох вимірах:

  • LCP — коли з’являється головний видимий контент;
  • INP — наскільки швидко сторінка реагує на взаємодію;
  • CLS — наскільки стабільним лишається layout.

Це outcome-метрики. Вони показують, що відчув користувач, але не завжди пояснюють, яке рішення спричинило регресію. Тому budget також має містити контрольовані командою input-метрики:

  • розмір JavaScript для конкретного route;
  • розмір і формат LCP-ресурсу;
  • кількість критичних запитів;
  • тривалість long tasks у ключовому сценарії;
  • кількість сторонніх script до взаємодії;
  • частку сторінок із коректними title, description, canonical та indexability.

Не існує універсального числа для кожного bundle. Ліміт має виходити з цільового пристрою, мережі, структури сторінки й поточного baseline.

Розділіть лабораторні та польові дані

Лабораторний тест дає контрольоване середовище. Він корисний у pull request: можна порівняти зміну з baseline і зупинити очевидну регресію до release.

Польові дані показують досвід реальних відвідувачів на їхніх пристроях і мережах. Саме вони відповідають на питання, чи працює система після release.

Ці сигнали не повинні сперечатися між собою:

  • lab-тест захищає від передбачуваних змін;
  • real-user monitoring показує сегменти, яких не відтворив тест;
  • Search Console або CrUX дає зовнішній погляд на Core Web Vitals;
  • server logs і перевірка rendered HTML допомагають діагностувати crawl та rendering.

Один Lighthouse run на ноутбуці не є доказом швидкості для всіх користувачів. Так само повільні польові дані без route-level діагностики не підказують команді, що саме виправляти.

Вбудуйте budget у delivery

Контракт працює лише тоді, коли має точку застосування.

У pull request

Перевіряйте детерміновані речі: bundle delta, розміри зображень, наявність metadata, випадкове переведення server-rendered контенту на client-only шлях. Невелике перевищення не має мовчки ставати новим baseline.

Перед release

Запускайте синтетичні сценарії для критичних route на узгодженому профілі пристрою й мережі. Порівнюйте не тільки загальний score, а конкретний LCP-елемент, long tasks і layout shifts.

Після release

Слідкуйте за польовими метриками за типом сторінки, пристроєм і версією. Alert має вести до власника й останньої зміни, а не до dashboard, який ніхто не відкриває.

Домовтеся, як купувати нову вагу

Budget не повинен забороняти продуктові зміни. Він має робити їхню ціну видимою.

Якщо команда додає chat widget, A/B platform або важке hero-video, рішення повинно містити:

  1. очікувану продуктову користь;
  2. вплив на критичні route;
  3. спосіб відкладеного або умовного завантаження;
  4. ресурс, який буде прибрано або оптимізовано;
  5. дату перевірки фактичного ефекту.

Це змінює розмову з «performance проти бізнесу» на «який компроміс ми приймаємо і як його перевіримо».

Не оптимізуйте crawler замість користувача

Google уміє виконувати JavaScript, але індексує те, що бачить у rendered HTML. Це не причина створювати окрему спрощену версію для bot. Це причина зробити основний контент надійним для всіх: віддавати його передбачувано, не блокувати потрібні ресурси й перевіряти фактичний render.

Server або static rendering часто спрощує цей контракт для публічного контенту, але не звільняє від перевірки metadata, canonical, status codes, sitemap і client-side переходів.

Як виглядає робочий результат

Performance budget корисний, якщо після нового feature команда може відповісти:

  • який критичний route змінився;
  • який ресурс або task став дорожчим;
  • чи помітили це реальні користувачі;
  • хто прийняв компроміс;
  • коли команда перевірить результат повторно.

Швидкість зберігається не завдяки героїчній оптимізації перед запуском. Вона зберігається, коли кожна наступна зміна проходить через систему, яка робить її вартість видимою.

Джерела для перевірки

← Back to the blog