Four signals, no total
A scan rates a site's writing with four separate signals and then says what it found in one sentence. There is no overall score, grade or label. The signals disagree often enough that a total would hide the reasons. Each signal has a bar of three segments. A filled segment means there is more of the thing the signal is named for. Yellow bars belong to the two signals where more is worse. Teal bars belong to the two where more is better.
BuzzwordsD
Words that people do not say out loud about a product: seamless, unlock, leverage. We count them in the page's text and divide by the number of words, per 100. Each hit is quoted and marked in its passage. A word used in its literal sense (unlock the door) is not counted. Yellow bar.
| Bars filled | When |
|---|---|
| 0 | Up to 0.8 per 100 words |
| 1 | Over 0.8, up to 1.5 |
| 2 | Over 1.5, up to 3 |
| 3 | Over 3 |
Could be anyone'sA
Passages that would fit on any company's site unchanged. We show how many of the passages read were flagged, and the worst one. Yellow bar.
| Bars filled | When |
|---|---|
| 0 | A quarter of the passages or fewer |
| 1 | More than a quarter, up to half |
| 2 | More than half, up to three quarters |
| 3 | More than three quarters |
Says what it doesA
Passages that state concretely what the product does and for whom. We show how many were found, and the best one. Teal bar.
| Bars filled | When |
|---|---|
| 0 | Fewer than a fifth of the passages |
| 1 | A fifth or more |
| 2 | Two fifths or more |
| 3 | Three fifths or more |
On recordD
What the public record says about the domain, in plain words: since when it has been registered, since when the web archive has copies, whether anyone is named as running it, how many of five legal pages it links, whether email from the domain can be faked, and whether the connection is secure. Teal bar, filled by fixed rules over those checks. It is rated for a domain or a URL, never for pasted text or a diff. The list of exactly what is looked at is at the end of this section.
What "On record" checks, and the technical name for each
- Registered since a date: the domain's registration date (RDAP).
- In the web archive since a year, with a snapshot count: the Internet Archive's capture history (Wayback Machine).
- Operator named: an organisation named in the site's copyright line or its structured data (JSON-LD), by a linked GitHub organisation that links back, or by an official-website entry on Wikidata. People are never named.
- Legal pages linked: privacy, terms, contact, about, and a file saying where to report security problems (security.txt). Three or more counts as a pass.
- Email from the domain can be faked: whether the domain tells receivers to reject mail it did not send (DMARC at quarantine or reject; SPF is read with it).
- Secure connection: whether the site's certificate is valid for the domain (TLS).
- Also read, and counted in the bar but not listed on a report: the domain's mail servers (MX), who may issue its certificates (CAA), and the header that forces secure connections (HSTS).
Counted, model read, read from the site
Every number on a report says where it came from.
- D Counted. A fixed rule applied to text or records. Run it twice and the answer is the same. Buzzwords and On record are counted.
- A Model read. A language model reads each passage and answers a fixed yes-or-no question about it. It can be wrong, and a report shows the passages so you can check. Could be anyone's and Says what it does are model reads. If the text addresses the reader of a scan, the model's answers about it are thrown away.
- R Read from the site. A fact taken as it is from a public record or the page itself, such as a registration date.
Where the thresholds come from
We tested the signals on 16 real homepages, eight written plainly and eight in the register this scan looks for. It is a small set and the thresholds were tuned on the same pages, so the figures flatter the method.
- Buzzwords. The plain pages averaged 0.38 per 100 words and the others 1.78. The best split was 0.81 per 100. That is where the first bar begins. It put 14 of 16 pages on the right side.
- Could be anyone's. It put 13 of 16 pages on the right side.
- Says what it does. 13 of 16 as well. It is the only signal that caught two sites whose words are ordinary and whose sentences say nothing.
Thresholds are fixed numbers in the code. A site cannot buy, argue or retry its way to a different bar. Changing the text changes the bars.
The sentence
Each report has one sentence of at most 20 words, always in the same order: buzzwords, then passages that could be anyone's, then what is on record. It states the numbers and nothing else. If we could not read the copy, the sentence says so, and says it about us.
How a page gets read
For a domain or a URL we try, in this order, until one gives at least three passages of text:
- Plain fetch. We ask the site for the page, as a browser without scripts would. We identify as
SlopWatchScannerand obey robots.txt. - The web archive's copy. If the fetch is refused, is not a page, or has too little text, we use the archive's latest copy of the same address, when it is at most 180 days old. The report says so, with the date.
- A browser render. A real browser run for pages that only show text with scripts on. Not available yet; it comes in a later release.
- Not rated. If none of these gives enough text, the copy signals read "Not rated", with the reason we got. On record is still rated.
A page we cannot read is a fact about our scan. It says nothing about the site, and it never lowers or raises a bar.
What a scan never claims
- That a site is honest or dishonest, safe or unsafe. A scan rates wording and public records. It does not look at the product, the people, the prices or the reviews.
- That a human or a machine wrote the text. We considered a signal for it and dropped it: on our test pages it flagged 65 of the 85 passages from the plainly written sites. A signal that wrong would be an accusation, so there is none.
- That the bars add up to anything. They do not.
Nobody is named. No registrant or contact data is read. No form is submitted and no login is tried. Absence of evidence is not evidence of anything.
What you can rate
- A domain, such as
example.com. All four signals. - Any https address, through the scan box or
/scan/url?u=. All four signals, for that page. - Pasted text or Markdown. The first three signals.
- A diff. The first three, on the lines it adds, in prose files only.
Text and diffs go to two POST routes. Send the body as text/plain; the answer is JSON.
curl -X POST -H 'content-type: text/plain' --data-binary @README.md https://slop.watch/scan/text
git diff main | curl -X POST -H 'content-type: text/plain' --data-binary @- https://slop.watch/scan/diff
For a domain, add ?format=json to a report address, or ask with Accept: application/json. The JSON carries the input, the sentence as line, the four signals with their level and class (for Buzzwords and Could be anyone's the level runs opposite to the bar: 3 is the fewest buzzwords or the fewest generic passages, 0 the most), every passage with its flags and hits, and anything unread with the reason.
Limits
- 20 domain or URL scans an hour from one address.
- 200 text or diff ratings an hour from one address.
- Text up to 64 KB. A diff up to 256 KB.
- Results already on file are reused and do not count against you.
Every report answers as JSON with ?format=json: the input, the sentence as line, the four signals and the flagged passages. Over MCP, POST https://slop.watch/scan/mcp (also https://slop.watch/mcp) serves MCP Check: check_mcp, diff_mcp and explain_flags read an MCP server's tool list, not a website.
Corrections and removal
If you run a site and something on its report is wrong, or you want the report removed, write to [email protected] with the domain. No account needed; a person reads it.
Reports are noindex, absent from the sitemap, and not listed anywhere. A report exists for whoever asked for it.