The web is mostly a copy of itself
When Google published a count of the web in July 2008, it said its systems had seen 1 trillion unique URLs at once. The interesting part was not the number but the caveat attached to it: not all of those URLs lead to unique web pages. In Google's words, "many pages have multiple URLs with exactly the same content or URLs that are auto-generated copies of each other." The same post noted that the first Google index in 1998 held 26 million pages, and that the index passed one billion pages in 2000.
That gap — between how many addresses exist and how many distinct documents exist — is the duplicate problem, and it is one of the least visible and most expensive things a search engine does. Every duplicate costs a crawl request, storage, index space, and a slot on a results page that no searcher wants filled with the same text three times. An engine that did no deduplication at all would routinely return positions one to ten as the same article on ten hostnames.
Deduplication is not a tidying-up step performed after indexing. It runs while crawling, to avoid fetching the same bytes repeatedly; while indexing, to decide what gets stored; and again at query time, to decide what a searcher actually sees.
Where duplicates come from
Very little duplication on the web is deliberate plagiarism. Most is a by-product of how sites are built, and Google's documentation groups the causes into recognisable families: protocol variants (the same page over HTTP and HTTPS, often at both the bare domain and the www host); site functions, meaning sorting, filtering and faceted navigation, where five combinable filters generate an enormous number of URLs over a small number of actual result sets; device variants, from the era of separately served mobile and desktop pages; region and language variants, where the same English text is served to three countries at three addresses; and accidental variants — session identifiers, tracking parameters appended by ad and analytics systems, printer-friendly versions, and staging servers nobody blocked.
Then there is duplication across sites rather than within them: syndicated wire copy republished by hundreds of outlets, documentation mirrors, package repositories, licensed encyclopaedia text, and outright scraping. These are harder, because no single site owner can settle which copy came first.
The pathological case is the infinite URL space: a calendar that will generate a page for any date you ask for, forever. Google used exactly that example in 2008. A crawler with no defence against it will crawl one site indefinitely and never finish.
Exact duplicates and near-duplicates are different problems
Finding exact duplicates is easy. Hash the document, compare hashes, and identical content collides. This catches mirrors and protocol variants cheaply, and it is the first filter almost any crawler applies.
Near-duplicates are the hard problem and the one that matters. Two copies of the same article on different sites differ in navigation, advertising, timestamps, a byline and a cookie banner. Byte-for-byte they are entirely different documents; to a reader they are the same story. Hashing is useless, because changing one character changes the hash completely.
The techniques the field settled on all work the same way: reduce a document to a compact fingerprint such that similar documents produce similar fingerprints, then compare fingerprints instead of documents. Shingling breaks text into overlapping runs of consecutive words and treats the document as the set of those runs; Andrei Broder's 1997 work on syntactic clustering of the web established the approach. MinHash stores only a sample of those runs, chosen so the probability of two documents agreeing equals the overlap between their sets. SimHash, published by Moses Charikar in 2002, maps a document to a short bit-string in which similar documents differ in only a few bits; Google researchers described using it for near-duplicate detection during crawling in a 2007 paper by Manku, Jain and Das Sarma.
The consequence worth understanding is that near-duplicate detection is a threshold judgement, not a fact. An engine chooses how similar is too similar. Too tight and distinct pages get collapsed; too loose and results fill with copies. There is no correct setting, only a tuned one, and engines tune it differently — which is part of why the same query on two engines differs in variety as much as in ranking.
Clustering, and picking one URL to represent the rest
Once an engine decides a set of URLs hold the same content, it groups them. Google's documentation puts it plainly: "If Google finds multiple pages that seem to be the same or the primary content very similar, it clusters them together," then "chooses the page that, based on the factors (or signals) the indexing process collected, is objectively the most complete and useful for search users." That address is the canonical URL — the representative of the cluster.
Google describes the signals in rough order of strength. A redirect is "a strong signal that the target of the redirect should become canonical". A rel="canonical" annotation in the markup is also "a strong signal" but explicitly advisory — Google's wording is that indicating a preference is "a hint, not a rule", and the engine may pick a different member of the cluster. Inclusion in a sitemap is "a weak signal". Beyond that, Google states it prefers HTTPS pages over equivalent HTTP pages, and prefers URLs that form part of an hreflang cluster.
Clustering reshapes the crawl as well. Google's documentation states that "the canonical page will be crawled most regularly; duplicates are crawled less frequently in order to reduce the crawling load on sites." Deduplication is, among other things, a politeness mechanism.
This is also the origin of the most persistent myth in the area: that duplicate content attracts a penalty. In the ordinary case it does not. What happens is consolidation and selection — one address is shown, the rest are treated as aliases. The visible symptom is a page vanishing from results, which feels like punishment and is a clustering decision. Deliberate large-scale copying of other people's sites is handled separately, as spam, by a different mechanism.
The last filter runs at query time
Index-time deduplication removes copies from storage. A second, independent filter runs when a results page is assembled, because two documents can be distinct enough to index and still too similar to show side by side. Google has surfaced this to users for over two decades with a line at the foot of the page offering to repeat the search "with the omitted results included" — an explicit admission that the default page is a filtered view rather than everything the index holds. It is also why searching a phrase from a syndicated press release returns a large estimated count while the listing itself runs out after a few dozen entries: the count estimates the index, the listing shows a deduplicated view of it.
Meta-search engines face a version of this that no single-index engine has. Dogpile and MetaCrawler — and today, self-hosted SearXNG instances — query several back-end engines at once and merge what comes back. The same URL routinely returns from two or three of them, at different positions, with different snippets. The merge step must recognise those as one result, choose a snippet, and reconcile incompatible rankings into a single order. Deduplicating across ranking systems is the defining technical work of a meta-search engine.
Small indexes make different choices
Deduplication is often discussed as if one approach were correct. The independent engines show otherwise. Mojeek, which crawls the web itself from the UK and has published milestones from one billion pages in 2015 to nine billion in 2025 on its own About page, has to be aggressive: when an index is one to two orders of magnitude smaller than Google's, every slot spent on a duplicate is coverage forgone.
Marginalia Search takes the position further. Its documentation reports roughly 300 million documents as of 2024 and states the philosophy directly — "an index with a million documents that are all of high quality is better than an index with a billion documents where only a fraction of them are interesting." An engine built on that premise is not so much deduplicating as declining to index most of the web, which is the same decision made earlier.
The failure mode has a name too. Cuil, the 2008 startup that claimed roughly 120 billion indexed pages, ran a crawler called Twiceler which webmasters reported was hitting their sites with randomly generated URLs to find pages nothing linked to — the infinite-URL-space problem manufactured on purpose. It produced load, complaints, and a page count of unknown value. Cuil shut down in September 2010.
Why the problem is never finished
Duplicate handling stays unfinished for structural rather than technical reasons. Originality is not determinable from the text: when a wire story appears on four hundred sites within an hour, nothing in the documents says which came first, and engines infer it from crawl timestamps, link patterns and site-level signals. Those inferences are sometimes wrong, which is why a syndicated copy occasionally outranks the newsroom that wrote it.
The threshold moves. A product page differing only in colour, a judgment differing only in the parties' names, two councils running the same template — reasonable people disagree about whether those are duplicates, and the right answer changes with the query.
Generated text has changed the volume. The cheapest way to produce a page that is not a byte-for-byte copy is now to have a model rewrite one. Fingerprinting built for copied prose is weaker against paraphrase, and the problem has shifted from detecting copies to judging whether a document adds anything at all.
No engine solves duplication; each manages it to a tolerance it has chosen. When the same story appears three times on one results page, that is not a bug. It is a threshold, set by someone, that judged those three documents different enough to keep. Google's canonicalization documentation remains the fullest public account any major engine has given of the process.
Frequently asked questions
Is there a duplicate content penalty?
In the ordinary case, no. Engines cluster duplicate URLs and select one canonical address to represent the group; the others become aliases and stop appearing separately. That looks like a penalty from outside but is a selection decision. Deliberate large-scale copying of other sites is handled by separate spam systems — a different mechanism with different consequences.
What is a canonical URL?
The single address a search engine picks to represent a cluster of pages it has judged to hold the same content. Google describes canonicalization as "the process of selecting the representative — canonical — URL of a piece of content". Redirects and rel="canonical" annotations are strong signals toward that choice, but Google states the annotation is a hint, not a rule.
How do search engines detect near-duplicate pages?
By fingerprinting rather than direct comparison. Documents are reduced to compact signatures — through shingling, MinHash or SimHash — designed so similar documents produce similar signatures. Moses Charikar published SimHash in 2002, and Google researchers described using it for near-duplicate detection during crawling in a 2007 paper. Comparing fingerprints is cheap enough to run at web scale.
Why does the same page appear at several different URLs?
Usually as a by-product of site architecture. Google's documentation lists protocol variants such as HTTP and HTTPS, device variants, region and language variants, site functions like sorting and filtering, and accidental variants including session identifiers and tracking parameters. None are attempts to duplicate anything; they are ordinary consequences of how web servers and content systems work.
Why do search results say some entries were omitted?
Because a second deduplication filter runs when the results page is assembled, separate from the one applied at indexing. Documents distinct enough to store can still be too similar to display together. Google has long offered a link at the foot of results to repeat the search with omitted entries included, making explicit that the default page is a filtered view.
Do meta-search engines have a different duplicate problem?
Yes, and it is their defining one. Dogpile, MetaCrawler and SearXNG query several back-end engines at once, so the same URL commonly returns from two or three sources at different positions with different snippets. The merge step must recognise those as one result, choose a snippet, and reconcile incompatible rankings into a single order.
Does a smaller search index need less deduplication?
It needs more discipline, not less. Mojeek, which crawls independently and reported nine billion pages in 2025, has far fewer index slots than Google, so every duplicate stored is coverage forgone. Marginalia goes further, indexing a few hundred million documents on an explicit quality-density principle — declining to index most of the web is an early form of the same decision.
Sources
- googleblog.blogspot.com/2008/07/we-knew-web-was-big.html
- developers.google.com/search/docs/crawling-indexing/canonicalization
- developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls
- en.wikipedia.org/wiki/SimHash
- mojeek.com/about/
- marginalia.nu/marginalia-search/faq/
- en.wikipedia.org/wiki/Cuil