wget alternatives for downloading a website
The flags that make wget work, the sites where it cannot work at all, and what to use instead for each case.
wget is on every machine, costs nothing and is the fastest way to get a usable copy of a server-rendered page or site. Start by making sure you are not fighting a flag problem rather than a tool problem.
First, the invocation people usually get wrong
wget --mirror --page-requisites --convert-links --adjust-extension \
--restrict-file-names=windows \
--span-hosts --domains=example.com,cdn.example.com \
--level=3 --wait=1 --random-wait \
--reject-regex='(\?|/cart|/search)' \
https://example.com/
--page-requisites— without it you get HTML with no CSS or images.--convert-links— without it your copy links to the live internet. This is the single most common reason a "downloaded site" breaks later.--span-hostswith--domains— assets usually live on a CDN; allow it, and only it.--adjust-extension— so.htmlfiles open locally.--wait— politeness, and the reason you do not get blocked halfway through.
Even done correctly there is a residue: across eight single pages in our offline benchmark, wget copies still made 554 requests to the original hosts and averaged 87.40% pixel fidelity when the origin was unreachable.
When wget cannot work
If the page's content is assembled in the browser, wget downloads a shell. Test in one line:
curl -s https://example.com/ | grep -c "some visible sentence"
Zero means the text is not in the server's HTML, and no combination of flags will retrieve it.
Alternatives by case
Client-rendered pages → a browser-based capture
Load the page, let it settle, capture the rendered DOM with computed styles, embed the assets. SingleFile does this free and is excellent on articles; CopyAnySite does it with computed styles, pseudo-elements, hidden SVG sprites and canvas pixels, and measures 98.87% average offline fidelity across the same eight pages (SingleFile 87.93%, wget 87.40%, monolith 83.44%).
One self-contained file instead of a folder → monolith or SingleFile
wget gives you a directory tree. monolith https://example.com > page.html gives you one file from the CLI (server-fetch model, 83.44% average in our runs); SingleFile gives you one file from the browser.
A whole traditional site with a GUI → HTTrack, Cyotek WebCopy, SiteSucker
Same model as wget, friendlier rules, resumable, no flag archaeology.
An API or JSON, not a page → curl
If you actually want data, curl plus jq beats mirroring pages. And if you want fields across many pages, that is scraping, which is a different job.
The design, editable → capture and import to WordPress
wget output is not editable content. Capture and export Gutenberg section blocks instead: convert a website to WordPress.
Verifying a wget copy
grep -ro "https://example\.com" . | wc -l # references still pointing at the origin
Then open the entry page with the network off and follow ten links. Anything that reaches for the internet was never downloaded.
FAQ
What is the wget command to download an entire website?
wget --mirror --page-requisites --convert-links --adjust-extension --span-hosts --domains=example.com,cdn.example.com --level=3 --wait=1 https://example.com/. The --convert-links and --domains parts are what make the result usable offline.
Why does my wget copy look broken?
Usually missing --page-requisites (no CSS or images), missing --convert-links (references still remote), assets on a CDN you did not allow, or a site that renders its content with JavaScript.
Can wget download a JavaScript website?
No. It fetches the server's response and never runs scripts. Use a browser-based capture tool for those sites.
Is curl better than wget for this?
No — curl fetches single resources and has no recursion or link rewriting. It is the better tool for APIs, not for copying pages.
Is wget still the best free option?
For mirroring server-rendered sites from a terminal, yes. For a single page that must look right offline, a browser capture beats it clearly in measurement.
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