Skip to content

Tutto per WordPress, lo sviluppo web — e non solo

📥 Come scaricare un intero sito web con Wget su Windows

📥 Come scaricare un intero sito web con Wget su Windows

L'utility gratuita da riga di comando Wget può fare il mirroring di siti web, scaricando ogni pagina, ogni immagine, ogni file CSS e salvandoli in una cartella sul disco. Sembra magia, ma è pura ingegneria: attraversamento ricorsivo dei link, conversione dei percorsi in URL relativi e attenta conservazione della struttura. Dopo aver creato un archivio del genere, il sito si apre in locale come se fosse live; basta cliccare su un qualsiasi file .html.

Il problema è che guide decenti per Windows sono quasi inesistenti. La maggior parte dei manuali è scritta per Unix, e l'utente Windows medio ha bisogno di un .exe già pronto, comandi chiari e protezione da trappole comuni come la ricorsione infinita o i link non funzionanti. È questa lacuna che andremo a colmare.

💡 Panoramica rapida:

  • Scarica Wget per Windows e aggiungi il percorso dell'utility al PATH di sistema
  • Apri un prompt dei comandi nella cartella di destinazione ed esegui il comando di mirroring
  • Dopo il download, correggi link e percorsi non funzionanti con grepWin, e l'archivio è pronto per la consultazione
  • Se la ricorsione non serve, usa una modalità con un elenco di URL pre-preparato

Perché mai scaricare un sito intero

Internet non è per sempre. I siti chiudono, cambiano proprietari, subiscono restyling e perdono vecchi contenuti. La community del data hoarding su Reddit ha da tempo trasformato l'archiviazione in una cultura, e a ragione. Non puoi prevedere quando il tuo blog preferito sparirà o quando della documentazione preziosa finirà dietro un paywall, ma puoi salvarla nella sua forma attuale.

Gli scenari vanno dall'ovvio all'inaspettato. Stai per viaggiare verso un posto senza accesso a internet e ti serve un'istantanea funzionante di un sito informativo. Oppure collezioni ere del design; il web di ieri con i suoi layout a tabella e i pulsanti color acido è già storia. Anche il tuo sito ha senso farne il mirroring periodicamente: non è un backup in senso tradizionale (non puoi ripristinare il database), ma un'istantanea statica che sopravviverà a qualsiasi crash dell'hosting.

Un avvertimento importante: fai attenzione a cosa scarichi. Le leggi sul copyright e sulla privacy si applicano comunque. L'uso privato di una copia salvata è di solito legale, ma pubblicare contenuti altrui senza permesso può creare problemi.

Come Wget esplora un sito: meccanica del processo

Wget parte dall'URL che specifichi e segue ricorsivamente ogni link interno, teoricamente a profondità infinita. Se configurato correttamente, non si lancerà su internet aperto a scaricare Google: l'opzione --mirror abbinata a --reject-regex mantiene la scansione entro i confini del dominio di destinazione. Tutti i link esterni restano intatti, semplice testo con l'URL originale.

Lungo il percorso, Wget prende tutto: pagine HTML, fogli di stile, script, immagini, font. Poi converte i link interni in percorsi relativi, il che permette all'archivio di aprirsi in locale con la navigazione funzionante come sul sito live. I link esterni restano invariati e continuano a puntare a internet (se disponibile al momento della consultazione).

Un archivio, non un backup. Non puoi ripristinare un sito da una copia statica del genere perché non c'è database e non c'è logica lato server. Wget funziona come il crawler di un motore di ricerca: trova solo le pagine a cui qualcuno ha linkato. Nel processo, vedrai quanto sono importanti i link interni per la connettività dei contenuti; le pagine orfane senza link in entrata non entreranno nell'archivio.

Sebbene Wget non sia legato a nessun CMS in particolare, funziona particolarmente bene con i siti WordPress. Il motivo è semplice: widget standard come tag cloud e archivi mensili creano una fitta rete di link interni che il bot percorre senza sforzo.

Installare Wget su Windows

Il mondo di Wget ruota storicamente attorno a Unix, e gli utenti Windows qui sono ospiti. Se vai sul sito ufficiale GNU e scarichi il codice sorgente, otterrai un mucchio di file .c, non un programma pronto all'uso. Ti serve un binario pre-compilato:

  • Vai su eternallybored.org/misc/wget, un repository non ufficiale ma collaudato di build di Wget per Windows (versione attuale 1.21.4)
  • Scarica l'archivio zip dell'ultima versione ed estrailo in una cartella separata. Non è richiesta installazione; è un'utility portabile

