Most programmatic SEO is doorway-page gardening. v0.6 audits your templates, not just URLs.

Paste a URL. In 60 seconds, see which template clusters trip SpamBrain and which pages get cited by ChatGPT, Perplexity, and Google AI Overviews.

Loading bot check… if this doesn't resolve in a few seconds, refresh the page.

We fetch up to ~500 pages over a few minutes — if it's your site and it's cache-cold, warm it first.

No signup · 3 audits/day50 pages per audit24h retention (anon)See all limits

Analytics-safe — audit runs won't touch your GA, PostHog, Mixpanel, or session-replay dashboards.

airport-hotels.exampledemo
100Risk score
Errors0
Warnings0
Info0
Clean0
Pages0 / 200 · 0.0s
scanning…

↑ Each tile = one page. Color = worst rule that fires on that page. Watch the identity mark in the nav.

v0.6 — audit-as-template

v0.6 audits your site by template. Here's what that looks like.

Pinpoint which template is broken. Fix one template, fix N pages.

This is the site verdict. siteVerdictFromTemplates picks the worst template with ≥5% URL coverage. /listing/:slug covers 97.3% of the site — so its concerning verdict drives the headline, even though /article/:slug is clean. One template-level fix, not 8,201 page-by-page investigations.

Sampling model — before & after

v0.5 — flat random sample

200 URLs drawn across the whole site. On an 8,200-URL directory, 0.2% coverage. The /listing/*template's thin-content crisis averages out with the clean article pages. Site scores caution — the problem is invisible.

200 URLs, 1 pool

v0.6 — K=10 per template

3 templates × 10 samples = 30 fetches (vs 200). Each template gets its own verdict. The /listing/* cluster surfaces an 8/10 thin-content fire rate — unmistakable. /article/* gets credit for being clean.

/listing/:slug
/category/:slug
/article/:slug

Scope

What pseolint is — and isn't.

Self-select before you run it. The audit is narrow on purpose; if you want a 360° SEO crawl, the right tool is somewhere else on this page.

What pseolint is

An audit specifically for programmatic-SEO sites (template-driven content at scale) and AI Overview readiness. v0.6 audits by template — K=10 URLs sampled per template, one verdict per template, site verdict = worst template above 5% coverage. Catches SpamBrain-classifier triggers from the March 27, 2026 core update, the May 7, 2024 site-reputation-abuse policy, the March 5, 2024 scaled-content-abuse update, and the AEO patterns that determine whether ChatGPT, Perplexity, and Google AI Overviews cite your pages.

Use it when

  • — You run a programmatic SEO site (city × service grids, state × LLC fees, app × integration matrices)
  • — You want to know which template is dragging your site score down
  • — You're worried about a Helpful Content System / scaled-content-abuse hit
  • — You want your pages cited in AI Overviews / Perplexity / ChatGPT search
  • — You want a CI gate that fails the build when a template degrades

What pseolint isn't

A general SEO audit. We don't measure Core Web Vitals, broken links, competitor research, keyword research, or backlink audits. If that's what you need, run one of these instead:

Field report

Three pSEO sites, three shapes of risk.

Names redacted. Each grid shows the dominant template's sample. Lower score = safer.

87Risk score5 of 40 clean

airport-hotels.example

Doorway garden

240k pages across /hotel-[city] templates. 94% of pages scored below 30 on uniqueness. SpamBrain treats these as a single thin cluster — one structural fix, not 240,000.

62Risk score15 of 40 clean

legal-directory.example

AI-generated, no receipts

Structural hygiene is fine. Every article is credible prose. Zero citations, zero bylines — signals SpamBrain increasingly uses to distinguish generation from reporting.

34Risk score26 of 40 clean

recipe-programmatic.example

Clean run

180 category pages with genuine variation in ingredient lists, prep time, first-person intros. Templates exist, but each page has a human-sized reason to exist. Rare.

By the numbers

The audit, in measurable terms.

Specific values you can cite — what we run, what we cap, and which Google policies the ruleset maps to.

Median audit time
1 minute
K per template (Pro)
10 URLs
Pro plan
$19 / month
Anon retention
24 hours
  • Template-aware SpamBrain + AEO scoring (v0.6) — v0.6 pivots the unit of analysis from URL to template. K=10 URLs sampled per template, one verdict per template, site verdict = worst template with ≥5% coverage. Programmatic-directories, blogs, ecommerce, docs, and small-marketing sites remain weighted differently. Classification-driven scoring shipped in v0.4.3; v0.5 added change-driven monitoring; v0.5.1 added links/host-section-divergence; v0.5.2 added 4 content-quality rules; v0.6 added per-template breakdown across all 32 rules.
  • Engineering rigor, not marketing. Doorway-pattern findings cluster by template (one line per template group, not per-pair noise). --sample-seed makes verdicts reproducible across runs. Info-severity findings can't accumulate past a per-bucket cap. The open-source calibration corpus + runner + regression tests guard against engine drift on each release. Full engineering log at /methodology.
  • Free tier: up to 200 pages per audit (templates detected, K=10 per template), 3 audits per browser session per day, reports retained 24 hours for anonymous runs and 30 days once you sign in.
  • Pro tier: $19 per month for per-domain template-aware monitoring — K=10 per template every monitoring run, cumulative coverage across all templates grows over time, 50 audits per day and unlimited trend history.
  • Detection maps to current Google policy, leading with what hit pSEO most recently: the March 27, 2026 core update that tightened scaled-content signals on date-stacked corpora, the May 7, 2024 site-reputation-abuse policy that closed the parasite-SEO loophole (now enforced by links/host-section-divergence), the March 5, 2024 scaled-content-abuse update, and the 2022 SpamBrain rebuild that moved enforcement from manual review to silent classifier-time suppression.
  • Crawler defaults: a hard 50 MB bandwidth cap per audit, 5 parallel fetches, full robots.txt respect including Crawl-delay capped at 2 minutes.
  • Open source: MIT-licensed at github.com/ouranos-labs/pseolint, with the core engine, CLI, GitHub Action, and MCP server published as separate packages on January 15, 2026.
  • SLA targets: 99.9% hosted-audit availability, deduped responses for repeat URLs in under 5 minutes, and any forced re-crawl held to a 5 minutes minimum spacing.
  • Default thresholds: thin-content fires below 300 words, near-duplicate fires above 85% SimHash similarity, and boilerplate-ratio flags pages with over 60% shared template text.

One URL. 60 seconds. A per-template verdict you can ship.