Most advice about spotting AI writing is a list of words. Someone noticed that a chatbot says a lot, and the word went on a blacklist. That advice is not wrong, but it covers the smaller half of the problem.
When we scanned 97 domains and 10,126 pages, 58% of everything the ruleset flagged was structural: not a word choice at all, but a habit of shape. Sentences that all run the same length. A closing paragraph that restates the three before it. Punctuation that thins out because every clause has been split into its own sentence.
Those habits are harder to notice and much harder to fix, because you cannot search for them. Below are the 13 the ruleset checks for, ordered by the share of sites carrying at least one.
How this was measured
Every figure here comes from scans people ran themselves between 2026-08-14 and 2026-09-14, one scan per site, the most recent. No site is named. These are other people's sites, crawled from a URL someone pasted in, and none of their owners agreed to appear in a write-up.
Two limits worth stating before the numbers rather than under them. The sample is self-selected: these are sites whose owner already suspected their copy read as generic, so the rates here are almost certainly higher than the web at large. And frequencies are ordered by share of sites rather than raw instance count, because one 390-page site can produce thousands of hits and drag every ranking with it.
The full dataset, including score distributions and the confounds we got wrong the first time, is at the data.
The ranking
| # | Rule | Share of sites | Instances |
|---|---|---|---|
| 1 | redundant_closing_paragraph | 66% | 2,209 |
| 2 | em_dash_frequency | 63% | 2,757 |
| 3 | rule_of_three_pattern | 63% | 2,436 |
| 4 | vocabulary_diversity | 60% | 2,105 |
| 5 | punctuation_density | 53% | 856 |
| 6 | listicle_heavy | 51% | 1,524 |
| 7 | sentence_length_variance | 41% | 494 |
| 8 | generic_opener_pattern | 22% | 165 |
| 9 | dangling_ing_puffery | 18% | 213 |
| 10 | nominalization_pattern | 17% | 61 |
| 11 | latinate_word_ratio | 12% | 28 |
| 12 | paragraph_symmetry | 10% | 306 |
| 13 | glyph_led_bullets | 6% | 191 |
One caveat attaches to row 2. On 2026-09-12 the em dash rule changed from one flag per page to one flag per offending sentence, moving from 24.2 flags per scan to 89.5. The 2,757 total therefore mixes two definitions and understates the current rate. Its reach, 63% of sites, is unaffected either way.
Why is a redundant closing paragraph the most common tell?
Because models are trained to round things off. The check triggers when a page's final paragraph repeats more than 60% of its significant words from earlier in that same document, which is precisely what a summary does. It surfaced on 66% of domains, ahead of every other structural pattern, and almost nobody names it.
The reason it survives editing is that it feels like courtesy. You have explained three things, so you remind the reader what they were. But a reader who reached your last paragraph does not need the first one repeated, and a reader who did not reach it will never see the summary anyway.
The fix is usually deletion. If the closing paragraph has nothing in it that is not already above, cut it and let the page end on its last real point.
Does using em dashes mean AI wrote it?
No, and this is the check people argue with most. Plenty of careful human writers deploy the em dash well. It keys on density rather than presence: roughly one per 500 words is enough to trip it, a rate few authors reach by choice and most models reach by default.
Sixty-three percent of domains carried it. The instruction the rewrite engine receives is explicit about what must survive untouched:
This sentence overuses the em dash. Rewrite it so NO em dash remains, using a comma, a semicolon, a colon, or by splitting into separate sentences. If the dash is legitimate typography rather than prose (a date range, a version or metadata line, a citation), return the sentence unchanged.
That last clause exists because the first version of the rule flagged changelogs and pricing tables, where a dash between two numbers is not prose at all.
What is the rule of three, and why does it read as generic?
It triggers once a document uses four or more three-item lists, as in the shape . A trio has a cadence that sounds finished, so prose reaches for three whether or not three things exist. Sixty-three percent of domains carried it.
A single triplet is fine. The tell is repetition: after the rhythm has landed four times, your reader stops hearing content and starts hearing metre.
The directive the fix engine works from says to rewrite with two items, or four, or to recast the sentence as prose without the triplet cadence. Four is often the honest answer, because there usually were four.
What does low vocabulary diversity actually measure?
The share of distinct words in a document. Below 35% across at least 150 words, this one trips. Sixty percent of domains carried it, and it comes closest of anything here to measuring directly whether a page says several things or one thing several ways.
Thin diversity rarely indicates a small vocabulary. It indicates prose that has circled. Copy written to fill a section, rather than to land a point, restates its noun every second sentence because the author ran out of material.
Why would too little punctuation be a problem?
This one runs opposite to every other. It trips below four commas, semicolons or parentheses per 100 words, and 53% of domains carried it.
Short-sentence style is a genuine convention, taught widely and handled beautifully by some authors. It also happens to be what you get when a model gets asked for something punchy, because clipped independent clauses are the safest output available. Subordination demands a commitment about which idea hangs off which. Full stops never do.
The instruction the rewrite engine receives for this rule ends with a warning to itself: "Note this is the opposite direction to most rules: more punctuation, not less."
The remaining seven
Six of the thirteen accounted for most of what we found. The rest fire less often, but two of them are close to unambiguous when they do.
listicle_heavy (51%) triggers when over half a document's extracted blocks are list items rather than prose. Bullets themselves cause no harm; an absent argument connecting them does.
sentence_length_variance (41%) measures how widely sentence lengths spread, tripping below a coefficient of variation of 0.35 across six sentences or more. Human writing is lumpy. It runs long, then stops short. Generated prose gravitates toward a comfortable middle and settles.
generic_opener_pattern (22%) catches filler preambles. The ruleset hunts for openers shaped like , , and . Its directive is the bluntest of the set: lead with your actual point, deleting the preamble.
dangling_ing_puffery (18%) is the participle clause bolted onto the end of a sentence to make it sound consequential. Watch for a comma followed by one of these:
nominalization_pattern (17%) catches a verb buried in a noun with a carrier verb attached, as in where the word is simply "analyse".
latinate_word_ratio (12%) fires on formal vocabulary used where a plain word would do: , , , .
paragraph_symmetry (10%) and glyph_led_bullets (6%) close the list. The former trips when paragraph lengths spread by less than a coefficient of 0.25, which happens whenever every section got generated against an identical brief. The latter catches bullets led by an emoji or symbol instead of a word.
Three rules that produced no data
The ruleset has 16 structural rules. Only 13 appear above, and the gap is worth explaining rather than hiding.
negative_parallelism, which catches the figure, was fully implemented but had only ever existed in a local seed file with no route to the hosted database. It contributed zero of the 23,000 flags in this window, reaching production on 2026-09-16, well after these figures were measured. Across the corpus we have re-scored since, it turns out to be common.
excessive_bolding and equivocation_seesaw are live and did fire, but on too few sites in this window to report a rate we would stand behind.
What to do with this
Rank order and priority order differ. A document carrying one generic preamble sits in better shape than one whose sentences all run 18 words, even though preambles are far easier to act on.
For a starting point, the closing paragraph is the cheapest win available. Most common tell we found, one delete key to resolve, and unlike a vocabulary hit it never argues back.