Advanced

Smart heuristics

How the trickiest rules decide, from locale leaks to TTFB budgets.
  • i18n:no-locale-leak — two layers: (1) html lang vs the URL prefix locale; (2) the language of the text itself — a body clone without script/style/noscript/template → Cyrillic or Arabic script share >50% (Cyrillic → ru/uk/be/bg/sr/mk/kk, Arabic → ar/fa/ur) or stop-word profiles for en/de/fr/es/it (min 40 letters, best score ≥3 and ≥2× the runner-up; unknown locales aren't flagged). Catches Russian text under /en/ even with a correct lang attribute.
  • images:no-lazy-above-fold — Playwright reports the src of images actually inside the viewport (1280×720); matching is per-instance: a lazy duplicate of the same image in the footer isn't flagged. Without data — fallback to "first 3 imgs".
  • http:ttfb-budget — p75 per group: explicit budgets: {'/listing/**': 500} match by route pattern, remaining pages are grouped automatically (segments with ids/uuids → *); an auto group warns only with ≥2 samples — a single cold start is not a signal.
  • http:no-soft-404 — HEAD to a deliberately nonexistent path: 200 → the site masks 404s; plus "not found" text patterns on status-200 pages.
  • indexability:ssr-content — compares ssrHtml with post-hydration html: an H1 that exists only on the client, or <50% of text present in SSR → an indexing error.