How the score is computed, and what it cannot see.
Every score this site displays links here. This page states what we extract, how each detector decides, the exact arithmetic of the score, which parts are produced by a language model rather than a rule, and the things the scanner is blind to. The limitations section is the part worth reading.
Rubric last updated 31 Aug 2026. Corpus figures computed from 93 scanned sites, 24 Aug 2026 – 24 Aug 2026.
What we extract
We request your URL over HTTP with a 7 second timeout, following redirects, identifying ourselves as SlopCheckr-Forensic-Bot. Some paths additionally render the page in headless Chromium to capture the hydrated DOM. We read only what a visitor’s browser would receive. We do not need, request, or accept access to your repository.
From the document we pull:
- ·Page title and meta description
- ·Every heading, in order
- ·Button and link labels
- ·Body paragraphs
- ·CSS class names, by frequency
- ·Hex colours declared in the document
- ·Linked and declared font families
- ·Framework and generator signatures
If a bot challenge intercepts the request we stop and return an error rather than scoring the challenge page.
How each detector actually decides
These are substring searches over the document we received. We are publishing the exact strings, because a detector you cannot inspect is a detector you have no reason to trust.
| Detector | Fires on | Cost |
|---|---|---|
| Radial gradient glow | radial-gradient, from-purple-*, from-indigo-*, from-blue-600, shadow-purple / shadow-cyan / shadow-blue | +24 to the slop penalty |
| Glassmorphism panel | backdrop-blur, bg-white/5, bg-black/40, border-white/10 | Recorded, but does not add to the slop penalty |
| Fully rounded pill button | rounded-full, border-radius: 9999px, border-radius: 50px | Recorded, but does not add to the slop penalty |
| Sparkle icon | sparkles, lucide-sparkles, the sparkle glyph, the Lucide sparkle SVG path | +12 only when a three-column grid is also detected |
| Symmetrical three-column grid | grid-cols-3, md:grid-cols-3, lg:grid-cols-4, col-span-4 | +12 only when a sparkle icon is also detected |
| Centred hero vacuum | text-center or align: center, together with min-h-screen, and at most two headings | +8 to the slop penalty |
| Unconfigured default font stack | every detected family resolves to Inter or system-ui | +8 only when a radial glow is also detected |
| Marketing cliché dictionary | Fixed phrase list: “empower your workflow”, “seamlessly integrate”, “supercharge”, “unlock the full potential”, and similar | Each matched phrase adds its own weight, between 10 and 16 |
The arithmetic
Everything that fired adds its cost to a single penalty accumulator. The headline score is one expression over that accumulator:
slopScore = clamp(4, 96, floor(6 + slopPenalty × 0.82))
A page where nothing fires scores 6. The clamp means no page can score below 4 or above 96, because we do not believe a single automated pass earns the right to call anything perfect or hopeless. The human score is simply 100 − slopScore.
The five dimensions
These are returned under dimensions in the v1 API response, so the name beside each card on this site is the name of the field you will receive. They are computed independently and do not feed the slop score.
visualOriginalityVisual originality and restraintWhether a radial gradient glow was detected. Nothing else moves this number.
copyOriginalityCopy specificityHow many phrases from the cliché dictionary appear anywhere in the document.
typographyDisciplineTypographic disciplineWhether every detected font family resolves to Inter or a system stack.
layoutAsymmetryLayout asymmetryWhether the centred-hero signature fired.
brandVoiceBrand voice and verifiable claimsThe same cliché count as copyOriginality, weighted less steeply.
Which half is deterministic
A report contains both measurement and opinion. Confusing the two would be the overclaim that ends a technical evaluation, so here is the split.
Deterministic and reproducible
- +The extracted DOM: headings, buttons, paragraphs, class frequencies, hex colours, font links
- +Every detector above, and whether it fired
- +The slop score and the five dimension scores
- +The framework signature list
Scan the same unchanged page twice and these come back identical.
Model judgment
- ~The executive summary
- ~The art director critique
- ~The copy rewrites and prompt recipes
- ~The per-section verdicts and suggested fixes
- ~The buyer jury simulation in full
These are written by a language model and will vary between runs. The aiEngineUsed field on every report records which path produced it.
The visual salience model
For some pages we also render a predicted visual-salience model, computed from measured page geometry. We render the page once, headless, at a fixed 1280×800 desktop viewport, and measure each visible element’s true bounding box, font size and weight, foreground and effective background colour, WCAG contrast, and border radius. A pure, deterministic function scores each element from those measurements alone.
It is not exhaustive, and the panel should not be read as if it were. Qualifying elements are sorted by rendered area and only the largest 200 are scored. On a dense page the smaller boxes fall outside the model entirely, and every figure the panel reports — the concentration numbers included — is computed over that top-200 subset, not over the whole document.
This is not eye-tracking. No human or simulated visitor is involved — there is no fixation data, no gaze path, no dwell time, and nothing resembling a visitor of any kind. The numbers describe where visual weight sits on the page, computed from geometry, not where any person actually looked.
The six signals
Each element’s score is a weighted sum of six signals. The weights below are read directly from the scoring function’s published export, not retyped, so this table cannot drift from what the code actually runs.
areaShareHow much of the viewport the element’s box covers, compressed by a square root so one enormous container cannot swamp genuine content.
contrastWCAG contrast ratio between the element’s foreground and its effective background colour, normalised across the 1–21 range.
positionAbove-the-fold placement is weighted most heavily, with a mild horizontal bias toward the left-of-centre start of an F-pattern reading scan.
typographyFont size and weight relative to the page’s own median, so its largest, boldest text stands out regardless of absolute pixel size.
isolationDistance from the element’s centre to its nearest neighbour — elements standing apart register more strongly than ones buried in a dense cluster.
colorSingularityHow rare an element’s colour is relative to every other colour measured on the page.
Alongside the per-element scores, the report also states how concentrated the page’s visual weight is: the share held by its top three elements, a spread (entropy) figure, and a count of elements actually competing for attention.
What the spread figure actually means
Spread is Shannon entropy over the elements’ salience scores, normalised against a fixed reference of 30 equally-weighted elements — not against the page’s own element count. Normalising by a page’s own count would divide out the very thing the number exists to capture: any page whose elements scored alike would read as perfectly spread, however few of them there were.
The consequence is worth stating plainly, because it is easy to misread. A page with only a handful of elements cannot reach 1.0 no matter how evenly its visual weight is distributed. Three equally-weighted elements top out around 0.32. That is the arithmetic ceiling for a page of that size, not evidence that its attention is concentrated. The figure is designed to be compared between pages on the same fixed scale, not read as a percentage of some ideal.
What this model cannot see
It measures one 1280×800 desktop viewport. Mobile layouts, other breakpoints, and anything below that single fold are not captured.
There is no motion or interaction data — no scroll, no hover, no animation, no video.
It has no idea what any element means. A giant red call-to-action and a giant red error banner score identically if their geometry matches.
Colour rarity is bucketed coarsely, and the buckets split at fixed boundaries. Two near-identical shades usually land in the same bucket, but a pair that straddles a boundary is counted as two different colours. The signal measures how rare a bucket is, not perceptual similarity.
Elements smaller than 8×8 rendered pixels are skipped entirely, on the grounds that they are spacing, hairlines or tracking pixels rather than things competing for attention. A genuinely tiny piece of content is invisible to the model.
The page is mutated before it is captured. Loading screens, cookie and consent banners, page-transition overlays and newsletter popups are heuristically removed, and the page is scrolled top to bottom to trigger lazy-loaded content. So the DOM we measure is not byte-for-byte the DOM a visitor lands on, and a heuristic that removes the wrong node removes it from the measurement too.
What the scanner cannot see
A measurement product that will not state its own blind spots is asking you to take its numbers on faith. These are ours.
1The detectors match text in your markup, not rendered pixels
Every visual detector above is a substring search over the HTML we receive. It looks for class names and CSS strings — "radial-gradient", "grid-cols-3", "rounded-full". It does not read computed styles for these checks and it does not look at a screenshot.
2So a site built without Tailwind can carry the pattern and still score clean
The strings we match are largely Tailwind idioms. If you write vanilla CSS, use CSS modules, or ship compiled and minified class names, your page can have the identical purple hero, the identical three cards, and the identical pill buttons, and our detectors will not fire. A low score is not proof of craft. It can mean we could not see.
3A detector fires on a match anywhere in the document
If "grid-cols-3" appears inside a script bundle, a code sample, a hidden element, or a component that never renders, it counts the same as a visible three-card row. We do not currently check whether the matched element is visible, in the viewport, or rendered at all. False positives are possible and we would rather you know that.
4We usually see the server response, not the hydrated page
The default path fetches your URL over HTTP with a 7 second timeout and reads the HTML that comes back. A headless Chromium pass is available and is used on some paths, but if your interface is assembled client-side after load, the default scan may be judging a shell.
5We cannot see anything behind an interaction or a login
Content that appears after a click, a scroll, a route change, or an authentication step is outside the scan. So is anything a bot challenge blocks: if Cloudflare returns a challenge page we halt rather than score the challenge page.
6We do not judge whether a choice is right for you
A purple radial gradient is penalised because it is the most common generative default, not because it is wrong. If it is your brand and you chose it deliberately, the detector will still fire and you should ignore that finding. The tool measures distance from the statistical centre of the web. It has no opinion about your particular business.
7The framework signatures are crude
Our "Three.js / 3D Canvas" signature fires on the substring "canvas", which is why it appears on 61 of the 93 sites we have scanned and why we do not publish any figure grouped by framework. Treat the signature list as a hint, not as detection.
8The five dimensions do not add up to the slop score
They are computed independently. There is no weighting that combines them into the headline number — the slop score comes from its own penalty accumulator. Any weight table claiming otherwise is wrong, including two we previously published on this site.
What we have measured, and what we have not
Every figure below is computed from the 93 sites SlopCheckr has scanned, by scripts/compute-corpus-stats.mjs. None of them is hand-entered. Sites scanned 24 Aug 2026 – 24 Aug 2026; figures last computed 31 Aug 2026.
Figures we are not publishing yet
These are questions we would like to answer and currently cannot. An honest “we are still collecting this” beats a fabricated number, and our minimum before publishing a figure is 20 sites.
Median slop score by site builder
Only 3 of 93 scanned sites carry a detectable AI site-builder signature, below the 20-site minimum this project publishes at. The generic framework signatures we detect more often (Tailwind, Next.js) identify a toolchain, not a builder, so a median grouped by them would not answer the question.
Share of sites using the nav → hero → features → testimonials → pricing → FAQ → CTA → footer ordering
The section classifier labels the large majority of detected sections generically as "features", so it cannot currently distinguish a testimonials band from a feature band reliably enough to assert an ordering. Publishing this figure requires a better classifier, not a bigger corpus.
We ran this rubric against our own site.
It failed. The write-up lists every finding, what we changed, and the score before and after, using the same scanner and the same rubric described on this page.
Read the self-audit