KAM Sie Philippe ANgelo

pseolint - Programmatic SEO audit engine for modern web stacks.

Programmatic SEO works until Google's SpamBrain kills your doorway pages. pseolint is an open-source linter that audits your pSEO site by template, not by URL. Catch duplicate clusters and missing tags before they deploy. Hosted or CLI.

Add a comment

Replies

Best
KAM Sie Philippe ANgelo
Salut Product Hunt 👋 I'm Philippe. If you’ve ever built a programmatic SEO site, you know the gap between "1,000 indexed pages" and "1,000 pages that survive a Google SpamBrain pass" is where most projects actually die. I was tired of finding out about missing variables, broken canonicals, and near-duplicate clusters after deploying. Existing SEO tools like Screaming Frog or Sitebulb are built for editorially-curated sites, they check pages one at a time. But pSEO risks happen between pages. So, I built pseolint and pseolint.dev. It’s an audit engine purpose-built for programmatic SEO architectures. Here is how it’s different: Template-first, not URL-first: It clusters your sitemap (e.g., /listing/:slug), samples pages from each, and produces a per-template verdict. Fix one broken template, fix 10,000 pages at once. Graph-level detection: It catches the structural issues per-page tools can't see, like entity-swap doorways, boilerplate-ratios, and thin-content propagation across your site. Built for the developer workflow: Run npx pseolint http://localhost:3000 right against your local dev server (perfect for Next.js/Tailwind stacks) to catch errors before you push. Or drop it in your CI to gate PRs if the risk score spikes. I don't believe in gatekeeping technical infrastructure, so the core engine is completely open-source under the ouranos-labs GitHub organization. You can use the hosted UI at https://pseolint.dev if you prefer a dashboard, or just grab the CLI and run it locally. I’ll be hanging out in the comments all day. I'd love to hear how you currently handle your pSEO QA, answer any technical questions, or take a solid roasting on the codebase. Cheers!