[{"data":1,"prerenderedAt":1657},["ShallowReactive",2],{"navigation_docs_ru":3,"-ru-cli-monitor":361,"-ru-cli-monitor-surround":1652},[4,23,49,83,93,115,343,353],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":22},"Начало работы","i-lucide-rocket","\u002Fru\u002Fgetting-started","ru\u002F1.getting-started",[10,14,18],{"title":11,"path":12,"stem":13},"Введение","\u002Fru\u002Fgetting-started\u002Fintroduction","ru\u002F1.getting-started\u002F1.introduction",{"title":15,"path":16,"stem":17},"Установка","\u002Fru\u002Fgetting-started\u002Finstallation","ru\u002F1.getting-started\u002F2.installation",{"title":19,"path":20,"stem":21},"ranklint init","\u002Fru\u002Fgetting-started\u002Finit","ru\u002F1.getting-started\u002F3.init",false,{"title":24,"icon":25,"path":26,"stem":27,"children":28,"page":22},"Nuxt-модуль","i-lucide-box","\u002Fru\u002Fmodule","ru\u002F2.module",[29,33,37,41,45],{"title":30,"path":31,"stem":32},"Обзор","\u002Fru\u002Fmodule\u002Foverview","ru\u002F2.module\u002F1.overview",{"title":34,"path":35,"stem":36},"Sitemap","\u002Fru\u002Fmodule\u002Fsitemap","ru\u002F2.module\u002F2.sitemap",{"title":38,"path":39,"stem":40},"Robots","\u002Fru\u002Fmodule\u002Frobots","ru\u002F2.module\u002F3.robots",{"title":42,"path":43,"stem":44},"Композаблы","\u002Fru\u002Fmodule\u002Fcomposables","ru\u002F2.module\u002F4.composables",{"title":46,"path":47,"stem":48},"DevTools","\u002Fru\u002Fmodule\u002Fdevtools","ru\u002F2.module\u002F5.devtools",{"title":50,"icon":51,"path":52,"stem":53,"children":54,"page":22},"CLI","i-lucide-terminal","\u002Fru\u002Fcli","ru\u002F3.cli",[55,59,63,67,71,75,79],{"title":56,"path":57,"stem":58},"ranklint audit","\u002Fru\u002Fcli\u002Faudit","ru\u002F3.cli\u002F1.audit",{"title":60,"path":61,"stem":62},"Diff и CI","\u002Fru\u002Fcli\u002Fdiff-and-ci","ru\u002F3.cli\u002F2.diff-and-ci",{"title":64,"path":65,"stem":66},"Мониторинг прода","\u002Fru\u002Fcli\u002Fmonitor","ru\u002F3.cli\u002F3.monitor",{"title":68,"path":69,"stem":70},"Lighthouse","\u002Fru\u002Fcli\u002Flighthouse","ru\u002F3.cli\u002F4.lighthouse",{"title":72,"path":73,"stem":74},"Зоны (multi-app домены)","\u002Fru\u002Fcli\u002Fzones","ru\u002F3.cli\u002F5.zones",{"title":76,"path":77,"stem":78},"Остальные команды","\u002Fru\u002Fcli\u002Fother-commands","ru\u002F3.cli\u002F6.other-commands",{"title":80,"path":81,"stem":82},"Watch mode","\u002Fru\u002Fcli\u002Fwatch","ru\u002F3.cli\u002F7.watch",{"title":84,"icon":85,"path":86,"stem":87,"children":88,"page":22},"Конфигурация","i-lucide-settings-2","\u002Fru\u002Fconfig","ru\u002F4.config",[89],{"title":90,"path":91,"stem":92},"Справочник","\u002Fru\u002Fconfig\u002Freference","ru\u002F4.config\u002F1.reference",{"title":94,"icon":95,"path":96,"stem":97,"children":98,"page":22},"Продвинутое","i-lucide-wrench","\u002Fru\u002Fadvanced","ru\u002F5.advanced",[99,103,107,111],{"title":100,"path":101,"stem":102},"Кастомные правила и пресеты","\u002Fru\u002Fadvanced\u002Fcustom-rules","ru\u002F5.advanced\u002F1.custom-rules",{"title":104,"path":105,"stem":106},"Умные эвристики","\u002Fru\u002Fadvanced\u002Fheuristics","ru\u002F5.advanced\u002F2.heuristics",{"title":108,"path":109,"stem":110},"Env-переменные","\u002Fru\u002Fadvanced\u002Fenv","ru\u002F5.advanced\u002F3.env",{"title":112,"path":113,"stem":114},"Нюансы и ограничения","\u002Fru\u002Fadvanced\u002Fnuances","ru\u002F5.advanced\u002F4.nuances",{"title":116,"icon":117,"path":118,"stem":119,"children":120},"Правила","i-lucide-list-checks","\u002Fru\u002Frules","ru\u002F6.rules\u002Findex",[121,123,148,173,190,207,228,257,306,330],{"title":122,"path":118,"stem":119},"Все правила",{"title":124,"path":125,"stem":126,"children":127,"page":22},"Headings","\u002Fru\u002Frules\u002Fheadings","ru\u002F6.rules\u002Fheadings",[128,132,136,140,144],{"title":129,"path":130,"stem":131},"headings:h1-length","\u002Fru\u002Frules\u002Fheadings\u002Fheadings-h1-length","ru\u002F6.rules\u002Fheadings\u002Fheadings-h1-length",{"title":133,"path":134,"stem":135},"headings:hierarchy","\u002Fru\u002Frules\u002Fheadings\u002Fheadings-hierarchy","ru\u002F6.rules\u002Fheadings\u002Fheadings-hierarchy",{"title":137,"path":138,"stem":139},"headings:no-empty","\u002Fru\u002Frules\u002Fheadings\u002Fheadings-no-empty","ru\u002F6.rules\u002Fheadings\u002Fheadings-no-empty",{"title":141,"path":142,"stem":143},"headings:single-h1","\u002Fru\u002Frules\u002Fheadings\u002Fheadings-single-h1","ru\u002F6.rules\u002Fheadings\u002Fheadings-single-h1",{"title":145,"path":146,"stem":147},"headings:unique-h1","\u002Fru\u002Frules\u002Fheadings\u002Fheadings-unique-h1","ru\u002F6.rules\u002Fheadings\u002Fheadings-unique-h1",{"title":149,"path":150,"stem":151,"children":152,"page":22},"Http","\u002Fru\u002Frules\u002Fhttp","ru\u002F6.rules\u002Fhttp",[153,157,161,165,169],{"title":154,"path":155,"stem":156},"http:no-mixed-content","\u002Fru\u002Frules\u002Fhttp\u002Fhttp-no-mixed-content","ru\u002F6.rules\u002Fhttp\u002Fhttp-no-mixed-content",{"title":158,"path":159,"stem":160},"http:no-soft-404","\u002Fru\u002Frules\u002Fhttp\u002Fhttp-no-soft-404","ru\u002F6.rules\u002Fhttp\u002Fhttp-no-soft-404",{"title":162,"path":163,"stem":164},"http:ttfb-budget","\u002Fru\u002Frules\u002Fhttp\u002Fhttp-ttfb-budget","ru\u002F6.rules\u002Fhttp\u002Fhttp-ttfb-budget",{"title":166,"path":167,"stem":168},"http:x-robots-consistent","\u002Fru\u002Frules\u002Fhttp\u002Fhttp-x-robots-consistent","ru\u002F6.rules\u002Fhttp\u002Fhttp-x-robots-consistent",{"title":170,"path":171,"stem":172},"mobile:viewport","\u002Fru\u002Frules\u002Fhttp\u002Fmobile-viewport","ru\u002F6.rules\u002Fhttp\u002Fmobile-viewport",{"title":174,"path":175,"stem":176,"children":177,"page":22},"I18n","\u002Fru\u002Frules\u002Fi18n","ru\u002F6.rules\u002Fi18n",[178,182,186],{"title":179,"path":180,"stem":181},"hreflang:symmetric","\u002Fru\u002Frules\u002Fi18n\u002Fhreflang-symmetric","ru\u002F6.rules\u002Fi18n\u002Fhreflang-symmetric",{"title":183,"path":184,"stem":185},"hreflang:valid-targets","\u002Fru\u002Frules\u002Fi18n\u002Fhreflang-valid-targets","ru\u002F6.rules\u002Fi18n\u002Fhreflang-valid-targets",{"title":187,"path":188,"stem":189},"i18n:no-locale-leak","\u002Fru\u002Frules\u002Fi18n\u002Fi18n-no-locale-leak","ru\u002F6.rules\u002Fi18n\u002Fi18n-no-locale-leak",{"title":191,"path":192,"stem":193,"children":194,"page":22},"Images","\u002Fru\u002Frules\u002Fimages","ru\u002F6.rules\u002Fimages",[195,199,203],{"title":196,"path":197,"stem":198},"images:alt-required","\u002Fru\u002Frules\u002Fimages\u002Fimages-alt-required","ru\u002F6.rules\u002Fimages\u002Fimages-alt-required",{"title":200,"path":201,"stem":202},"images:dimensions-required","\u002Fru\u002Frules\u002Fimages\u002Fimages-dimensions-required","ru\u002F6.rules\u002Fimages\u002Fimages-dimensions-required",{"title":204,"path":205,"stem":206},"images:no-lazy-above-fold","\u002Fru\u002Frules\u002Fimages\u002Fimages-no-lazy-above-fold","ru\u002F6.rules\u002Fimages\u002Fimages-no-lazy-above-fold",{"title":208,"path":209,"stem":210,"children":211,"page":22},"Indexability","\u002Fru\u002Frules\u002Findexability","ru\u002F6.rules\u002Findexability",[212,218,224],{"title":213,"path":214,"stem":215,"children":216},"indexability:ssr-content","\u002Fru\u002Frules\u002Findexability\u002Findexability-ssr-content","ru\u002F6.rules\u002Findexability\u002Findexability-ssr-content",[217],{"title":213,"path":214,"stem":215},{"title":219,"path":220,"stem":221,"children":222},"sitemap:no-noindex","\u002Fru\u002Frules\u002Findexability\u002Fsitemap-no-noindex","ru\u002F6.rules\u002Findexability\u002Fsitemap-no-noindex",[223],{"title":219,"path":220,"stem":221},{"title":225,"path":226,"stem":227},"sitemap:reachable","\u002Fru\u002Frules\u002Findexability\u002Fsitemap-reachable","ru\u002F6.rules\u002Findexability\u002Fsitemap-reachable",{"title":229,"path":230,"stem":231,"children":232,"page":22},"Links","\u002Fru\u002Frules\u002Flinks","ru\u002F6.rules\u002Flinks",[233,237,241,245,249,253],{"title":234,"path":235,"stem":236},"links:no-broken","\u002Fru\u002Frules\u002Flinks\u002Flinks-no-broken","ru\u002F6.rules\u002Flinks\u002Flinks-no-broken",{"title":238,"path":239,"stem":240},"links:no-orphans","\u002Fru\u002Frules\u002Flinks\u002Flinks-no-orphans","ru\u002F6.rules\u002Flinks\u002Flinks-no-orphans",{"title":242,"path":243,"stem":244},"links:no-redirect-chain","\u002Fru\u002Frules\u002Flinks\u002Flinks-no-redirect-chain","ru\u002F6.rules\u002Flinks\u002Flinks-no-redirect-chain",{"title":246,"path":247,"stem":248},"links:no-utm-internal","\u002Fru\u002Frules\u002Flinks\u002Flinks-no-utm-internal","ru\u002F6.rules\u002Flinks\u002Flinks-no-utm-internal",{"title":250,"path":251,"stem":252},"links:permanent-redirects","\u002Fru\u002Frules\u002Flinks\u002Flinks-permanent-redirects","ru\u002F6.rules\u002Flinks\u002Flinks-permanent-redirects",{"title":254,"path":255,"stem":256},"links:trailing-slash-consistent","\u002Fru\u002Frules\u002Flinks\u002Flinks-trailing-slash-consistent","ru\u002F6.rules\u002Flinks\u002Flinks-trailing-slash-consistent",{"title":258,"path":259,"stem":260,"children":261,"page":22},"Meta","\u002Fru\u002Frules\u002Fmeta","ru\u002F6.rules\u002Fmeta",[262,266,270,274,278,282,286,290,294,298,302],{"title":263,"path":264,"stem":265},"canonical:no-chain","\u002Fru\u002Frules\u002Fmeta\u002Fcanonical-no-chain","ru\u002F6.rules\u002Fmeta\u002Fcanonical-no-chain",{"title":267,"path":268,"stem":269},"canonical:required","\u002Fru\u002Frules\u002Fmeta\u002Fcanonical-required","ru\u002F6.rules\u002Fmeta\u002Fcanonical-required",{"title":271,"path":272,"stem":273},"canonical:valid","\u002Fru\u002Frules\u002Fmeta\u002Fcanonical-valid","ru\u002F6.rules\u002Fmeta\u002Fcanonical-valid",{"title":275,"path":276,"stem":277},"meta:description-length","\u002Fru\u002Frules\u002Fmeta\u002Fmeta-description-length","ru\u002F6.rules\u002Fmeta\u002Fmeta-description-length",{"title":279,"path":280,"stem":281},"meta:description-required","\u002Fru\u002Frules\u002Fmeta\u002Fmeta-description-required","ru\u002F6.rules\u002Fmeta\u002Fmeta-description-required",{"title":283,"path":284,"stem":285},"meta:no-duplicate-description","\u002Fru\u002Frules\u002Fmeta\u002Fmeta-no-duplicate-description","ru\u002F6.rules\u002Fmeta\u002Fmeta-no-duplicate-description",{"title":287,"path":288,"stem":289},"meta:no-duplicate-title","\u002Fru\u002Frules\u002Fmeta\u002Fmeta-no-duplicate-title","ru\u002F6.rules\u002Fmeta\u002Fmeta-no-duplicate-title",{"title":291,"path":292,"stem":293},"meta:og-required","\u002Fru\u002Frules\u002Fmeta\u002Fmeta-og-required","ru\u002F6.rules\u002Fmeta\u002Fmeta-og-required",{"title":295,"path":296,"stem":297},"meta:title-length","\u002Fru\u002Frules\u002Fmeta\u002Fmeta-title-length","ru\u002F6.rules\u002Fmeta\u002Fmeta-title-length",{"title":299,"path":300,"stem":301},"meta:title-required","\u002Fru\u002Frules\u002Fmeta\u002Fmeta-title-required","ru\u002F6.rules\u002Fmeta\u002Fmeta-title-required",{"title":303,"path":304,"stem":305},"meta:twitter-card","\u002Fru\u002Frules\u002Fmeta\u002Fmeta-twitter-card","ru\u002F6.rules\u002Fmeta\u002Fmeta-twitter-card",{"title":38,"path":307,"stem":308,"children":309,"page":22},"\u002Fru\u002Frules\u002Frobots","ru\u002F6.rules\u002Frobots",[310,314,318,322,326],{"title":311,"path":312,"stem":313},"robots:env-policy","\u002Fru\u002Frules\u002Frobots\u002Frobots-env-policy","ru\u002F6.rules\u002Frobots\u002Frobots-env-policy",{"title":315,"path":316,"stem":317},"robots:expected-disallow","\u002Fru\u002Frules\u002Frobots\u002Frobots-expected-disallow","ru\u002F6.rules\u002Frobots\u002Frobots-expected-disallow",{"title":319,"path":320,"stem":321},"robots:reachable","\u002Fru\u002Frules\u002Frobots\u002Frobots-reachable","ru\u002F6.rules\u002Frobots\u002Frobots-reachable",{"title":323,"path":324,"stem":325},"robots:sitemap-declared","\u002Fru\u002Frules\u002Frobots\u002Frobots-sitemap-declared","ru\u002F6.rules\u002Frobots\u002Frobots-sitemap-declared",{"title":327,"path":328,"stem":329},"robots:zone-not-blocked","\u002Fru\u002Frules\u002Frobots\u002Frobots-zone-not-blocked","ru\u002F6.rules\u002Frobots\u002Frobots-zone-not-blocked",{"title":331,"path":332,"stem":333,"children":334,"page":22},"Structured Data","\u002Fru\u002Frules\u002Fstructured-data","ru\u002F6.rules\u002Fstructured-data",[335,339],{"title":336,"path":337,"stem":338},"jsonld:parseable","\u002Fru\u002Frules\u002Fstructured-data\u002Fjsonld-parseable","ru\u002F6.rules\u002Fstructured-data\u002Fjsonld-parseable",{"title":340,"path":341,"stem":342},"jsonld:valid-schema","\u002Fru\u002Frules\u002Fstructured-data\u002Fjsonld-valid-schema","ru\u002F6.rules\u002Fstructured-data\u002Fjsonld-valid-schema",{"title":344,"icon":345,"path":346,"stem":347,"children":348,"page":22},"Гайды","i-lucide-book-open","\u002Fru\u002Fguides","ru\u002F7.guides",[349],{"title":350,"path":351,"stem":352},"SEO-чеклист для Nuxt-проекта","\u002Fru\u002Fguides\u002Fseo-checklist-nuxt","ru\u002F7.guides\u002F1.seo-checklist-nuxt",{"title":354,"path":355,"stem":356,"children":357,"icon":360},"Изменения","\u002Fru\u002Fchangelog","ru\u002F8.changelog\u002Findex",[358],{"title":359,"path":355,"stem":356},"Изменения и релизы ranklint","i-lucide-history",{"id":362,"title":64,"body":363,"description":1646,"extension":1647,"links":1648,"meta":1649,"navigation":555,"path":65,"seo":1650,"stem":66,"__hash__":1651},"docs_ru\u002Fru\u002F3.cli\u002F3.monitor.md",{"type":364,"value":365,"toc":1642},"minimark",[366,383,437,492,497,500,510,774,781,933,939,1039,1070,1074,1087,1250,1253,1331,1334,1354,1364,1367,1380,1388,1396,1403,1420,1466,1626,1638],[367,368,369,373,374,378,379,382],"p",{},[370,371,372],"code",{},"ranklint audit --url https:\u002F\u002Fprod --mode monitor"," — для крона\u002Fschedule. ",[375,376,377],"strong",{},"Exit всегда 0",": прод-мониторинг не роняет пайплайн, вместо этого алертит. Флоу: аудит → обогащение → diff против последнего сохранённого отчёта → сохранение по timestamp → алерты только при ",[370,380,381],{},"newIssues > 0",".",[384,385,386,397,411,424],"ul",{},[387,388,389,392,393,396],"li",{},[375,390,391],{},"CrUX"," (",[370,394,395],{},"RANKLINT_CRUX_API_KEY",") — полевые Core Web Vitals origin'а: LCP, CLS, INP реальных пользователей.",[387,398,399,402,403,406,407,410],{},[375,400,401],{},"Search Console URL Inspection"," — до 10 страниц: verdict, coverageState, indexingState, rich-results issues. Авторизация: готовый токен ",[370,404,405],{},"RANKLINT_GSC_TOKEN"," или сервис-аккаунт ",[370,408,409],{},"RANKLINT_GSC_KEY_FILE"," (RS256-JWT собирается на node:crypto без зависимостей, iat со сдвигом −30с на clock skew).",[387,412,413,416,417,420,421,382],{},[375,414,415],{},"Алерты",": Slack webhook и\u002Fили Telegram (bot token + chat id) — payload'ы собирают ",[370,418,419],{},"slackPayload","\u002F",[370,422,423],{},"telegramText",[387,425,426,429,430,433,434,382],{},[375,427,428],{},"Хранилище",": fs (default) или s3 с ротацией ",[370,431,432],{},"keep","; тренд — ",[370,435,436],{},"ranklint history",[367,438,439,442,443,446,447,450,451,392,454,457,458,457,461,464,465,468,469,472,473,476,477,468,480,483,484,487,488,491],{},[375,440,441],{},"Отдельный репо, любой стек."," CLI не зависит от Nuxt: репо с ",[370,444,445],{},"package.json"," (devDependency ",[370,448,449],{},"ranklint","), ",[370,452,453],{},"ranklint.config.ts",[370,455,456],{},"site.url",", ",[370,459,460],{},"robots.mode: 'external'",[370,462,463],{},"monitor",") и джобой по расписанию мониторит весь домен. GitHub: ",[370,466,467],{},"uses: aakazancev\u002Franklint\u002F.github\u002Fworkflows\u002Fmonitor.yml@main"," с ",[370,470,471],{},"pages: true"," публикует html-отчёт на GitHub Pages; GitLab: ",[370,474,475],{},"extends: .ranklint-monitor"," + job ",[370,478,479],{},"pages",[370,481,482],{},"extends: .ranklint-pages"," на pipeline schedule. ",[370,485,486],{},"--html-output"," \u002F ",[370,489,490],{},"--json-output"," пишут полный отчёт рядом с diff.",[493,494,496],"h2",{"id":495},"отдельный-репо-монитора-любой-стек","Отдельный репо монитора (любой стек)",[367,498,499],{},"CLI не зависит от Nuxt: крошечный репо с конфигом и джобой по расписанию мониторит целый домен, на чём бы тот ни был собран, и публикует последний отчёт на Pages.",[501,502,507],"pre",{"className":503,"code":505,"language":506},[504],"language-text","seo-monitor\u002F\n  package.json          { \"devDependencies\": { \"ranklint\": \"^0.5.0\" } }\n  ranklint.config.ts\n  .github\u002Fworkflows\u002Fmonitor.yml   or   .gitlab-ci.yml\n","text",[370,508,505],{"__ignoreMap":509},"",[501,511,515],{"className":512,"code":513,"language":514,"meta":509,"style":509},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineRanklintConfig } from '@ranklint\u002Fcore'\n\nexport default defineRanklintConfig({\n  site: { url: 'https:\u002F\u002Fexample.com' },\n  crawl: { maxPages: 2000, ignore: ['\u002Fadmin\u002F**', '\u002Fapi\u002F**'] },\n  robots: { mode: 'external', expect: { indexable: true, sitemaps: ['https:\u002F\u002Fexample.com\u002Fsitemap.xml'] } },\n  monitor: { storage: 'fs', dir: '.ranklint\u002Freports', keep: 60 },\n})\n","ts",[370,516,517,550,557,575,603,655,718,766],{"__ignoreMap":509},[518,519,522,526,530,534,537,540,543,547],"span",{"class":520,"line":521},"line",1,[518,523,525],{"class":524},"s7zQu","import",[518,527,529],{"class":528},"sMK4o"," {",[518,531,533],{"class":532},"sTEyZ"," defineRanklintConfig",[518,535,536],{"class":528}," }",[518,538,539],{"class":524}," from",[518,541,542],{"class":528}," '",[518,544,546],{"class":545},"sfazB","@ranklint\u002Fcore",[518,548,549],{"class":528},"'\n",[518,551,553],{"class":520,"line":552},2,[518,554,556],{"emptyLinePlaceholder":555},true,"\n",[518,558,560,563,566,569,572],{"class":520,"line":559},3,[518,561,562],{"class":524},"export",[518,564,565],{"class":524}," default",[518,567,533],{"class":568},"s2Zo4",[518,570,571],{"class":532},"(",[518,573,574],{"class":528},"{\n",[518,576,578,582,585,587,590,592,594,597,600],{"class":520,"line":577},4,[518,579,581],{"class":580},"swJcz","  site",[518,583,584],{"class":528},":",[518,586,529],{"class":528},[518,588,589],{"class":580}," url",[518,591,584],{"class":528},[518,593,542],{"class":528},[518,595,596],{"class":545},"https:\u002F\u002Fexample.com",[518,598,599],{"class":528},"'",[518,601,602],{"class":528}," },\n",[518,604,606,609,611,613,616,618,622,625,628,630,633,635,638,640,642,644,647,649,652],{"class":520,"line":605},5,[518,607,608],{"class":580},"  crawl",[518,610,584],{"class":528},[518,612,529],{"class":528},[518,614,615],{"class":580}," maxPages",[518,617,584],{"class":528},[518,619,621],{"class":620},"sbssI"," 2000",[518,623,624],{"class":528},",",[518,626,627],{"class":580}," ignore",[518,629,584],{"class":528},[518,631,632],{"class":532}," [",[518,634,599],{"class":528},[518,636,637],{"class":545},"\u002Fadmin\u002F**",[518,639,599],{"class":528},[518,641,624],{"class":528},[518,643,542],{"class":528},[518,645,646],{"class":545},"\u002Fapi\u002F**",[518,648,599],{"class":528},[518,650,651],{"class":532},"] ",[518,653,654],{"class":528},"},\n",[518,656,658,661,663,665,668,670,672,675,677,679,682,684,686,689,691,695,697,700,702,704,706,709,711,713,716],{"class":520,"line":657},6,[518,659,660],{"class":580},"  robots",[518,662,584],{"class":528},[518,664,529],{"class":528},[518,666,667],{"class":580}," mode",[518,669,584],{"class":528},[518,671,542],{"class":528},[518,673,674],{"class":545},"external",[518,676,599],{"class":528},[518,678,624],{"class":528},[518,680,681],{"class":580}," expect",[518,683,584],{"class":528},[518,685,529],{"class":528},[518,687,688],{"class":580}," indexable",[518,690,584],{"class":528},[518,692,694],{"class":693},"sfNiH"," true",[518,696,624],{"class":528},[518,698,699],{"class":580}," sitemaps",[518,701,584],{"class":528},[518,703,632],{"class":532},[518,705,599],{"class":528},[518,707,708],{"class":545},"https:\u002F\u002Fexample.com\u002Fsitemap.xml",[518,710,599],{"class":528},[518,712,651],{"class":532},[518,714,715],{"class":528},"}",[518,717,602],{"class":528},[518,719,721,724,726,728,731,733,735,738,740,742,745,747,749,752,754,756,759,761,764],{"class":520,"line":720},7,[518,722,723],{"class":580},"  monitor",[518,725,584],{"class":528},[518,727,529],{"class":528},[518,729,730],{"class":580}," storage",[518,732,584],{"class":528},[518,734,542],{"class":528},[518,736,737],{"class":545},"fs",[518,739,599],{"class":528},[518,741,624],{"class":528},[518,743,744],{"class":580}," dir",[518,746,584],{"class":528},[518,748,542],{"class":528},[518,750,751],{"class":545},".ranklint\u002Freports",[518,753,599],{"class":528},[518,755,624],{"class":528},[518,757,758],{"class":580}," keep",[518,760,584],{"class":528},[518,762,763],{"class":620}," 60",[518,765,602],{"class":528},[518,767,769,771],{"class":520,"line":768},8,[518,770,715],{"class":528},[518,772,773],{"class":532},")\n",[367,775,776,777,780],{},"GitHub Actions (отчёт по адресу ",[370,778,779],{},"https:\u002F\u002F\u003Cowner>.github.io\u002F\u003Crepo>\u002F",", один раз включить Pages → Source: GitHub Actions):",[501,782,786],{"className":783,"code":784,"language":785,"meta":509,"style":509},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","on:\n  schedule: [{ cron: '0 6 * * *' }]\n  workflow_dispatch:\npermissions:\n  contents: read\n  pages: write\n  id-token: write\njobs:\n  seo:\n    uses: aakazancev\u002Franklint\u002F.github\u002Fworkflows\u002Fmonitor.yml@main\n    with: { url: 'https:\u002F\u002Fexample.com', pages: true }\n    secrets: inherit\n","yaml",[370,787,788,796,821,828,835,845,855,864,871,879,890,922],{"__ignoreMap":509},[518,789,790,793],{"class":520,"line":521},[518,791,792],{"class":693},"on",[518,794,795],{"class":528},":\n",[518,797,798,801,803,806,809,811,813,816,818],{"class":520,"line":552},[518,799,800],{"class":580},"  schedule",[518,802,584],{"class":528},[518,804,805],{"class":528}," [{",[518,807,808],{"class":580}," cron",[518,810,584],{"class":528},[518,812,542],{"class":528},[518,814,815],{"class":545},"0 6 * * *",[518,817,599],{"class":528},[518,819,820],{"class":528}," }]\n",[518,822,823,826],{"class":520,"line":559},[518,824,825],{"class":580},"  workflow_dispatch",[518,827,795],{"class":528},[518,829,830,833],{"class":520,"line":577},[518,831,832],{"class":580},"permissions",[518,834,795],{"class":528},[518,836,837,840,842],{"class":520,"line":605},[518,838,839],{"class":580},"  contents",[518,841,584],{"class":528},[518,843,844],{"class":545}," read\n",[518,846,847,850,852],{"class":520,"line":657},[518,848,849],{"class":580},"  pages",[518,851,584],{"class":528},[518,853,854],{"class":545}," write\n",[518,856,857,860,862],{"class":520,"line":720},[518,858,859],{"class":580},"  id-token",[518,861,584],{"class":528},[518,863,854],{"class":545},[518,865,866,869],{"class":520,"line":768},[518,867,868],{"class":580},"jobs",[518,870,795],{"class":528},[518,872,874,877],{"class":520,"line":873},9,[518,875,876],{"class":580},"  seo",[518,878,795],{"class":528},[518,880,882,885,887],{"class":520,"line":881},10,[518,883,884],{"class":580},"    uses",[518,886,584],{"class":528},[518,888,889],{"class":545}," aakazancev\u002Franklint\u002F.github\u002Fworkflows\u002Fmonitor.yml@main\n",[518,891,893,896,898,900,902,904,906,908,910,912,915,917,919],{"class":520,"line":892},11,[518,894,895],{"class":580},"    with",[518,897,584],{"class":528},[518,899,529],{"class":528},[518,901,589],{"class":580},[518,903,584],{"class":528},[518,905,542],{"class":528},[518,907,596],{"class":545},[518,909,599],{"class":528},[518,911,624],{"class":528},[518,913,914],{"class":580}," pages",[518,916,584],{"class":528},[518,918,694],{"class":693},[518,920,921],{"class":528}," }\n",[518,923,925,928,930],{"class":520,"line":924},12,[518,926,927],{"class":580},"    secrets",[518,929,584],{"class":528},[518,931,932],{"class":545}," inherit\n",[367,934,935,936,938],{},"GitLab CI (отчёт по Pages-адресу проекта; джоба обязана называться ",[370,937,479],{},"):",[501,940,942],{"className":783,"code":941,"language":785,"meta":509,"style":509},"include:\n  - remote: 'https:\u002F\u002Fraw.githubusercontent.com\u002Faakazancev\u002Franklint\u002Fmain\u002Fpresets\u002Fgitlab-ci\u002Fseo.yml'\n\nseo:monitor:\n  extends: .ranklint-monitor\n  variables:\n    RANKLINT_URL: https:\u002F\u002Fexample.com\n\npages:\n  extends: .ranklint-pages\n  needs: [seo:monitor]\n",[370,943,944,951,968,972,979,989,996,1006,1010,1016,1025],{"__ignoreMap":509},[518,945,946,949],{"class":520,"line":521},[518,947,948],{"class":580},"include",[518,950,795],{"class":528},[518,952,953,956,959,961,963,966],{"class":520,"line":552},[518,954,955],{"class":528},"  -",[518,957,958],{"class":580}," remote",[518,960,584],{"class":528},[518,962,542],{"class":528},[518,964,965],{"class":545},"https:\u002F\u002Fraw.githubusercontent.com\u002Faakazancev\u002Franklint\u002Fmain\u002Fpresets\u002Fgitlab-ci\u002Fseo.yml",[518,967,549],{"class":528},[518,969,970],{"class":520,"line":559},[518,971,556],{"emptyLinePlaceholder":555},[518,973,974,977],{"class":520,"line":577},[518,975,976],{"class":580},"seo:monitor",[518,978,795],{"class":528},[518,980,981,984,986],{"class":520,"line":605},[518,982,983],{"class":580},"  extends",[518,985,584],{"class":528},[518,987,988],{"class":545}," .ranklint-monitor\n",[518,990,991,994],{"class":520,"line":657},[518,992,993],{"class":580},"  variables",[518,995,795],{"class":528},[518,997,998,1001,1003],{"class":520,"line":720},[518,999,1000],{"class":580},"    RANKLINT_URL",[518,1002,584],{"class":528},[518,1004,1005],{"class":545}," https:\u002F\u002Fexample.com\n",[518,1007,1008],{"class":520,"line":768},[518,1009,556],{"emptyLinePlaceholder":555},[518,1011,1012,1014],{"class":520,"line":873},[518,1013,479],{"class":580},[518,1015,795],{"class":528},[518,1017,1018,1020,1022],{"class":520,"line":881},[518,1019,983],{"class":580},[518,1021,584],{"class":528},[518,1023,1024],{"class":545}," .ranklint-pages\n",[518,1026,1027,1030,1032,1034,1036],{"class":520,"line":892},[518,1028,1029],{"class":580},"  needs",[518,1031,584],{"class":528},[518,1033,632],{"class":528},[518,1035,976],{"class":545},[518,1037,1038],{"class":528},"]\n",[367,1040,1041,1042,1045,1046,457,1049,1052,1053,1056,1057,487,1059,1061,1062,1065,1066,1069],{},"Добавьте pipeline schedule (CI\u002FCD → Schedules) — обе джобы запускаются только по ",[370,1043,1044],{},"schedule",". Режим монитора никогда не роняет пайплайн: он делает diff против предыдущего сохранённого отчёта и алертит (Slack\u002FTelegram через ",[370,1047,1048],{},"RANKLINT_SLACK_WEBHOOK",[370,1050,1051],{},"RANKLINT_TELEGRAM_BOT_TOKEN"," + ",[370,1054,1055],{},"RANKLINT_TELEGRAM_CHAT_ID",") только при новых проблемах. ",[370,1058,486],{},[370,1060,490],{}," пишут полный отчёт рядом с diff; ",[370,1063,1064],{},"ranklint history --dir .ranklint\u002Freports"," печатает тренд. ",[370,1067,1068],{},"ranklint dashboard"," собирает трендовый сайт с графиками, см. ниже.",[493,1071,1073],{"id":1072},"трендовый-дашборд","Трендовый дашборд",[367,1075,1076,1078,1079,1082,1083,1086],{},[370,1077,1068],{}," собирает из сохранённых monitor-отчётов статический сайт: ",[370,1080,1081],{},"\u003Cout>\u002Findex.html"," с трендом и ",[370,1084,1085],{},"\u003Cout>\u002Fruns\u002F\u003Ckey>.html"," с полным html-отчётом каждого прогона. Каждая страница — один файл, данные, стили и скрипт встроены. Снаружи подключаются только шрифты Google Fonts, без них страницы показываются системными шрифтами. Тёмная тема, на ширине телефона без горизонтальной прокрутки.",[1088,1089,1090,1106],"table",{},[1091,1092,1093],"thead",{},[1094,1095,1096,1100,1103],"tr",{},[1097,1098,1099],"th",{},"Флаг",[1097,1101,1102],{},"По умолчанию",[1097,1104,1105],{},"Что делает",[1107,1108,1109,1128,1143,1156,1169,1201,1213,1235],"tbody",{},[1094,1110,1111,1117,1125],{},[1112,1113,1114],"td",{},[370,1115,1116],{},"--dir",[1112,1118,1119,1122,1123],{},[370,1120,1121],{},"monitor.dir"," или ",[370,1124,751],{},[1112,1126,1127],{},"сохранённые отчёты (fs-хранилище)",[1094,1129,1130,1135,1140],{},[1112,1131,1132],{},[370,1133,1134],{},"--out",[1112,1136,1137],{},[370,1138,1139],{},"ranklint-dashboard",[1112,1141,1142],{},"каталог для результата",[1094,1144,1145,1150,1153],{},[1112,1146,1147],{},[370,1148,1149],{},"--limit",[1112,1151,1152],{},"все",[1112,1154,1155],{},"взять только N последних отчётов",[1094,1157,1158,1163,1166],{},[1112,1159,1160],{},[370,1161,1162],{},"--run-url",[1112,1164,1165],{},"—",[1112,1167,1168],{},"кнопка «Run audit», например страница CI для запуска пайплайна",[1094,1170,1171,1176,1178],{},[1112,1172,1173],{},[370,1174,1175],{},"--logo",[1112,1177,1165],{},[1112,1179,1180,1181,457,1184,457,1187,457,1190,1122,1193,1196,1197,1200],{},"ваш логотип вместо wordmark ranklint: локальный файл ",[370,1182,1183],{},".png",[370,1185,1186],{},".svg",[370,1188,1189],{},".jpg",[370,1191,1192],{},".jpeg",[370,1194,1195],{},".webp"," до 200 КБ (встраивается как data URI) или ",[370,1198,1199],{},"http(s)"," URL. Внизу страницы тогда появляется небольшая ссылка «powered by ranklint»",[1094,1202,1203,1208,1210],{},[1112,1204,1205],{},[370,1206,1207],{},"--brand-name",[1112,1209,1165],{},[1112,1211,1212],{},"название рядом с логотипом, оно же alt картинки",[1094,1214,1215,1220,1225],{},[1112,1216,1217],{},[370,1218,1219],{},"--accent",[1112,1221,1222],{},[370,1223,1224],{},"#b4f13c",[1112,1226,1227,1228,1122,1231,1234],{},"акцентный цвет ",[370,1229,1230],{},"#rgb",[370,1232,1233],{},"#rrggbb",": кнопки, активные фильтры, ссылки, линии графиков, подсказки по исправлению. Цвета severity не меняются, текст на кнопке становится чёрным или белым по контрасту",[1094,1236,1237,1242,1244],{},[1112,1238,1239],{},[370,1240,1241],{},"--cwd",[1112,1243,1165],{},[1112,1245,1246,1247],{},"где искать ",[370,1248,1249],{},"ranklint.config",[367,1251,1252],{},"Со своим брендом и кнопкой запуска пайплайна в CI:",[501,1254,1258],{"className":1255,"code":1256,"language":1257,"meta":509,"style":509},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","ranklint dashboard --dir public\u002Freports --out public \\\n  --logo brand\u002Flogo.svg --brand-name \"Example Inc.\" --accent \"#3b82f6\" \\\n  --run-url \"$CI_PROJECT_URL\u002F-\u002Fpipelines\u002Fnew\"\n","bash",[370,1259,1260,1283,1315],{"__ignoreMap":509},[518,1261,1262,1265,1268,1271,1274,1277,1280],{"class":520,"line":521},[518,1263,449],{"class":1264},"sBMFI",[518,1266,1267],{"class":545}," dashboard",[518,1269,1270],{"class":545}," --dir",[518,1272,1273],{"class":545}," public\u002Freports",[518,1275,1276],{"class":545}," --out",[518,1278,1279],{"class":545}," public",[518,1281,1282],{"class":532}," \\\n",[518,1284,1285,1288,1291,1294,1297,1300,1303,1306,1308,1311,1313],{"class":520,"line":552},[518,1286,1287],{"class":545},"  --logo",[518,1289,1290],{"class":545}," brand\u002Flogo.svg",[518,1292,1293],{"class":545}," --brand-name",[518,1295,1296],{"class":528}," \"",[518,1298,1299],{"class":545},"Example Inc.",[518,1301,1302],{"class":528},"\"",[518,1304,1305],{"class":545}," --accent",[518,1307,1296],{"class":528},[518,1309,1310],{"class":545},"#3b82f6",[518,1312,1302],{"class":528},[518,1314,1282],{"class":532},[518,1316,1317,1320,1322,1325,1328],{"class":520,"line":559},[518,1318,1319],{"class":545},"  --run-url",[518,1321,1296],{"class":528},[518,1323,1324],{"class":532},"$CI_PROJECT_URL",[518,1326,1327],{"class":545},"\u002F-\u002Fpipelines\u002Fnew",[518,1329,1330],{"class":528},"\"\n",[367,1332,1333],{},"В левой панели: сайт, время последнего прогона, кнопка «Run audit» и показатели: errors, warnings, info, страницы и средний Lighthouse performance. У каждого дельта к предыдущему прогону и полоса с засечкой на прошлом значении. Справа панели:",[384,1335,1336,1339,1345,1348,1351],{},[387,1337,1338],{},"новые и исправленные проблемы с прошлого прогона, по правилам, ошибки первыми;",[387,1340,1341,1342,1344],{},"графики по времени: errors и warnings, средние баллы Lighthouse, CrUX LCP и INP. Без данных CrUX панель подсказывает, как их включить через ",[370,1343,395],{},";",[387,1346,1347],{},"топ правил и Lighthouse performance по страницам;",[387,1349,1350],{},"обозреватель проблем последнего прогона;",[387,1352,1353],{},"архив прогонов со ссылками на их отчёты.",[367,1355,1356],{},[1357,1358],"img",{"alt":1359,"height":1360,"loading":1361,"src":1362,"width":1363},"Дашборд ranklint для example.com: показатели с дельтами в левой панели, новые и исправленные проблемы с прошлого прогона, тренд ошибок, баллы Lighthouse и топ правил",900,"lazy","\u002Fdashboard\u002Fdashboard-1440.webp",1440,[367,1365,1366],{},"Графики появляются со второго прогона. Клик по правилу или странице в любой панели открывает его в обозревателе.",[367,1368,1369,1370,457,1373,1376,1377,382],{},"Обозреватель группирует проблемы по правилу или по странице и фильтрует по severity, тексту, разделу сайта, локали и «только новые». Локаль — первый сегмент пути, если он похож на код языка (",[370,1371,1372],{},"de",[370,1374,1375],{},"pt-br","). В фильтре разделов видно число страниц и проблем в каждом. Блок «Fix once» собирает проблемы, которые повторяются минимум на 5 страницах и занимают не меньше 40% сайта или 80% раздела: обычно это один шаблон или компонент. Карточка страницы — чек-лист по правилам: как исправить, ссылка на документацию, отметки NEW и затронутые элементы с кнопкой копирования. Без JavaScript обозреватель остаётся статическим списком блоков ",[370,1378,1379],{},"\u003Cdetails>",[367,1381,1382],{},[1357,1383],{"alt":1384,"height":1385,"loading":1361,"src":1386,"width":1387},"Блок «Fix once»: одна ошибка, og:image отвечает 404, повторяется на 26 из 28 страниц по всему сайту",238,"\u002Fdashboard\u002Fdashboard-fix-once.webp",1916,[367,1389,1390],{},[1357,1391],{"alt":1392,"height":1393,"loading":1361,"src":1394,"width":1395},"Карточка страницы в режиме «By page»: три ошибки на \u002Fbugs\u002Fjsonld-broken с подсказками, как исправить, id правил, ссылками на документацию у встроенных правил и отметкой «fix once in the template» для проблемы на весь сайт",1074,"\u002Fdashboard\u002Fdashboard-page.webp",2014,[367,1397,1398,1399,1402],{},"В ",[370,1400,1401],{},"runs\u002F\u003Ckey>.html"," тот же обозреватель, по умолчанию сгруппированный по страницам. Отметки NEW и дельты там считаются относительно предыдущего сохранённого прогона. Ещё в html-отчёте CrUX p75 с оценкой по порогам Google и Lighthouse по страницам.",[367,1404,1405,1406,1409,1410,1413,1414,1416,1417,1419],{},"GitLab Pages с историей: отчёты лежат в ",[370,1407,1408],{},"public\u002Freports",", а перед прогоном джоба восстанавливает прошлый ",[370,1411,1412],{},"public\u002F"," из артефактов последней джобы ",[370,1415,479],{}," — архив растёт без отдельного хранилища. ",[370,1418,432],{}," ограничивает его размер.",[501,1421,1423],{"className":512,"code":1422,"language":514,"meta":509,"style":509},"monitor: { storage: 'fs', dir: 'public\u002Freports', keep: 90 },\n",[370,1424,1425],{"__ignoreMap":509},[518,1426,1427,1429,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449,1451,1453,1455,1457,1459,1461,1464],{"class":520,"line":521},[518,1428,463],{"class":1264},[518,1430,584],{"class":528},[518,1432,529],{"class":528},[518,1434,730],{"class":1264},[518,1436,584],{"class":528},[518,1438,542],{"class":528},[518,1440,737],{"class":545},[518,1442,599],{"class":528},[518,1444,624],{"class":528},[518,1446,744],{"class":1264},[518,1448,584],{"class":528},[518,1450,542],{"class":528},[518,1452,1408],{"class":545},[518,1454,599],{"class":528},[518,1456,624],{"class":528},[518,1458,758],{"class":1264},[518,1460,584],{"class":528},[518,1462,1463],{"class":620}," 90",[518,1465,602],{"class":528},[501,1467,1469],{"className":783,"code":1468,"language":785,"meta":509,"style":509},"include:\n  - remote: 'https:\u002F\u002Fraw.githubusercontent.com\u002Faakazancev\u002Franklint\u002Fmain\u002Fpresets\u002Fgitlab-ci\u002Fseo.yml'\n\npages:\n  extends: .ranklint-base\n  rules:\n    - if: $CI_PIPELINE_SOURCE == \"schedule\"\n    - if: $CI_PIPELINE_SOURCE == \"web\"\n  script:\n    - command -v unzip > \u002Fdev\u002Fnull || (apt-get update -qq && apt-get install -y -qq unzip)\n    - >\n      curl --fail --silent --location --output public.zip\n      --header \"JOB-TOKEN: $CI_JOB_TOKEN\"\n      \"$CI_API_V4_URL\u002Fprojects\u002F$CI_PROJECT_ID\u002Fjobs\u002Fartifacts\u002F$CI_DEFAULT_BRANCH\u002Fdownload?job=pages\"\n      && unzip -q -o public.zip || true\n    - ranklint audit --url https:\u002F\u002Fexample.com --mode monitor\n    - ranklint dashboard --dir public\u002Freports --out public --run-url \"$CI_PROJECT_URL\u002F-\u002Fpipelines\u002Fnew\"\n  artifacts:\n    paths:\n      - public\n",[370,1470,1471,1477,1491,1495,1501,1510,1517,1530,1541,1548,1555,1562,1567,1573,1579,1585,1593,1601,1609,1617],{"__ignoreMap":509},[518,1472,1473,1475],{"class":520,"line":521},[518,1474,948],{"class":580},[518,1476,795],{"class":528},[518,1478,1479,1481,1483,1485,1487,1489],{"class":520,"line":552},[518,1480,955],{"class":528},[518,1482,958],{"class":580},[518,1484,584],{"class":528},[518,1486,542],{"class":528},[518,1488,965],{"class":545},[518,1490,549],{"class":528},[518,1492,1493],{"class":520,"line":559},[518,1494,556],{"emptyLinePlaceholder":555},[518,1496,1497,1499],{"class":520,"line":577},[518,1498,479],{"class":580},[518,1500,795],{"class":528},[518,1502,1503,1505,1507],{"class":520,"line":605},[518,1504,983],{"class":580},[518,1506,584],{"class":528},[518,1508,1509],{"class":545}," .ranklint-base\n",[518,1511,1512,1515],{"class":520,"line":657},[518,1513,1514],{"class":580},"  rules",[518,1516,795],{"class":528},[518,1518,1519,1522,1525,1527],{"class":520,"line":720},[518,1520,1521],{"class":528},"    -",[518,1523,1524],{"class":580}," if",[518,1526,584],{"class":528},[518,1528,1529],{"class":545}," $CI_PIPELINE_SOURCE == \"schedule\"\n",[518,1531,1532,1534,1536,1538],{"class":520,"line":768},[518,1533,1521],{"class":528},[518,1535,1524],{"class":580},[518,1537,584],{"class":528},[518,1539,1540],{"class":545}," $CI_PIPELINE_SOURCE == \"web\"\n",[518,1542,1543,1546],{"class":520,"line":873},[518,1544,1545],{"class":580},"  script",[518,1547,795],{"class":528},[518,1549,1550,1552],{"class":520,"line":881},[518,1551,1521],{"class":528},[518,1553,1554],{"class":545}," command -v unzip > \u002Fdev\u002Fnull || (apt-get update -qq && apt-get install -y -qq unzip)\n",[518,1556,1557,1559],{"class":520,"line":892},[518,1558,1521],{"class":528},[518,1560,1561],{"class":524}," >\n",[518,1563,1564],{"class":520,"line":924},[518,1565,1566],{"class":545},"      curl --fail --silent --location --output public.zip\n",[518,1568,1570],{"class":520,"line":1569},13,[518,1571,1572],{"class":545},"      --header \"JOB-TOKEN: $CI_JOB_TOKEN\"\n",[518,1574,1576],{"class":520,"line":1575},14,[518,1577,1578],{"class":545},"      \"$CI_API_V4_URL\u002Fprojects\u002F$CI_PROJECT_ID\u002Fjobs\u002Fartifacts\u002F$CI_DEFAULT_BRANCH\u002Fdownload?job=pages\"\n",[518,1580,1582],{"class":520,"line":1581},15,[518,1583,1584],{"class":545},"      && unzip -q -o public.zip || true\n",[518,1586,1588,1590],{"class":520,"line":1587},16,[518,1589,1521],{"class":528},[518,1591,1592],{"class":545}," ranklint audit --url https:\u002F\u002Fexample.com --mode monitor\n",[518,1594,1596,1598],{"class":520,"line":1595},17,[518,1597,1521],{"class":528},[518,1599,1600],{"class":545}," ranklint dashboard --dir public\u002Freports --out public --run-url \"$CI_PROJECT_URL\u002F-\u002Fpipelines\u002Fnew\"\n",[518,1602,1604,1607],{"class":520,"line":1603},18,[518,1605,1606],{"class":580},"  artifacts",[518,1608,795],{"class":528},[518,1610,1612,1615],{"class":520,"line":1611},19,[518,1613,1614],{"class":580},"    paths",[518,1616,795],{"class":528},[518,1618,1620,1623],{"class":520,"line":1619},20,[518,1621,1622],{"class":528},"      -",[518,1624,1625],{"class":545}," public\n",[367,1627,1628,1631,1632,1635,1636,382],{},[370,1629,1630],{},"|| true"," нужен для первого прогона, когда артефактов ещё нет. Ссылка «Run audit» открывает страницу GitLab «Run pipeline», правило ",[370,1633,1634],{},"web"," разрешает джобе запуск из вручную созданного пайплайна. На странице только ссылка, никаких токенов. Вместе с дашбордом публикуются и JSON-отчёты из ",[370,1637,1408],{},[1639,1640,1641],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":509,"searchDepth":552,"depth":552,"links":1643},[1644,1645],{"id":495,"depth":552,"text":496},{"id":1072,"depth":552,"text":1073},"Аудиты прода по расписанию с обогащением полевыми данными и алертами на новые проблемы.","md",null,{},{"title":64,"description":1646},"deuh0oRp2GDjDyTmmJCY_1vLwN3agAvQQgnBLeEaPfY",[1653,1655],{"title":60,"path":61,"stem":62,"description":1654,"children":-1},"Сравнение отчёта с базовым и подключение ranklint к пайплайнам GitLab и GitHub.",{"title":68,"path":69,"stem":70,"description":1656,"children":-1},"Отдельный прогон Chrome с агрегацией по метрикам и порогами на route-паттернах.",1791750384449]