v0.0.173
Released Nov 8, 2026
Release Notes
A page the parser cannot read no longer reports missing titles and headings, content/mojibake and links/anchor-mismatch handle more real text correctly, ax/ai-crawlers reports search-engine bots, the macOS Intel binary runs on older CPUs, and the REST API docs cover rate limits and unknown request fields.
Added
- The REST API docs and the OpenAPI file state that
POST /v1/agent-runsfrom an API key answers an unknown top-level field with a400VALIDATION_ERRORnaming it, so a typo such asconifgfails instead of running a default audit, and list the accepted top-level fields. ax/ai-crawlersreports Googlebot, Bingbot and Applebot with a path-aware verdict. A new info check,search-engine-access, evaluates each search-engine bot against the audited URL with the shared robots.txt matcher and says whether it is allowed, blocked from the site root, blocked for that path only, or blocked at the root but re-permitted for that path by anAllowrule. Applebot with no group of its own follows the Googlebot group, as Apple documents. The 24 AI tokens and their checks are unchanged.- The REST API docs state the per-key request limit: 60 requests per minute on Free, 300 on Starter, Team and Enterprise, for
POST /v1/agent-runsandPOST /v1/reports(the read endpoints are not metered), with theRateLimit-*andRetry-Afterheaders and the plain string429body. The OpenAPI file no longer lists the limiter's429on the read endpoints and shows the real body.
Fixed
- A page whose markup could not be parsed at all (read as an empty document, with the
html-parsewarning oncrawl/html-size) no longer reports what it was never seen to have. The page rules that read the markup (title, H1, meta description,lang, viewport, thin content, no<main>and the rest) are skipped as not evaluated with the reasonunread-page: it is listed underskippedChecks, and a prior finding on that page carries instead of resolving. The rules that judge the URL, the response (headers, timing, size, MIME type), or the raw HTML still run:a11y/focus-visible,analytics/consent-mode,content/mime-type,core/doctype,crawl/html-size,integrity/kit-signature,perf/browser-required,perf/cache-headers,perf/compression,perf/http2,perf/ttfb,security/cookie-flags,security/httpsand theurl/*rules. The cloud analysis rules (ai/llm-parsability,eeat/authority-signals) are skipped too, and the page is not sent to the cloud, so it costs no credits. The page is left out of the site-level data (no page_features row, no collectors), so the site rules that compare pages (word-count norm, asset divergence, NAP consistency, template discontinuity, duplicate titles) never count it, and it is not the template representative whose verdicts are copied to its cluster. Known gaps: the page's outgoing links are not read, solinks/orphan-pagescan flag a page only it linked to, and the site-metadata payload still includes the page. No input known today reaches this path (a class attribute is cut instead), so this is a safeguard (#1570) - The macOS Intel (
darwin-x64) binary is now built with Bun's baseline target, like the other x64 builds, so it no longer dies with an illegal instruction (exit 132) on Intel Macs whose CPU lacks AVX instructions #1562 content/mojibakereports the Portuguese and Spanish lowercase accents.ã,á,ó,ú,Ãplus a soft hyphen,â,êandõin place of ã, á, ó, ú, í, â, ê and õ are detected, while correctly encoded text and uppercase words such asMANHÃstay clean. (#1623)links/anchor-mismatchno longer warns on a German compound head noun or a generic listing label.Handschuhelinking to a page titledFahrradhandschuheshares a word, and a label made only of listing words (Alle Artikel,View all posts) pointing at an article or blog listing is counted as not judged. An unrelated anchor still warns. (#1626)
Update to this version
squirrelscan will auto-update, or run this command to update now:
$