SEO audits
On-demand, full-site SEO audits that render each page with a real headless Chromium — so the findings reflect what a browser (and a crawler) actually sees.
Enable the worker
Audits run in a separate service, off by default:
cd deploy
docker compose --env-file ../.env --profile seo upIt's a separate image on purpose: it carries Chromium (~1 GB against core's ~200 MB), and an out-of-memory kill while rendering a client's site must not be able to take analytics ingestion down. Skip it and everything else still works.
Run one
Click Run audit in the console. Enqueueing returns in milliseconds — a full-site render takes minutes — and the console polls for the result.
The audit reads the site's sitemap.xml, renders each page (up to a cap), and checks:
- On-page — title, meta description, H1s, heading order, image alt text, canonical, robots.
- Broken links — internal and outbound, with the URLs and what they returned.
- Structured data — JSON-LD presence and validity.
- Core Web Vitals — LCP, FCP, TTFB, CLS from the actual render.
Scores
Each page gets a score out of 100 — errors cost more than warnings, because they're the ones that lose traffic (a stray noindex, a missing title). The site score is the average across pages.
A crashed worker doesn't strand an audit: jobs left running are requeued when a worker starts and every five minutes after. A missing sitemap fails with a clear, actionable message rather than hanging.