Продвинутое
Нюансы и ограничения
Краевые случаи и осознанные компромиссы краулера, правил и отчётов.
- Дедуп URL при краула: hash отбрасывается, query сохраняется — фасеточные фильтры важны для crawl-budget анализа.
- Исключение — трекинговые параметры:
utm_*,gclid,gbraid,wbraid,fbclid,yclid,msclkid,_gl,mc_cid,mc_eidвырезаются, поэтому/a?utm_source=xи/a— одна страница; остальные параметры сохраняют порядок. - Страница не загрузилась (таймаут, сеть, TLS) → снапшот со statusCode 0 +
crawl:timeout; page-чеки по ней пропускаются — ложных «нет title» не будет. Краулер не падает целиком никогда. - Page-чеки пропускаются и для снапшотов с 4xx/5xx (HTML-404 на битую ссылку
/x.pdfне дастcanonical:requiredи дублей title): саму битую ссылку сообщаетlinks:no-brokenна ссылающейся странице. Site-чеки эти снапшоты по-прежнему видят. - Страница, чьи редиректы заканчиваются на другом origin (внутренняя короткая ссылка
/l/x→apps.apple.com), считается вcrawlStats.external: она не аудируется и ссылки с неё не обходятся;links:no-redirect-chainиlinks:no-brokenпо-прежнему проверяют эту ссылку на ссылающейся странице. Ссылки страницы с редиректом внутри сайта (/a→/b/) резолвятся от конечного URL, а URL, ведущие на уже обойдённый конечный URL, дают один снапшот, который в отчёте идёт под конечным URL. Entry (crawl.entry/--url), редиректящая на другой origin (example.com→www.example.com,http→https), даёт ошибкуcrawl:entry-redirectс origin, который нужно указать вsite.url/--url; остальные entries краулятся дальше. crawl.respectRobots(по умолчаниюtrue):<origin>/robots.txtзагружается один раз, ссылки, закрытые для*(или для группы, подходящей подcrawl.userAgent), не краулятся; матчинг как у Google —*,$, побеждает самое длинное правило, при равной длинеAllow. Нет robots.txt или ошибка — ничего не блокируется. URL изcrawl.entry(или--url) краулятся всегда; сэмплыsitemap+sampleфильтруются robots.txt. Не-ASCII в правилах кодируется в percent-encoding, hex сравнивается без учёта регистра. Счётчик —crawlStats.disallowedи строка в логе краула.maxPagesдостигнут →truncated: trueв отчёте — видно, что аудит неполный.- Дев-сервер Nuxt — не для полного краула: компиляция на лету × параллельные вкладки = OOM воркера. Локально гоняйте
--startпо сборке или снижайтеconcurrency/maxPages; полный аудит — по deployed-окружениям. insecureTlsвыставляетignoreHTTPSErrorsPlaywright'у иNODE_TLS_REJECT_UNAUTHORIZED=0процессу — только для dev/staging профилей.- Lighthouse требует установленный Chrome (chrome-launcher) и не работает с self-signed TLS — гоняйте по deployed-окружениям.
- Вьюпорт above-fold эвристики — дефолтный Playwright 1280×720 (или
crawl.viewport). srcset-only картинки без src не меряются. http:x-robots-consistentвходит в DevTools Level 1, но заголовков у панели нет — там он no-op.- Функции-источники sitemap самодостаточны: никаких замыканий на переменные nuxt.config.
- Профиль накладывается defu-патчем: объекты сливаются, скаляры перекрываются.
- Один прогон монитора = один JSON; ключи хранилища: timestamp (monitor) или commit SHA (MR).
- DOM парсится linkedom (сервер) / DOMParser (панель) — один и тот же код правил работает в обеих средах.
- Ошибка одного правила (
internal:check-failed, info) не валит аудит; неизвестный rule-id в конфиге — валит с did-you-mean.