Конфигурация
Справочник
Все поля ranklint.config и приоритеты слоёв.
Файл ranklint.config.{ts,js,mjs,json,jsonc}, грузится c12. Для TS — автодополнение через defineRanklintConfig, для JSON — JSON-схема. Весь конфиг валидируется Zod на старте: неизвестное правило — ошибка с did-you-mean (Левенштейн ≤ 3).
import { defineRanklintConfig } from '@ranklint/core'
export default defineRanklintConfig({
extends: ['./agency-preset.ts', '@ranklint/preset-default'],
site: { url: 'https://example.com', name: 'Example' },
apps: { // зоны multi-app домена
self: { paths: ['/en/market/**'] }, // зона с именем self — краулится
main: { paths: ['/**'], owner: 'external', checks: ['...'] },
},
rules: {
'meta:title-length': ['error', { min: 30, max: 60 }],
'meta:description-length': 'off', // 'error' | 'warn' | 'info' | 'off' | [severity, options]
},
crawl: {
entry: ['/en/market'], // сид-пути краула (по умолчанию — сам проверяемый URL)
concurrency: 5, // параллельных вкладок
delay: 0, // мс между страницами
maxPages: 1000, // стоп + truncated: true в отчёте
ignore: ['/admin/**'], // глобы — пропуск
strategy: 'full', // 'full' | 'sitemap+sample'
userAgent: 'custom UA', // заодно выбирает группу robots.txt
respectRobots: true, // не ходить по ссылкам, закрытым в <origin>/robots.txt (entry краулится всегда)
insecureTls: true, // self-signed сертификаты dev/staging
viewport: { width: 375, height: 812 },
auth: { // staging за заглушкой
headers: { 'X-Auth': '...' },
basic: { username: '...', password: '...' },
cookies: [{ name: '...', value: '...' }],
},
},
robots: { // ожидания для ВНЕШНЕГО robots.txt
mode: 'owner', // 'owner' | 'external'
expect: {
allow: ['/'], disallow: ['/admin'],
sitemaps: ['https://example.com/sitemap.xml'],
indexable: true,
},
},
lighthouse: {
enabled: true,
runs: 5, // прогонов на URL
aggregation: 'median', // 'median' | 'p75' | 'best'
formFactor: 'mobile', // 'mobile' | 'desktop'
maxUrls: 5, // потолок; без urls — первые 200-страницы краула
runTimeout: 180000, // мс на прогон; зависший прогон пропускается, Chrome убивается
urls: ['/', '/pricing'], // точный список путей/URL, меряются даже вне краула
thresholds: { '/listing/**': { performance: 90, lcp: 2500 } },
},
customChecks: [ /* defineCheck({...}) */ ],
monitor: {
storage: 'fs', // 'fs' | 's3'
dir: '.ranklint/reports', // для fs
keep: 60, // ротация
bucket: '...', prefix: '...', endpoint: '...', region: '...', // для s3
},
profiles: { // накладываются defu поверх базы: --profile uat
uat: { site: { url: 'https://uat.example.com' } },
},
})
Приоритеты слоёв: сам конфиг > ранние элементы
extends > поздние. Профиль накладывается патчем поверх базы. Локальные пути в extends требуют расширение файла (./preset.ts).insecureTls держите только в dev/local-профиле — в прод-аудит он попасть не должен.