What it rates
How much of a site is stock: patterns, words and values that appear unchanged on thousands of sites because a template, a component kit or a site builder put them there. Not who made it. Tools that claim to detect AI writing have failed in public, and a fixed checklist should not pretend to.
- No single default decides anything. A centred hero, Inter, an FAQ or three pricing tiers are fine alone.
- What costs points is defaults piling up in one place, and nothing specific to you beside them.
- Your own work gives points back: specific copy, named customers, a real product image, your own type and colour.
The arithmetic
Each finding has a weight w from the tables below and a strength s between 0 and 1, for how much of it was found. Within one section:
per kind of default q = 1 − Π (1 − w × s) all kinds together N = 1 − Π (1 − q) unfinished work kept apart how many kinds m = Σ min(1, q ÷ 0.15) stacking factor g = 0.25 + 0.25 × m, at most 1 your own work P = 1 − Π (1 − v × p) section rating 100 × (1 − (g × N × (1 − P ÷ 2) + q unfinished))
page rating 100 × Π (section ÷ 100)^(weight ÷ 3) × (1 − whole-page defaults ÷ 2)
A page multiplies what each section keeps, weighted by kind (hero 3, features 2, testimonials 1.5, pricing 1.5, menu 0.5, footer 0.5, everything else 1), so one default hero is never averaged away by clean filler around it. What runs across the whole page, such as typefaces, palette and section order, counts at half strength. Unfinished work caps a page: template text at 35, two placeholder images at 45, a menu of dead links at 55, the starter title at 60. A page with under 50 words to read is not rated at all: too little to read is not the same as nothing default.
The site averages its pages, the home page counting twice and docs, legal pages and blog posts a quarter, then loses up to 10 points when the same layouts or paragraphs recur from page to page. A fix’s worth is the rating scored again without it, on every page where it appears.
The copy
| Check | Weight | Why it reads as stock |
|---|---|---|
| Stock phrases | 0.25 | Openers like "In today's fast-paced world" or "Unlock the power of" appear on thousands of pages, so readers skip them. |
| Overused words | 0.20 | Words such as "delve", "seamless", "elevate" and "game-changer" have become markers of stock, interchangeable marketing copy. |
| "Not just X, it's Y" | 0.15 | Setting up a contrast nobody asked for ("It's not just a tool, it's a partner") is one of the most recognisable stock copy shapes. |
| Vague claims | 0.25 | Sentences without numbers, names or specifics could describe any product. Usability research found objective copy tests 27% better than promotional copy. |
| Emoji as bullets | 0.15 | Rows of 🚀 ✨ ⚡ at the start of headings and list items are a template habit, and they read the same on every site. |
| Round, unsourced numbers | 0.10 | "10K+ users", "99.9% uptime" and "4.9 stars" in a row look like filler unless they are sourced. |
| Stock calls to action | 0.10 | "Ready to transform your workflow?", "Join thousands of teams" and a Get started / Learn more pair close half the landing pages on the web. |
| "Fast. Simple. Secure." | 0.10 | Three one-word sentences are the default tagline shape and say nothing a competitor could not also say. |
| Heavy em-dash use | 0.05, whole page | A dense run of em dashes has become a visible mark of templated text, though plenty of writers use them. |
| Title Case Headings | 0.05, whole page | Every heading in Title Case is the template default, and sentence case reads faster. |
| An arrow on every button | 0.05, whole page | Appending → to every link and button is template chrome. |
The look
| Check | Weight | Why it reads as stock |
|---|---|---|
| Gradient headline text | 0.20 | A gradient clipped into the headline (often indigo to purple) is the single most copied effect of the last few years. |
| Blurred glow blobs | 0.25 | Large blurred coloured circles behind the content are decoration with no meaning, and templates add them by default. |
| Coloured glow shadows | 0.15 | Coloured halos around buttons and cards are a stock effect of site-builder templates. |
| Default purple button | 0.05 | Indigo and violet buttons straight from the Tailwind palette became the default accent of template sites. |
| Indigo-to-pink gradients | 0.15 | Gradients between the stock indigo, violet, purple, fuchsia and pink stops are the default "modern SaaS" wash. |
| Frosted glass cards | 0.10 | Blurred translucent cards are a trend default, and they lower text contrast. |
| Coloured stripe on cards | 0.10 | A thick coloured left or top border on every card has become one of the most reliable signs of a template layout. |
| Icons in tinted squares | 0.10 | A stock icon inside a small tinted rounded square, repeated per card, is the default feature-card look. |
| Effects in every section | 0.20, whole page | Hand-made sites spend their boldness in one place; templates spread glows, gradients and blur evenly over every section. |
| Stock colour palette | 0.05, whole page | Most colours on the page are untouched Tailwind defaults, which thousands of other sites share exactly. |
| Unthemed component kit | 0.15, whole page | The component kit's tokens are still at their default values, so the buttons, cards and radius look like every other site built on it. |
| Only the default fonts | 0.05, whole page | The page uses only Inter, Geist or the system stack, which is what every starter ships with. |
| Template-trend typeface | 0.10, whole page | Faces like Space Grotesk or Instrument Serif became the go-to "distinct" choice of templates, so they no longer look distinct. |
| Template glow tokens | 0.10, whole page | Tokens named --primary-glow, --shadow-glow or --gradient-primary come straight from a site builder's template. |
| One radius on everything | 0.05, whole page | The same corner radius on buttons, cards, inputs and images, regardless of size, is the kit default. |
| Dark page, grey body text | 0.05, whole page | A near-black page with mid-grey paragraphs is the default "dev tool" look, and grey on black is hard to read. |
| This year's default palette | 0.10, whole page | Warm cream with terracotta, or near-black with one acid-green accent, is the newer template look that replaced purple. |
| One word of the headline styled apart | 0.10 | Setting one or two words of a headline in another colour, an italic serif or an underline is the device generators reach for to make a heading look designed. |
| A soft shadow under every card | 0.05 | A row of identical cards, each lifted by the same grey drop shadow, is a component-kit default. |
| A pulsing status dot | 0.05, whole page | A blinking dot ("live", "available") that reports nothing real is decoration borrowed from templates. |
| Monospace labels outside code | 0.05, whole page | Monospace used as a "technical" voice for labels and captions is a gallery fashion; only code needs it. |
| Thin rules everywhere | 0.05, whole page | Hairline dividers between every block are the "editorial" look generators adopted wholesale. |
| Sparkle, rocket and brain icons | 0.05 | The sparkles, the magic wand, the rocket and the brain have become the stock way to say "smart" or "new", on thousands of sites at once. |
| Fake window buttons | 0.05 | Three red, yellow and green dots drawn over a box imitate a macOS window to make a mock-up look like software. |
| Squeezed letter-spacing on headlines | 0.05, whole page | Very tight negative letter-spacing on large headings is a starter-kit default that makes letters collide. |
| A glow that follows the pointer | 0.05, whole page | A spotlight that tracks the mouse is a component-gallery effect; it decorates without informing. |
The layout
| Check | Weight | Why it reads as stock |
|---|---|---|
| Badge pill above the headline | 0.20 | A rounded "New: ..." pill above the headline is one of the most telling hero patterns: it is on 1 in 6 launch pages and almost no hand-made ones. |
| Identical card grid | 0.20 | Three (or four, or six) identical cards with an icon, a title and one line is the default feature section. |
| All-caps label over every heading | 0.10, whole page | A small tracked-out ALL-CAPS label above each section heading is template chrome that repeats what the heading says. |
| Centred hero | 0.05 | A centred headline is the starter default; alone it means little. |
| Numbered 1 · 2 · 3 steps | 0.05 | A "How it works" row of three numbered steps is a template block. |
| FAQ accordion | 0.05 | An accordion of generic questions near the bottom is a template block. |
| Three tiers, "Most popular" in the middle | 0.05 | Three plans with the middle one marked "Most popular" is the stock pricing table. |
| The template section order | 0.50, whole page | Hero, logos, features, steps, testimonials, pricing, FAQ, call to action: the page follows the default landing-page order block for block. |
| Fade-in on every section | 0.10, whole page | Every section sliding up as it scrolls in is the default animation, and it hides content from visitors and crawlers until it plays. |
| Floating pill navigation | 0.10, whole page | A rounded, blurred menu bar floating over the page is a fashion copied from template galleries. |
| Decorative 01 / 02 / 03 numbers | 0.05, whole page | Zero-padded index numbers over sections or cards carry no information; they are an ornament copied from portfolio sites. |
| Tiny letter-spaced capitals | 0.10, whole page | Small uppercase, letter-spaced captions scattered around the page are far more common on weak template pages than on well-made ones. |
| Every card lifts on hover | 0.05, whole page | Cards that rise or grow under the pointer, all the same way, are a component-kit default rather than feedback. |
| Every section centred | 0.10, whole page | When almost every section is centred, the page reads as a column of template blocks with no composition. |
| A whole sentence as the headline | 0.05 | A full sentence set at display size runs to three or four lines; generators put the whole pitch in the h1. |
| An endless scrolling strip | 0.05, whole page | A strip of logos or words that scrolls forever is a stock template block; it moves without telling the visitor anything. |
| A bento grid of rounded tiles | 0.05 | Rounded tiles of mixed sizes became the default "modern" feature section after Apple keynotes; the tile sizes rarely follow what matters. |
The proof
| Check | Weight | Why it reads as stock |
|---|---|---|
| Testimonials anyone could write | 0.40 | Quotes with nothing a reader could check (no number, no link, no photo) look like every template's placeholder testimonials, real or not. |
| "Trusted by thousands", no names | 0.25 | A big number of users with no logo or name next to it is a claim the visitor cannot check. |
| No product in the hero | 0.15 | The first screen shows no image of the product, so the visitor has only adjectives to go on. |
| Initials in circles instead of people | 0.15 | Round badges with initials ("SJ", "MK") stand in for customers who have no photo, which is how template testimonials look. |
| Overlapping faces with a star rating | 0.15 | A row of overlapping avatars next to stars or "join 2,000+ users" is a template block that claims a crowd without naming anyone. |
Left unfinished
| Check | Weight | Why it reads as stock |
|---|---|---|
| Template text left in | 0.60 | Lorem ipsum, "Your Company" or example addresses tell a visitor nobody finished this page. |
| Placeholder images | 0.40 | Images from placeholder services are the clearest sign of a template that was shipped as is. |
| Stock avatar faces | 0.30 | Avatars from random-face services are recognisable, and they make the people next to them look invented. |
| Links that go nowhere | 0.30 | Many `href="#"` links in the menu or footer are template scaffolding: the visitor clicks and nothing happens. |
| Starter title or description | 0.30, whole page | The page still carries the starter template's title or description, which shows in browser tabs, search results and link previews. |
| Chat assistant leftovers | 0.50 | Phrases like "I hope this helps" or citation markers were pasted from a chat window without being read. |
What gives points back
| Signal | Weight | Where |
|---|---|---|
| Specific copy: numbers and names | 0.35 | In one section |
| Named, specific testimonials | 0.30 | In one section |
| A real image | 0.30 | In one section |
| Your own typeface | 0.05 | Across the whole page |
| Your own colour | 0.05 | Across the whole page |
Limits
- Copy checks are off on pages whose text is not English (judged from the words, not only the lang attribute), and word checks on pages about generated writing. When a site switches checks off with data-slop-ignore, the report says so.
- Docs, legal pages, blog posts and app screens are templated by design: they count a quarter and are left out of the cross-page comparison.
- Slop reads code, not a rendering. Sizes and positions are judged from class names and CSS, and apps rebuilt from their code are marked approximate.
- Put
data-slop-ignore="all", or a list of checks, on an element to say a pattern there is deliberate. - Up to ten pages, seventy requests and about 27 seconds per inspection. robots.txt is read first and obeyed: Slop fetches as
WebScanBot, and aSlopBotgroup opts a site out of Slop alone. Nothing is kept. - The weights are a first calibration and will change with measured results; every report names the ruleset that rated it.
Credits
The checks draw on public work: Adrian Krebs’ ai-design-checker and its labelled Show HN study, Slopdar, Kobak and colleagues’ excess-vocabulary data (Science Advances, 2025), Tailwind CSS’s published palette, and the tells registry of Leonxlnx’s taste-skill (MIT), read in reverse, and the pattern catalogue of slop-detect (MIT). Slop’s code, weights and words are its own.