Se fai doppio clic su wget.exe, una finestra del prompt dei comandi lampeggerà e si chiuderà subito. Wget è un programma da console; ha bisogno di un terminale aperto nella tua cartella di destinazione. E per evitare di copiare l'.exe in ogni cartella con archivi futuri, aggiungi Wget al PATH di sistema:

  • Premi Windows + R, incolla ed esegui:
1 "C:\Windows\system32\rundll32.exe" sysdm.cpl,EditEnvironmentVariables
  • Nella sezione Variabili utente, trova la variabile Path e clicca su Modifica...
  • Clicca su Nuovo e inserisci il percorso completo della cartella che contiene wget.exe
  • Chiudi tutte le finestre di dialogo cliccando su OK

Verifica: premi di nuovo Windows + Rcmd /k "wget -V". Dovresti vedere la versione di Wget, non un messaggio che dice che il comando non è riconosciuto.

Finestra del prompt dei comandi che mostra le informazioni sulla versione di Wget

Opzioni chiave di Wget: analisi dettagliata

La maggior parte delle opzioni ha equivalenti brevi a lettera singola, ma i nomi lunghi sono più significativi e leggibili senza un cheat sheet. Ho selezionato impostazioni collaudate nella pratica, quindi invece di leggere il manuale GNU Wget di 181 pagine, ottieni un estratto con la spiegazione del "perché" per ciascuna.

Opzioni fondamentali

--mirror abilita la ricorsione infinita. In sostanza, è un insieme di altre opzioni combinate sotto un unico flag. Senza, Wget scaricherà solo la pagina specificata, non l'intero sito. È --mirror che rende possibile il mirroring.

--page-requisites scarica tutte le risorse associate: CSS, JavaScript, immagini, font. Senza questa opzione, il tuo archivio apparirà come una pagina HTML nuda, senza stili né immagini.

--convert-links riscrive i link nei file HTML dopo il completamento del download in modo che funzionino localmente. Gli URL assoluti vengono sostituiti con percorsi relativi. Questo è ciò che ti permette di aprire index.html dal disco e navigare tra le pagine come su un sito live.

--adjust-extension aggiunge estensioni ai file che ne sono arrivati privi. I siti moderni spesso servono pagine senza .html alla fine (URL human-readable), e senza questa opzione il browser non capirà di trovarsi davanti a un documento HTML. C'è un'insidia: se il server comprime i contenuti via gzip, Wget potrebbe erroneamente assegnare al file un'estensione .gz. L'opzione successiva protegge da questo.

--compression=auto gestisce la compressione gzip al volo. Senza, un logo SVG potrebbe essere salvato come logo.svg.gz e diventare inutilizzabile per la visualizzazione locale. Questa opzione non è disponibile in tutte le build; gli utenti Unix a volte riscontrano la sua assenza. La build Windows da eternallybored.org la include.

--reject-regex "/search|/rss" impedisce il crawling degli URL contenenti le parole specificate. Le pagine di ricerca e i feed RSS generano catene infinite di parametri che riempiono il file system con nomi lunghi diverse schermate. L'espressione regolare qui usa la sintassi POSIX di base, non PCRE completo. Attenzione: /search taglierà non solo la spazzatura delle ricerche ma anche articoli legittimi con URL come yoursite.com/search-for-extraterrestrial-life. In caso di tali collisioni, rendi il pattern più specifico.

Opzioni aggiuntive

--no-if-modified-since disabilita il controllo dell'header If-Modified-Since. Includo questo flag solo quando il server si lamenta esplicitamente nei log. Se non prevedi di eseguire di nuovo nella stessa cartella per recepire le modifiche, questa opzione non è critica.

--no-check-certificate salta la verifica del certificato SSL. Durante il mirroring, non inserisci password né trasmetti dati confidenziali, quindi una verifica rigorosa del certificato è eccessiva. Questo flag evita grattacapi su siti con certificati scaduti o auto-firmati.

--user-agent falsifica lo User-Agent del browser. Alcuni server rilevano Wget e bloccano le richieste. Falsificarlo come un normale browser Chrome risolve il problema:

