CLI

Lighthouse

Отдельный прогон Chrome с агрегацией по метрикам и порогами на route-паттернах.

Отдельный Chrome через chrome-launcher (не Playwright — нужен установленный Chrome). N прогонов на URL, агрегация per-metric: median (default) / p75 / best — одиночный прогон шумит на ±10 баллов. Метрики: performance, seo, accessibility, bestPractices, lcp, cls, tbt + LCP-элемент с подсказкой. Пороги задаются route-паттернами и превращаются в обычные error-issues (→ exit 1). Результат попадает в Report.lighthouse; diff сравнивает по паре (url-pattern, metric) — регрессия метрики между ветками видна. formFactor: 'mobile' заодно ставит краулеру вьюпорт 375×812, если crawl.viewport не задан.

Гонять разово после релиза, а не на каждый PR: в базовом конфиге lighthouse.enabled: false, включить в профиле — profiles: { release: { lighthouse: { enabled: true } } }, затем ranklint lighthouse --url https://example.com --profile release на теге (GitLab: RANKLINT_PROFILE у .ranklint-lighthouse; GitHub: input lighthouse-profile).

Какие URL меряются

По умолчанию — первые страницы краула, ответившие 200, не больше maxUrls (5). Чтобы зафиксировать набор, перечислите пути или абсолютные URL в lighthouse.urls: меряются ровно они и в этом порядке, независимо от того, дошёл ли до них краул. Пути резолвятся относительно --url; maxUrls, если задан, по-прежнему ограничивает список сверху; пустой urls: [] считается незаданным. Команда lighthouse тоже меряет urls вместо самого --url.

export default defineRanklintConfig({
  site: { url: 'https://example.com' },
  lighthouse: {
    enabled: true,
    urls: ['/', '/pricing', '/en/blog/'],
  },
})

Профили и разовый Lighthouse

profiles накладываются на базовый конфиг через --profile <name> (defu). Держите Lighthouse выключенным в обычном PR-аудите и включайте его в релизном профиле, который запускается на тегах или вручную:

export default defineRanklintConfig({
  site: { url: 'https://example.com' },
  lighthouse: { enabled: false },
  profiles: {
    uat: { site: { url: 'https://uat.example.com' } },
    release: { lighthouse: { enabled: true, runs: 5, thresholds: { '/**': { performance: 85 } } } },
  },
})
ranklint audit --url https://uat.example.com --profile uat        # every PR, seconds
ranklint lighthouse --url https://example.com --profile release     # after a release

В GitLab-пресете поставьте RANKLINT_PROFILE: release джобе с extends: .ranklint-lighthouse и rules: [{ if: $CI_COMMIT_TAG }]; в GitHub-пресете передайте lighthouse-profile: release.