What a free audit does, and doesn't.
Free tier: $0, up to 200 pages per audit (50 without an account) — v0.6 samples K=10 URLs per detected template up to the page budget, 24-hour anonymous retention (30-day window for signed-in accounts), 3 audits per day per browser session. Pro tier: $19/month ($180/year with 14-day refund), K=20 per template on manual re-audits (up to 500 total), K=10 per template on the recurring weekly monitoring run (typically 80 fetches for a standard pSEO directory), 50 audits per day, unlimited retention. Comparable hosted crawlers like Screaming Frog ($259/year), Sitebulb ($35/month), and Ahrefs Site Audit ($129/month) charge for the same surface area. Written plainly. No dark patterns, no asterisks hiding behind footnotes. If something here feels unfair or unclear, reply to hello@pseolint.dev and we'll fix it.
Scope — what we actually audit
- Audit focus
- Programmatic-SEO sites (template-driven content at scale) and AI Overview readiness. v0.6 audits by template — one verdict per template cluster, site verdict = worst template with ≥5% coverage. SpamBrain triggers from the March 5, 2024 scaled-content-abuse update + the May 7, 2024 site-reputation-abuse policy + the AEO patterns that determine ChatGPT, Perplexity, and Google AI Overview citations.
- Pages per anon audit (no account)
- Up to 50, sampled from your sitemap.xml (templates detected, K=10 per template up to budget)
- Pages per free audit (signed-in)
- Up to 200, sampled from your sitemap.xml (templates detected, K=10 per template up to budget)
- Pages per Pro audit (manual re-audit)
- K=20 per template — up to 500 total across all templates. Re-audits use the larger sample for tighter variance estimates.
- Pages per Pro scheduled monitoring run
- K=10 per template, every monitoring run. Typical pSEO directory: 8 templates × 10 samples = 80 fetches per run. More efficient than the v0.5 flat 200-page model and covers all templates instead of one dominant cluster.
- Cumulative coverage (Pro monitoring)
- 10 URLs sampled per template every monitoring run — across all templates. A 12-week monitored site with 8 templates builds 8 × 10 × 12 = 960+ unique URLs in audit history (before deduplication). Coverage grows faster on sites with URL churn; stable sites converge quickly. The per-domain dashboard shows the running total across all templates.
- Discovery source
- sitemap.xml is authoritative. If the sitemap lists 9 URLs, we audit those 9. We do not follow links beyond the sitemap by default.
- Deep-crawl discovery
- Opt-in option (
fillBudgetViaLinkDiscovery). When enabled, we follow same-origin links to top up the sample — respectfully, withrobots.txtDisallowrules honored. - What we do not do
- We do not attempt to log in, bypass paywalls, submit forms, execute logged-in-user journeys, or fetch non-HTML assets.
Why per-template sampling?
v0.5 took a flat random sample of 200 URLs across the whole site. On a 100k-URL directory, that's 0.2% coverage — dominated by the largest template cluster, leaving smaller templates unsampled. A broken /listing/* template covering 90k pages would average out with clean category pages and score caution instead of concerning.
v0.6 allocates K=10 samples per template: T templates × K samples. A typical pSEO directory (T=8, K=10) = 80 fetches — fewer than the old 200, with full template coverage. The site verdict reflects the worst template, not the average URL. Fix the broken template: fix N pages in one shot.
What pseolint doesn't audit
- Core Web Vitals / page speed
- Out of scope. Use PageSpeed Insights (free) or the Chrome DevTools Lighthouse panel.
- Broken links + general site crawl
- Out of scope. Use Sitebulb ($35/mo) or Screaming Frog ($259/yr, free up to 500 URLs).
- Competitor research / backlink audits
- Out of scope. Use Ahrefs ($129/mo).
- Keyword research + rank tracking
- Out of scope. Use Semrush ($139.95/mo) or Ahrefs.
- Image weight / asset optimization
- Out of scope. PageSpeed Insights covers it; Sitebulb and Screaming Frog go deeper.
- Schema-validator-style validation
- Partial. We check schema-content consistency and required JSON-LD types as part of the AEO ruleset, but we don't replace Google's Rich Results Test for full schema validation.
Rate limits & cooldowns
- Anonymous audits
- 3 per day per browser session
- Free account audits
- 5 per day (does not roll over)
- Pro account audits
- 50 per day
- Cache between users
- If anyone audited the same URL in the last 60 minutes, you get that result instantly (no new crawl fired). Free users cannot force a re-crawl.
- Re-audit cooldown
- Authenticated accounts can force a fresh audit. Minimum 5 minutes between forced re-audits of the same URL, regardless of plan — target sites pay for our crawls in bandwidth.
- Per-host ceiling
- A single domain can receive at most 30 fresh audits per hour across all users, to prevent viral-post amplification from hammering a target.
How we treat the site we're auditing
- User-Agent
Mozilla/5.0 (compatible; pseolint/0.6.3; +https://pseolint.dev/bot)- robots.txt
- Fully honored — both Disallow paths and Crawl-delay pacing (capped at 60 seconds per request).
- Retry-After
- Honored once per URL, capped at 30 seconds. We don't hammer sites that ask us to back off.
- Concurrency
- At most 5 parallel fetches, dropping to 1 if Crawl-delay is declared.
- Total bandwidth per audit
- Capped at 50 MB of fetched bytes. We stop when we hit it, even if the budget isn't filled.
- SSRF protection
- localhost, private networks, and non-http(s) schemes are rejected. We only audit public sites.
Retention — how long reports live
- Anonymous (no account)
- 24 hours, then auto-deleted
- Free account
- 30 days
- Pro account
- Indefinite (until you delete)
- Monitored-domain audits (Pro)
- 90 days of history for trend charts
- When a report expires
- The cached HTML + structured summary are removed from object storage. Score, pageCount, and findingCount stay in the database for analytics. Source URL stays too.
What's public vs private
- Free-tier audits
- Public by default — shareable link + eligible for the /leaderboard. The URL + host + score are visible to anyone who has the share link.
- Pro-tier audits
- Private by default — only the audit owner can view.
- Visibility toggle
- Authenticated users can flip any of their own audits to private at any time via the audit page. Anonymous audits cannot be flipped (we can't confirm ownership).
- Leaderboard inclusion
- Public + completed + unexpired audits with 5+ pages. One entry per domain. Opt out by flipping to private (authed only) or letting an anonymous audit expire.
Accuracy caveats
- Sampling is lossy
- A 50-page sample of an 860-page site can miss template clusters entirely. The score reflects what we saw, not what's there. For full coverage, monitor on Pro or make sure your sitemap is complete.
- No JavaScript rendering by default
- We audit server-rendered HTML. Client-side rendered pages will look empty to us. Pro has optional browser rendering via CDP.
- The rule set is a subset of SpamBrain
- We infer plausible SpamBrain signals from public documentation, research, and observed patterns. We do not have access to Google's actual classifier and make no claim of one-to-one correspondence.
- Score is a heuristic
- Treat it as a structured conversation, not a verdict. A low score isn't a guarantee of indexing success. A high score isn't proof SpamBrain will act.
Operational controls (when things go wrong)
- Kill switch
AUDITS_MODE=readonly- What readonly mode does
- New audits return 503 with a clear message; existing reports, leaderboards, and dashboards remain fully functional.
- Blocklist
- We can pause audits for a specific user or target host if abuse is detected. We always notify the affected party and explain why.
This page is the source of truth for what you can expect from pseolint's hosted audits. If you see behavior on the service that contradicts something here, that's a bug — please report it.