CopyAnySite vs wget

wget is free and everywhere. Here is exactly what its copies lose when the original server is unreachable, page by page.

wget costs nothing, is already installed, and for the right site it is genuinely the correct answer. The comparison is only interesting because people use it for the wrong site.

The measurement

Eight pages, three runs, median, each copy rendered with the original host unreachable and diffed against the live page with pixelmatch at desktop and mobile widths. wget invocation: wget -p -k (page requisites plus link conversion), the usual single-page recipe. Harness: npm run bench:rivals.

PageCopyAnySitewget -p -k
arthize.com99.97%99.24%
linear.app99.64%84.20%
news.ycombinator.com100%100%
Travlia (WP theme demo)98.39%66.00%
wikipedia.org100%99.87%
stripe.com95.99%56.86%
heyclicky.com98.71%96.17%
tailwindcss.com98.25%96.88%
Average98.87%87.40%
Remote requests left4554

wget ties us at 100% on Hacker News — a page with no webfonts and no JavaScript, where there is nothing to get wrong. It stays within a few points on Wikipedia, the Tailwind docs and a simple agency site. It collapses on the theme demo (66%) and stripe.com (56.86%), and that 554 is the number to sit with: those are references still pointing at the original hosts, which means those copies look better online than they are.

Why

wget fetches what the server sends. It never runs JavaScript, so anything the page builds after load is absent; it rewrites the links it recognises, so assets referenced from CSS url() inside style attributes, image-set(), masks and <use href> sprite references frequently stay remote; and it has no idea which srcset candidate your screen actually used.

CopyAnySite starts from the rendered page: the settled DOM, the computed style of every element and pseudo-element, the fonts the page actually renders in, canvas as pixels, hidden SVG sprites, video posters — then embeds the bytes rather than the addresses.

Where wget wins outright

  • Free.
  • Unattended and scriptable. Cron, CI, a shell loop over 10,000 URLs — no browser session required.
  • Whole-site mirroring with --mirror, which is a job we deliberately bound (depth, page cap, patterns).
  • Tiny output on simple pages, and no dependency beyond itself.
  • Server-rendered sites, where the fetch model is not a handicap at all.

Where the extension wins

  • Pages that need a browser to exist.
  • Pages where fidelity is decided by fonts, pseudo-elements, masks or canvas.
  • A single self-contained file instead of a folder.
  • Editable WordPress/Gutenberg export, ZIP bundles, AI dev kits, MCP.

Use both, honestly

For a large traditional site: wget --mirror for coverage, a rendered capture for the handful of pages whose design matters. For a modern marketing site: wget will not help, whatever flags you add.

If you want the flag recipe that gets the most out of wget, it is in wget alternatives, along with the one-line test for whether the site is server-rendered at all.

FAQ

Is wget good enough to copy a website?

For server-rendered sites, often yes. In our offline benchmark it averages 87.40% across eight pages but leaves 554 requests aimed at the original hosts, and it drops to 56–66% on design-led pages.

--convert-links only rewrites references it can parse. Assets referenced from inline styles, image-set(), CSS masks and SVG <use> targets commonly survive as absolute URLs to the origin.

Can wget copy a React or Next.js site?

Only the server-rendered part. Anything hydrated or fetched client-side is missing, because wget never executes JavaScript.

Is a browser extension slower than wget?

Per page, yes — it renders the page and downloads every asset it referenced. That is the cost of capturing what the browser actually painted.

Which produces smaller files?

wget, usually by a wide margin, because it references rather than embeds and skips what it cannot parse. Smaller is only better if the copy still renders correctly offline.

Try it on the page you are looking at

CopyAnySite is a Chrome extension: open any page you can reach, press capture, and take away a standalone HTML file, an editable WordPress page, or a kit a coding agent can build from. The free key needs no card.

Download CopyAnySite

Keep reading