Roadmap
Eleven phases, ordered so each one unlocks the next. Phase 0 is what you can install today. Nothing beyond it is in the published package yet.
1 of 11 phases shipped · 1 in progress · 9 planned
The full item-by-item backlog, with a build-cost tag on every line, lives in features.md in the repository. This page is the summary.
Phase 0: Shipped
The engine as published: 93 rules across 15 categories.
audit(url, options)returning a scored report, plusauditToHtml,auditToMarkdown,auditScore, andrender.- Multipage concurrent crawl with
maxPages,concurrency, andmaxDepth. robots.txtandsitemap.xmlfetched once per site and shared with every rule.- A shared link checker, so a URL referenced by ten rules is fetched once.
- Severity-weighted scoring: per page, per category, and a harsher overall number.
- Optional rendered stage through local Chromium or the PageSpeed Insights API.
- Three output formats: JSON, Markdown, and one self-contained HTML file.
- Pluggable rule registry. One file and one import adds a rule.
- One runtime dependency.
Phase 1: Report foundation and free measurements
In progress · next up
The gate everything else waits on.
Most of what a page audit is expected to report are measurements, not verdicts: counts, tables, percentages. The report object holds only pass and fail findings today, so there is nowhere to put them. Building any of the later phases before this exists means building them twice.
- A
metricsoutput besidefindings, per category, carrying numbers and tables. - A value status of
ok,warn,bad, ormissing, so a measurement can carry a verdict without inventing a finding. - Capped tables with a "showing N of M" count, for images, links, keywords, and the header tree.
- A public
rulesoption, so a custom rule array can be passed toaudit()without forking.
Then everything already sitting in the parsed DOM gets harvested:
- Status code, page size, declared language, and published and updated dates as reported values.
- Markup hygiene counters: inline styles,
<style>blocks in the body, script tags, comment nodes, placeholder links. - Canonical match: does the canonical equal the URL that was actually audited.
- Link counters and three link tables: dofollow, nofollow, and duplicate URLs with every anchor used for each.
- Header counts per level and the full header tree in document order.
- The complete Open Graph and Twitter Card tables, with a status per property.
- Character counts for title, description, and H1, plus an H1 length check.
Phase 2: Text, keyword, and readability engine
Planned · not started
One module that pays for four report sections.
- A tokenizer with per-language stop word lists, lemma grouping, and n-gram extraction.
- Main-content extraction, so nav and footer text stop polluting every statistic.
- Text statistics: unique words, stop word share, redundancy, average sentence length, characters excluding spaces.
- Readability: Flesch reading ease, Flesch-Kincaid grade, Gunning Fog.
- Top words as 1, 2, and 3-word phrases with counts and percentages.
- A keyword relevance matrix: each top keyword present or absent in the title, description, and H1.
- Keyword highlight markers for headings, so a renderer can mark the matched spans.
Phase 3: Answer engine and content structure
Planned · not started
The part most audit tools do not have, and it runs on a DOM already parsed.
- Answer snippet check: is there a definition or short answer in the first four content blocks, and how long is it.
- Q&A structure: question-like H2 count, how many carry a short answer, and the coverage ratio.
- Answer formats: counts of lists, steps, tables, and definitions.
- Topic cluster signals: internal links in main content only, related-reading detection, distinct H2 topics, anchor descriptiveness ratio.
- Passage structure: H2 section count, average words per section, definition-format blocks.
- Agent experience: AI crawler access in
robots.txt,llms.txt, and whether the main content survives without JavaScript. - Schema depth: the nested type tree, plus microdata and RDFa, not only JSON-LD.
Phase 4: Site-wide crawl intelligence
Planned · not started
The highest-value phase per unit of new infrastructure, since the crawler already visits every page but each rule looks at one page in isolation.
- Duplicate titles, meta descriptions, and H1s across the crawl, grouped by the URLs that share them.
- Near-duplicate content detection through a shingle hash.
- Orphan pages: in the sitemap, linked from nowhere.
- An internal link graph with inbound link counts, so thin-linked pages surface.
- Click depth per page, and a site-wide redirect map.
- Sitemap versus crawl reconciliation, both directions.
- Crawling from the sitemap directly, not only by following links.
- Score thresholds, so a run can fail itself in CI.
- A CLI wrapper over the library, so an audit runs from a terminal or a CI step with no script to write. It was dropped in 1.0.1 and comes back on top of the stable API.
Phase 5: Trust, authority, and compliance
Planned · not started
Cheap pattern detection, high client value.
- Author box, author page link, and author bio detection, with the actual dates reported.
- Structured data trust signals listed by name.
- Refund or returns page, phone and physical address, affiliate disclosure, editorial policy.
- Citation quality: are outbound citations pointing at recognised authoritative domains.
- Local SEO: NAP consistency against LocalBusiness schema, schema completeness, business profile link.
Phase 6: Performance and speed depth
Planned · not started
Mostly surfacing values the rendered stage already collects and discards.
- Total load time, DNS lookup, TCP connection, response time, DOM interactive, DOM content loaded, DOM complete, FCP.
- INP, with an explicit "not measurable without interaction" state rather than an undefined value.
- Layout shift event count and the largest single shift.
- A slow resource list: every request over a threshold.
- Font loading, HTTP/2 and HTTP/3, preconnect hints, third-party script weight.
Phase 7: Tech stack fingerprinting
Planned · not started
A signature table matched against markup, script sources, and headers.
- Analytics per vendor, rather than one "a tag is present" result.
- Ad pixels per vendor.
- CMS, framework, and library detection.
- CDN detection from headers and asset hosts.
Phase 8: Media and asset analysis
Planned · not started
Real value, but it costs extra requests, so it sits behind an opt-in flag with a hard cap.
- A per-image table: URL, pixel dimensions, transfer size, optimisation verdict.
- Natural dimensions through a HEAD or ranged GET.
- Optimisation estimates per format.
- Images served far larger than their layout box.
- Responsive image checks, video schema and captions, favicon and app icons.
Phase 9: Mobile and rendered extras
Planned · not started
Everything that needs a real viewport.
- Tap target size, mobile font size, horizontal overflow, intrusive interstitials.
- Viewport behaviour: disabled zoom, fixed widths.
- Console errors captured during load.
- What content disappears with JavaScript off.
- Screenshot capture attached to the report.
Phase 10: External data and site integrity
Planned · not started
Keys, rate limits, and heuristics with false-positive risk, so it stays opt-in and never runs by default.
- Backlink lookup behind a provider interface.
- Keyword and content gap analysis.
- Index coverage against a search API.
- Obfuscated scripts, injected spam, malware and phishing patterns, leaked secrets.
- Ad-blocker and privacy-filter impact.
Not planned
Worth saying out loud.
- A hosted service or dashboard. The JSON output exists so you can build your own.
- Rule configuration files. Options are passed in code. A config format is a second API to keep in sync.