ranklint 1.1.0 release notes
Released: 2026-10-11
Features
- @ranklint/checks, @ranklint/preset-default: New rule links:no-utm-internal (warn) flags internal links that carry UTM or click-id parameters (utm_*, gclid, gbraid, wbraid, fbclid, yclid, msclkid, _gl, mc_cid, mc_eid) (9172e75)
- @ranklint/cli, @ranklint/reporters: New
ranklint dashboardcommand anddashboard()reporter: a single-file HTML monitoring dashboard for GitLab or GitHub Pages built from the stored monitor reports. It shows the latest run with deltas against the previous one, new and fixed issues by rule with errors first, trends for errors, warnings, Lighthouse scores and CrUX field data, Lighthouse by page and the history of every run with a per-run report inruns/<date>.html. An issue explorer groups problems by rule or by page: every page gets a checklist of what to fix with the suggestion and docs link for each rule, the affected elements and a NEW mark, and a "Fix once" block lists issues repeated across a section or the whole site that are fixed in one template. Optional branding with--logo,--brand-nameand--accent: your logo top left, one accent color for the whole page and a "powered by ranklint" line in the side panel. A--run-urlbutton opens the CI pipeline form. The html reporter (--reporter html,--html-output) gets the same design: issues grouped by page by default, the explorer with filters and a Web Vitals section with CrUX ratings and a Lighthouse table. Pages embed their data and script and load the brand fonts from Google Fonts, falling back to system fonts offline. (e35b41d) - @ranklint/core: Export
isTrackingParam(name)from@ranklint/core: true forutm_*andgclid,gbraid,wbraid,fbclid,yclid,msclkid,_gl,mc_cid,mc_eid.normalizeUrlandlinks:no-utm-internalshare this list. (1f669ea)
Fixes
- @ranklint/checks, @ranklint/cli, @ranklint/core: The crawler no longer treats a page that redirects to another origin as a page of the site: it is counted in
crawlStats.external, its links are not crawled and page checks don't run on its HTML. Links of a page redirected inside the site resolve against the final URL, and several URLs redirecting to one final URL give a single snapshot, reported under the final URL. An entry URL redirecting to another origin (example.com→www.example.com,http→https) is reported as acrawl:entry-redirecterror instead of an empty audit.PageSnapshotgets an optionalfinalUrl, filled byHttpFetcherandPlaywrightFetcher.links:no-broken,links:no-redirect-chain,links:permanent-redirects,links:no-utm-internal,links:no-orphansandcanonical:no-chainresolve relative URLs againstfinalUrlwhen it is set. (41da7b8) - @ranklint/checks: Collapse line breaks and repeated spaces in H1 and title text:
indexability:ssr-contentno longer reports multi-line headings as client-side only,headings:h1-lengthandmeta:title-lengthmeasure the normalized text, andheadings:unique-h1,meta:no-duplicate-titleandmeta:no-duplicate-descriptiongroup duplicates that differ only in whitespace.http:no-soft-404matches not-found titles split across lines and shows the normalized title in the message. (98e44d7) - @ranklint/checks: i18n:no-locale-leak ignores subtrees whose lang attribute differs from the page language (660be37)
- @ranklint/checks, @ranklint/reporters:
links:no-utm-internalandimages:*escape"and\in the attribute value of the issue selector.markdownDiff, the monitor dashboard and Slack/Telegram notifications list new and fixed issues by severity (error, warn, info), so errors are not cut off by the item limit. (1f669ea) - @ranklint/checks, @ranklint/cli, @ranklint/core: Page checks skip 4xx/5xx snapshots, so an HTML 404 behind a broken link no longer raises canonical or duplicate title issues; the broken link itself is still reported by
links:no-broken. Newcrawl.respectRobotsoption (defaulttrue): the crawler loads<origin>/robots.txtonce and does not crawl links disallowed for*or for the group matchingcrawl.userAgent; entry URLs are always crawled and the count is reported ascrawlStats.disallowedand in the crawl log. The robots.txt parser moved to@ranklint/core(parseRobotsTxt,isPathDisallowed, still re-exported by@ranklint/checks) and now supports Google*and$patterns, percent-encoded and non-ASCII paths and most specific user agent group selection. robots.txt is read from the raw response (ssrHtml) so browser-rendered fetchers no longer hide its rules from the crawler androbots:*checks. Entry URLs are exempt from robots.txt,sitemap+samplesamples are not. Newlighthouse.urlsoption pins the exact list of paths or URLs measured by Lighthouse inauditand thelighthousecommand; an empty list counts as not set.images:*issues fordata:images use a structuralnth-of-typeselector instead of embedding the data URI. (4cab41d) - @ranklint/checks, @ranklint/core:
normalizeUrlstrips tracking params (utm_*,gclid,gbraid,wbraid,fbclid,yclid,msclkid,_gl,mc_cid,mc_eid), so the crawler no longer visits/a?utm_source=xas a separate page.links:no-broken,links:no-redirect-chainandlinks:permanent-redirectscheck such links once and still report the original href. (d1c054c) - @ranklint/core: Route patterns ending with
/**match their prefix as a glob, so/*/market/**covers/en/marketand/en/market/cars(81088bc)
Highlights
ranklint 1.1.0 turns monitor mode into a place to read results. ranklint dashboard builds a single-file HTML dashboard from the stored monitor reports, ready for GitLab or GitHub Pages: the latest run with deltas, new and fixed issues with errors first, trends for errors, Lighthouse scores and CrUX field data, a per-run report for every date and an issue explorer that turns each page into a checklist of what to fix. A "Fix once" block lists problems repeated across a section or the whole site, and --logo, --brand-name and --accent put your brand on it. The crawler now respects robots.txt, follows redirects to the final URL, skips pages that redirect off the site and drops tracking parameters when it dedupes URLs; lighthouse.urls pins Lighthouse to your key pages, and the new links:no-utm-internal rule flags internal links with UTM tags.