How the detector works
46 signals across 6 categories · 41 of them score
A transparent, deterministic heuristic for spotting patterns associated with vibe-coded and AI-generated sites. The score is an estimate, not proof of authorship.
When you scan a URL we fetch its HTML and linked CSS, then run 46 independent signals over the result. Each signal looks for one specific habit of AI site generators. One signal alone proves nothing; the score comes from how many fire, how heavy they are, and how they combine.
5 of the 46 are reported but excluded from the score, because calibration found them no more common on generated pages than on hand-built ones. The index marks each one.
CSS Architecture 5 signals
A high share of elements styled through style attributes instead of stylesheets. Hand-built sites centralize styles; prompted ones spray them inline.
Walls of stock Tailwind utility classes with no custom design tokens. The default diet of v0, Bolt, and friends.
No naming convention, no layering, no system. Just whatever the model emitted that day.
How much of the styling is generic utilities versus classes someone actually named. Humans name things.
Five or more families of generic landing-page class names at once - faq-item, feature-list, section-header, btn-primary, hero-subtitle, pricing-card. A hand-built site names things after its own design; a prompted one reaches for the same furniture nouns every time.
HTML Quality 8 signals
Divs as far as the parser can see. Semantic elements like nav, main, and article barely appear in generated markup.
Missing or multiple h1 elements and heading-level jumps in source markup. Scaffolded pages drift here when nobody reads the outline; a structural heuristic, not a WCAG-conformance result.
Inputs without labels, controls without names. The accessibility details prompt-to-page tools routinely skip.
Clickable divs and spans doing a button's job, with no keyboard or screen reader support.
No lang attribute on the html element. Tiny, default, and constantly forgotten.
A nav that only scrolls you around one long page. The signature shape of one-shot landing page output.
Social icons that link to # or a platform homepage. Decorative trust signals nobody hooked up.
Images shipped without alt text. Accessibility basics left behind in the rush.
Copy & Content 11 signals
Language models lean on the em dash far more than typical human copy does. The threshold is a generous one em dash per three sentences, so ordinary editorial style clears while generated prose fires.
Seamless, transformative, elevate, leverage. We keep a dictionary of LLM marketing vocabulary and count the hits.
Headline templates the models reach for on every landing page, in the family of 'X. Reimagined.'
The 'whether you're a startup or an enterprise' sentence shape that generated copy defaults to.
Rocket, sparkles, and checkmark emoji standing in for an icon system.
Exactly three features in exactly three columns. The default information architecture of generated landing pages.
Lorem ipsum and template placeholders that made it all the way to production.
Testimonials with stock names and suspiciously interchangeable praise.
The sparkle emoji is the unofficial logo of AI features. Counted accordingly.
Three or more sections from the standard template running order: Features, How it works, Why us, Trusted by, Pricing, FAQ, Ready to get started. Real sites are shaped by their product; this is the average of every template a model has read.
Four or more stock launch phrases on one page - simple pricing, no credit card required, cancel anytime, built for X, in minutes, one-click. Any one is fine; a pile of them is a template being filled in rather than a product being described.
AI Aesthetic 9 signals
Purple-to-blue hero gradients and gradient text. The house style of the era.
A gradient clipped to the headline glyphs. The two-toned hero flourish.
Frosted glass cards and backdrop blur on every surface.
Fade-up-on-scroll on every section, straight from the template.
Everything rounded to within an inch of its life.
Neon glow shadows in the accent color, a generated-design favorite.
Blurred color blobs absolutely positioned behind the hero.
Tiny uppercase tracked labels stacked above every section heading.
Zero-padded 01 / 02 / 03 markers used as section decoration.
Meta & Infrastructure 7 signals
Titles like 'React App' or 'Vite App'. Nobody ever renamed the tab.
No social preview metadata. Fine for a prototype, missing for anything meant to be shared.
The framework's stock favicon, still in place.
No robots.txt or sitemap signals. Straight-from-the-prompt infrastructure.
Source maps left enabled in a production build.
Debug logging still firing on a live site.
A footer year nobody updated, or one that is somehow in the future.
Framework Defaults 6 signals
Still on vercel.app, netlify.app, pages.dev, bolt.host, or v0.dev. Shipped, but never moved in.
The untouched scaffold markup of a starter template.
Framework-default 404 and error pages.
Two or more default AI-scaffolded stack tools together (shadcn/ui, Supabase, Firebase, Clerk, and similar). Any one alone is common; the combination is a tell.
An unambiguous self-injected badge from an AI website builder: a Lovable badge or gpteng.co CDN asset. Any single one is near-conclusive.
The shadcn/ui theme scaffold verbatim - paired surface and foreground custom properties for card, popover, primary, muted, accent and destructive, plus ring, input and radius. Nobody renames a scaffold they did not write.
How the number is built
- Each category scores the points of its fired signals over its maximum. 3 or more fired signals in one category multiply that category by 1.25.
- The weighted hit rate is multiplied by coverage (1.0 with nothing fired, up to 2.75 with everything fired) and by breadth (6+ categories x1.35, 5+ categories x1.25, 4+ categories x1.15).
- Four correlated combinations multiply the result: starter-kit styling x1.2, anchor navigation with generated styling x1.15, AI-style copy with generated styling x1.15, unrefined boilerplate x1.15.
- Generated-looking styling multiplies the score by x1.35 and raises the result into the 45 to 60 range, never past the ceiling. That happens before the corroboration rule below, which then applies as usual: with no high-specificity tell the cap of 40 still applies afterwards, so styling alone cannot carry a page past 40; alongside one or more tells the lift can raise the score as far as 60.
- Corroboration rules the band. No high-specificity tell: at most 40. One tell: at most 60. More tells set floors: 4 tells: at least 78; 3 tells: at least 66; 2 tells: at least 52.
- Fewer than 3 fired signals or fewer than 2 categories caps the score at 20. A builder's own badge bypasses that cap and floors the score at 85.
- High-specificity tells: ai-builder-provenance, default-deployment-subdomain, boilerplate-html, eyebrow-labels, numbered-section-markers, single-page-anchor-nav, dead-social-links, placeholder-text, sparkle-overuse, inclusive-framing, em-dash-density, ai-tool-stack, generated-class-vocabulary, canonical-section-sequence, launch-copy-cliches.
Several of these signals are real, fixable issues. SiteCMD finds them on your live site and in your code, with the exact fix for each.
Try SiteCMD