Measurement · · ·
Defuddle vs Readability vs MarkSnip: what was measured and what came out
Clean Web Clipper was tested on 512 pages in late August 2026: 109 head-to-head against three other engines (Defuddle vs Readability vs MarkSnip), and 403 with our core alone. No crashes and no leftover HTML tags in any extracted article. The corpus and scripts will be published with the next run; until then this page is the full record.
How were four engines compared on the same 109 pages?
The corpus is the hundred most-visited sites in the world and the hundred most-visited in Russia. Non-content domains (messengers, banking, streaming, government portals) were excluded in advance. Pages were captured with a real browser, resolving a content link from each home page where one existed.
Four engines ran over the same 109 captured pages: Defuddle 0.19.3 (the core of the official Obsidian Web Clipper, per its package.json) with Turndown 7.2.4, Mozilla Readability 0.6.0 (the core of MarkDownload, per its manifest; both sources checked 15 September 2026 and linked under Sources) with the same Turndown, MarkSnip 5.2.0 – its real shipped code, unpacked from its Chrome Web Store build – and Clean Web Clipper 0.1.0.
| Metric | Defuddle 0.19.3 | Mozilla Readability 0.6.0 | MarkSnip 5.2.0 | Clean Web Clipper 0.1.0 |
|---|---|---|---|---|
| Pages | 109 | 107 | 107 | 109 |
| Crashes | 0 | 2 | 2 | 0 |
| Leftover HTML | 532 | 718 | 2 | 0 |
| Duplicated menu lines | 491 | 282 | 478 | 102 |
| Short-line ratio | 0.278 | 0.262 | 0.263 | 0.221 |
| Authors found | 23 | 27 | 28 | 28 |
| Publication dates found | 28 | 13 | 13 | 24 |
| Tables extracted (of 56) | 3 | 8 | 11 | 5 |
| Share of useful text | 0.878 | 0.931 | 0.934 | 0.890 |
Where is Clean Web Clipper behind?
- Tables: 5 against 11 for MarkSnip. 41 of the 56 source tables sit on a single page and are layout rather than content, which no engine should extract; the real gap is a handful of pages where our root selection picks too narrow a block.
- Share of useful text: 0.890 against 0.934. Part of it is deliberate – it refuses feed pages that other engines return – and part is the same too-narrow root.
- Publication dates: 24 against 28 for Defuddle.
- Authors: level with the best, 28 against 28 for MarkSnip, after author extraction was reworked. On the first scoring of this corpus it was 20.



How did the core do on 403 pages in twelve European languages?
The top fifty sites in each of twelve countries, captured with the browser set to that country’s language, because otherwise half of them serve an English page and the measurement is of something else.
152 of the 403 pages answered “no article”: shop fronts, portal home pages and feeds, where there is no article to extract. That answer is deliberate, and it is why these pages are counted as tested rather than clipped. On an article you need, a refusal is a bug – here is how to report the page.
| Language | Pages | Crashes | Leftover HTML | Link share |
|---|---|---|---|---|
| German | 40 | 0 | 0 | 0.058 |
| French | 39 | 0 | 0 | 0.050 |
| Spanish | 40 | 0 | 0 | 0.060 |
| Italian | 40 | 0 | 0 | 0.036 |
| Polish | 30 | 0 | 0 | 0.064 |
| Portuguese | 36 | 0 | 0 | 0.060 |
| Dutch | 37 | 0 | 0 | 0.049 |
| Turkish | 31 | 0 | 0 | 0.042 |
| Ukrainian | 13 | 0 | 0 | 0.054 |
| Czech | 28 | 0 | 0 | 0.039 |
| Swedish | 28 | 0 | 0 | 0.036 |
| Romanian | 41 | 0 | 0 | 0.039 |
How is the time per page of 4 min 38 s counted?
The counter on lessroutinemorelife.com counts 4 min 38 s for each page you did something with – copied, saved, printed or sent to an AI chat – once a day per page. Opening the window is not a saving and counts as nothing. That time was taken by hand by the owner on more than 1,000 varied content pages: copy the text, paste it, clean it up, add the title and the source, then check for leftover HTML markup. Both the mean and the median were computed.
The counter is therefore the number of such pages multiplied by that time, not a sum of stopwatch readings for each one. It does not measure how long any particular page would have taken you.
What do the metrics mean?
- Crashes – the engine threw an error on the page and returned nothing. A run without crashes can still be full of menus; that is what the other rows measure.
- Leftover HTML tags – how much raw markup survived into the Markdown. Anything above zero is a defect.
- Duplicated menu lines – lines longer than twelve characters that appear more than once. This is navigation repeated in every section.
- Short-line ratio – the share of lines under twenty-five characters. High means clipped link lists rather than prose.
- Link share – the share of characters sitting inside link labels. High means a menu came along.
- “No article” – the page held no article body, so the extension said so instead of returning links. It is neither a crash nor a clip; how that decision is made is on the page How the extraction works.
What are the limits of this measurement?
- The Ukrainian sample is 13 pages, not 40 – most of the corpus did not respond from the capture location. Treat that row as indicative only.
- Turkish and Czech top-fifty lists skew toward shops and timetables, which carry no publication date at all. That is a property of the corpus rather than of the extraction.
- Competing engines were run only on the first corpus. The European run measures Clean Web Clipper alone.
- Pages where every engine returned under 500 characters were excluded – that is a captcha or a block, not extraction quality.
- Both runs are snapshots of live sites taken at the end of August 2026. The same scripts run later will give somewhat different numbers as those sites change.
What will the next run measure?
The next Clean Web Clipper benchmark run is declared here before it happens, so the result cannot be fitted to a story afterwards. It will take place after the extension’s listing is published in the Chrome Web Store, and its result will be published whatever it shows, including if it is worse than this run.
- The same corpus: 109 pages for the head-to-head comparison of engines and 403 pages for the check of our core alone.
- The same metrics, declared in advance: crashes, leftover HTML, duplicated menu lines, short-line ratio and authors found – the rows of the table above.
- The same engines: Defuddle, Mozilla Readability and MarkSnip, each at its version on the day of the run, with the versions listed next to the result.
- Any outcome: the numbers go on this page whether they are better or worse, beside the numbers of this run.
Reproduce the benchmark
Run one was captured and scored on 30 August 2026, run two on 31 August 2026, with Node 24, jsdom 29.1.1 and Playwright 1.62.1 (Chromium). Versions: Defuddle 0.19.3, Mozilla Readability 0.6.0, MarkSnip 5.2.0, Turndown 7.2.4 with turndown-plugin-gfm 1.0.2, Clean Web Clipper 0.1.0. Run one is three scripts in order – capture-top.mjs, run-engines.mjs, score-top.mjs – and run two is capture-eu.mjs followed by score-eu.mjs. The scripts are not public yet: they will be published as a repository with the next run, without the captured third-party pages. The aggregate results are already available as benchmark.json.
Sources
Every engine in the comparison can be checked at its source. Defuddle 0.19.3 is at github.com/kepano/defuddle, and the official Obsidian Web Clipper lists it as a dependency in its package.json. Mozilla Readability 0.6.0 is at github.com/mozilla/readability, and MarkDownload loads it as Readability.js in its manifest; both links were checked on 15 September 2026. Both engines ran with Turndown 7.2.4 for the Markdown step. MarkSnip 5.2.0 ran as the real code of its Chrome Web Store build, unpacked and run with stubs in place of the browser API. The first corpus is the world top 100 by Similarweb (May 2026) and the Runet top 100 by Similarweb, Semrush and Mediascope (2026); the second is the top fifty sites of each of twelve European countries.