Merge a few PDFs together and it’s easy to end up with the same page twice — a cover sheet that was in two of the source files, an invoice attached to two different emails, a signed page someone included both on its own and as part of the full contract. Scan a stack of paper and get interrupted partway through, and you might rescan from the beginning without checking where you left off, duplicating a chunk of pages in the middle. None of this is rare. It’s just tedious to fix by paging through a long document looking for a page you’re pretty sure you already saw.

How the detection actually works

Remove Duplicate Pages checks every page against every page before it, and it uses a different method depending on what’s on the page.

For pages with real text on them — anything typed, not scanned — it extracts the text and compares it exactly. If two pages produce the identical extracted text string, the later one gets flagged and the first occurrence is kept. This is deliberately not a “roughly similar” comparison: it doesn’t fuzzy-match wording, and it doesn’t try to guess if two pages are “close enough.” An exact string match, nothing more.

For pages with no extractable text — scanned or image-only pages, where there’s no text layer to read — it falls back to a visual comparison instead, since text comparison isn’t available. Each page is rendered at a small fixed resolution and reduced to a content hash; two pages produce the same hash only if they rendered to the same pixel content. Again, this is an exact match, not a similarity score — there’s no threshold or tolerance being applied.

Worth being precise about what that means in practice: this catches pages that are genuinely repeated — the same source page appearing twice, byte-for-byte in effect, whether it was typed or scanned. It will not catch pages that are merely similar: two scans of the same physical document run through the scanner twice will usually render to slightly different pixels (a fraction of a degree of skew, a tiny difference in exposure) and won’t hash the same, so they won’t be flagged. Same for two versions of a page with a single word changed — the text comparison is exact, so that’s treated as a different page, correctly. If you’re trying to catch near-duplicates or reconcile which of two similar-looking pages is the real final version, that’s a different job — see Compare PDF below.

One specific case worth knowing about: a Bates number, a fax header, a “received” stamp, or a page number sitting in the footer all become part of the extracted text right alongside the real content. Two pages that are word-for-word identical everywhere else but carry a different stamp or number in that footer produce two different text strings, so the exact-match check — correctly, by its own rules — treats them as different pages, even though you’d call them duplicates at a glance. Some desktop PDF tools handle this with a tunable tolerance — an allowed character difference, a similarity slider you can loosen or tighten. This tool doesn’t offer that; it’s all-or-nothing on purpose, because a tolerance you can’t see the effect of is how you end up silently losing a page that only looked like a duplicate. If your document has that pattern, that’s exactly what the thumbnail review below is for.

Why it shows you the pages instead of just deleting them

Like the rest of the toolkit’s detection-based tools, this isn’t a blind auto-delete. Uploading a PDF runs detection and thumbnail generation together, and you land on a grid of thumbnails with the exact-match pages already checked off — nothing is removed until you say so:

  1. Upload your PDF. Detection runs automatically alongside thumbnail generation.
  2. Pages that exactly repeat an earlier page are pre-selected — checked off in the grid, first occurrence always kept.
  3. Scroll through and adjust: uncheck anything you actually want to keep, or check off a near-duplicate the exact-match logic didn’t flag (a rescan that’s visually close but not pixel-identical, for instance).
  4. Download once the selection looks right — that’s when pages actually get removed.

Because the underlying check is exact rather than fuzzy, it should rarely flag something you didn’t want removed — a false positive would mean two genuinely identical pages, which is usually fine to dedupe. The more common miss runs the other way: a near-duplicate that’s obviously the “same page” to a human eye but not pixel-identical to the algorithm, and won’t get pre-checked. The thumbnail review is there for exactly that gap — you’re looking at the actual pages before committing, so you can catch what the automated pass reasonably couldn’t.

If the PDF is password-protected

Detection and thumbnail generation both open your file with pdfjs-dist, and that call doesn’t prompt for a password — so an encrypted PDF fails before you see a single thumbnail. Run it through Unlock PDF first (you’ll need to already know the password — it doesn’t crack or guess one), then dedupe the unlocked copy. If the file needs to stay locked for whoever you’re sending it to afterward, Password Protect a PDF puts one back on once you’re done.

Who this is for

  • Merging PDFs from multiple sources — combining files where a cover page, signature page, or exhibit happened to be included in more than one of the originals. This tool checks one PDF at a time, so if you’re starting from separate files, merge them into a single document first — Merge PDF works well for that — then run the merged result through here to catch whatever duplicated across the join.
  • Consolidating email attachments — the same invoice, form, or report sent as an attachment more than once across a thread, now needing to become one clean file.
  • Recovering from an interrupted scan — rescanning a stack after a jam or a mistake and ending up with an overlapping range of pages scanned twice.
  • Cleaning up an assembled case file or report — where pages get pulled in from several documents and the same exhibit or appendix page ends up included twice.

If what you’re really dealing with is near-duplicate pages — different scans of the same document, or two drafts where you need to see what actually changed rather than just spot an exact repeat — Compare PDF is the right tool instead; it’s built to highlight differences, not just find identical pages. And if your document’s problem is blank pages rather than repeated ones, Remove Blank Pages handles that separately, since a blank page usually isn’t a duplicate of anything.

Everything stays on your device

Detection, thumbnail rendering, and the actual page removal all run in your browser — text extraction, page rendering, and hashing all happen locally, and the file is never uploaded anywhere. That’s worth knowing given what tends to end up with duplicate pages in the first place: contracts assembled from multiple sources, signed agreements, filed reports — documents you’d rather not hand to a server just to check for a repeated page.