1--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"

Se il blocco avviene per IP, avrai bisogno di una VPN e possibilmente della distribuzione del download su più macchine. In questo caso, saranno utili anche le opzioni --wait e --random-wait per rallentare la frequenza delle richieste.

--restrict-file-names=windows limita i caratteri nei nomi dei file a un set sicuro per Windows. In Unix, i caratteri speciali nei nomi sono consentiti, e un archivio scaricato su una macchina Linux potrebbe essere illeggibile su Windows. Se lavori in Windows, il flag viene applicato automaticamente; se scarichi su Unix ma visualizzerai su Windows, specificalo esplicitamente.

--backup-converted salva una copia originale di ogni file che Wget ha modificato durante la conversione dei link. Questo raddoppia la dimensione dell'archivio. Non lo uso, ma lo menziono nel caso avessi bisogno di un backup puntuale di ogni modifica.

Aprire il prompt dei comandi nella cartella giusta

Wget viene eseguito da un terminale, e il terminale deve puntare alla cartella in cui prevedi di archiviare la copia. Ci sono diversi metodi, da quelli standard a quelli avanzati:

  • Windows + Rcmd → Invio, poi cd /d C:\path\to\archive (il flag /d permette di passare da un'unità all'altra)
  • Se il percorso contiene spazi, racchiudilo tra virgolette: cd /d "C:\My Archive"

Più veloce, in una sola riga: Windows + Rcmd /k "cd /d C:\path\to\archive". Il flag /k mantiene la finestra aperta dopo l'esecuzione del comando.

Se usi Total Commander: Comandi → Apri shell dei comandi apre un terminale direttamente nella cartella corrente. Per Esplora risorse, c'è una modifica al registro che aggiunge un'opzione "Apri finestra di comando qui" al menu contestuale.

Avviare il download: il comando completo

Mettiamo tutto insieme. Ecco il comando che uso per il mirroring di un sito web medio:

1wget --mirror --page-requisites --convert-links --adjust-extension --compression=auto --reject-regex "/search|/rss" --no-if-modified-since --no-check-certificate --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" https://example.com

Lo stesso si può scrivere con flag brevi: wget -mkp -E --compression=auto -R "/search|/rss" .... Ma i nomi lunghi rendono il comando auto-documentante. Tra un mese, aprirai il tuo file .bat e capirai immediatamente cosa fa ogni opzione.

Sostituisci https://example.com con l'URL effettivo del sito target e premi Invio. Il processo può richiedere da pochi minuti a diverse ore, a seconda delle dimensioni del sito e delle limitazioni del server.

Post-elaborazione: grepWin e correzioni tipiche

Dopo il download, l'archivio quasi sempre richiede alcune rifiniture. L'utility grepWin è un coltellino svizzero per la ricerca e sostituzione in blocco nei file di testo su Windows. Ecco un paio di scenari tipici:

  • Rimozione di tag HTML spazzatura. Alcune piattaforme CMS generano tag <source> vuoti che interferiscono con il rendering. In grepWin, seleziona la ricerca regex per <source media=".*">, specifica la maschera *.html e sostituisci con una stringa vuota.

  • Correzione dei percorsi delle risorse. Se alcuni percorsi sono rimasti assoluti, grepWin li troverà con un pattern come src="https://example.com/ e li sostituirà con l'equivalente locale.

Finestra dell'utility grepWin con impostazioni di ricerca e sostituzione

Questo è solo un punto di partenza; ogni sito ha le sue sorprese. I punti di forza di grepWin: anteprima istantanea prima della sostituzione, elaborazione ricorsiva delle cartelle e supporto per le regex. Ma quando il volume delle modifiche va oltre il semplice «trova e sostituisci», strumenti Unix come sed e grep offrono molta più flessibilità. Le versioni per Windows sono disponibili tramite WSL o Cygwin.

Alternativa: scaricare da una lista di URL senza ricorsione

La scansione ricorsiva non è sempre la scelta giusta. Se il sito è enorme ma ti serve solo una selezione specifica di pagine, è più semplice preparare una lista di URL e passarla a Wget con --input-file:

1wget --input-file=links.txt --page-requisites --convert-links --adjust-extension --compression=auto --no-if-modified-since --no-check-certificate --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"

Nota che --mirror e --reject-regex sono stati rimossi: la ricorsione non serve e la lista di URL la controlli tu.

Come si compila una lista del genere? Un metodo è la ricerca avanzata di Google: la query site:yoursite.com "keyword phrase" restituisce le pagine indicizzate sull'argomento. Imposta i risultati a 100, procurati l'estensione Copy Links per Chrome e copia gli URL in batch su links.txt.

Video: fare il mirroring di un sito in 5 minuti

Per vedere l'intero processo dal vivo, dall'installazione all'archivio finito, guarda questo screencast:

L'autore segue il processo da zero: scarica Wget, configura le opzioni, esegue il comando e apre il risultato in un browser. Consiglio di guardarlo prima del primo utilizzo; 7 minuti di video ti faranno risparmiare un'ora di debug.

⁉️🤔 Domande frequenti

Posso ripristinare un sito da un archivio Wget?

Un archivio Wget è una fotografia statica: HTML, CSS, JS e file multimediali. Non contiene database né logica lato server. Non puoi caricare una copia del genere su un hosting e far rivivere WordPress con commenti e pannello di amministrazione. È uno strumento per preservare i contenuti, non per il backup. Per un backup completo di WordPress, usa plugin come UpdraftPlus o Duplicator, che salvano sia i file sia il database.

Wget sta scaricando troppa spazzatura. Come posso limitarlo?

Una combinazione di --reject-regex (filtro URL per pattern) e --reject (filtro per estensioni di file) risolve il problema. Ad esempio, aggiungere --reject=jpg,png,gif salterà tutte le immagini. Oppure --reject-regex "/tag/|/category/|/page/" escluderà gli archivi per tag, categorie e la paginazione. La chiave è testare su un piccolo sottoinsieme di pagine prima di un'esecuzione completa.

Il server ha bloccato il mio IP dopo che ho iniziato a scaricare. Cosa devo fare?

Wget può essere rilevato dallo User-Agent o dalla frequenza delle richieste. Tre livelli di protezione: spoofing dello User-Agent tramite --user-agent (mostrato sopra), limitazione della velocità con --wait=1 --random-wait (pausa di 1 secondo più un'aggiunta casuale) e cambio dell'IP tramite VPN. Per siti di grandi dimensioni, puoi suddividere il download: prepara diverse liste di URL ed esegui Wget in parallelo da macchine o endpoint VPN differenti.

Perché Wget è migliore delle estensioni del browser per salvare le pagine?

Estensioni come SingleFile salvano una singola pagina. Wget replica un intero sito, con navigazione, paginazione e tutti i link interni. Per un blog con 500 articoli, un'estensione del browser richiederebbe 500 clic manuali. Wget lo fa con un solo comando. Inoltre, le estensioni del browser non convertono i link per la navigazione locale: otterresti 500 file isolati senza alcun collegamento tra loro.

L'archivio pesa gigabyte. Come lo comprimo e lo conservo?

Una cartella con migliaia di piccoli file è scomoda da trasferire, backuppare e scansionare con un antivirus. Comprimo questi archivi in RAR usando il metodo "Store" o "Velocissimo": la velocità conta più del rapporto di compressione perché HTML e media sono già compressi. Aggiungo sempre un record di ripristino, che salva la situazione in caso di settori danneggiati sul disco o errori di trasferimento. Il risultato: un singolo file che si copia in pochi secondi e non si sfalda durante l'archiviazione.

Scaricare o non scaricare: quando Wget vale la pena

Wget non è per l'uso quotidiano. È uno strumento per un compito specifico: ottenere una copia statica completa di un sito a cui tieni o che trovi utile. Quando c'è il rischio che la risorsa scompaia, usa Wget. Quando lavorerai offline, usa Wget. Quando devi preservare un "fossile digitale" dell'era di Geocities, a maggior ragione.

Per pagine occasionali, basta un'estensione del browser. Per un backup completo di WordPress, usa un plugin di backup. Ma quando hai bisogno specificamente di un archivio autosufficiente e navigabile di un intero sito web, Wget non ha praticamente alternative, e ora sai come eseguirlo su Windows senza problemi.

Provalo su un piccolo sito di un conoscente o sul tuo blog personale. La prima esecuzione chiarirà molti dubbi, e la seconda andrà liscia. E non dimenticare il record di ripristino nel tuo archivio: fai in modo che la tua collezione sopravviva a qualsiasi hard disk.