A website is one bad deploy, hacked plugin, expired card, or host outage away from disappearing. The people who recover in minutes are the ones who set up a free website backup before they needed it; the people who lose months of work are the ones who meant to get around to it. The good news is that a solid, automated backup costs nothing but an hour of setup — this guide covers the free methods that actually work in 2026, when to use each, and the exact commands.
There's no single "back up my site" button that fits every case, because sites differ. A static marketing page, a WordPress blog, and a custom PHP + MySQL app each need a slightly different approach. We'll cover all of them.
First, know what you're backing up
A backup is only complete if it captures everything needed to rebuild the site. For a dynamic site that's two separate things:
- Files — HTML/PHP/JS/CSS, images, uploads, themes, plugins, config.
- Database — MySQL/MariaDB/PostgreSQL, where the actual content lives.
Miss either and your restore fails: files without the database give you an empty shell; a database dump without the files gives you content with nowhere to render. A static site (plain HTML, or a built Jekyll/Hugo/Astro site) has no database, so files alone are enough.
A crawler-based copy (HTTrack, wget) is a third, different thing: it saves the rendered public pages, not your source code or database. That's perfect for archiving a site you don't control, or making an offline browsable copy, but it is not a substitute for a real backup of a site you own. Keep that distinction in mind as you pick a method.
Method 1 — Your host's built-in backups (start here)
Most hosting control panels include free backup tooling, and it's the least-effort option:
- cPanel — "Backup" / "Backup Wizard" creates a full account archive (files + databases + email + settings) you can download. Many hosts also keep automatic daily/weekly restore points.
- Plesk — the Backup Manager does scheduled full or incremental backups to local or remote storage.
- Managed WordPress / managed hosts — usually take automatic daily snapshots you can restore with one click.
- VPS / cloud — providers offer server snapshots; note snapshots often cost a little, while file/DB backups can be done free with the methods below.
Check what your host already does before building anything — you may find nightly backups are on by default. The catch: host backups often live on the same infrastructure as your site, so keep an independent off-site copy too (the 3-2-1 rule below).
Method 2 — Files + database by hand (the modern PHP/MySQL workflow)
If you run a small PHP + MySQL project, the old routine was copying files over FTP and exporting the database through phpMyAdmin by hand — slow, error-prone, and with no version history. The modern free equivalent is two commands you can automate and schedule.
Files — sync with rsync over SSH (only transfers what changed, unlike a full FTP re-copy):
# Pull the whole site directory down to a local backup folder
rsync -avz --delete user@yourserver.com:/var/www/yoursite/ ./backup/files/
Database — dump with mysqldump (or pg_dump for PostgreSQL):
# One compressed SQL dump of the database
mysqldump --single-transaction -u dbuser -p yourdb | gzip > backup/db-$(date +%F).sql.gz
--single-transaction gives a consistent snapshot without locking the whole database. On WordPress you can also use WP-CLI: wp db export and wp media .... Restoring is the reverse: rsync the files back and gunzip < dump.sql.gz | mysql -u dbuser -p yourdb.
To make it a real free website backup rather than a manual chore, wrap both commands in a short shell script and schedule it (see Method 6).
Method 3 — CMS backup plugins
If you're on WordPress (or a similar CMS), a plugin is the easiest fully-featured route, and the leading ones have capable free tiers:
- UpdraftPlus — the most popular; free tier backs up files + database on a schedule and sends copies to Google Drive, Dropbox, or other remote storage. Restore from the dashboard.
- Duplicator — great for full-site backups and migrations; packages the whole site into a portable archive.
- All-in-One WP Migration — simple one-click export/import of the entire site.
The big advantage: these push your backup off-site to cloud storage automatically, which is exactly what you want. Set a schedule, point it at a Drive/Dropbox account, and confirm the first backup actually lands there. Other CMSs (Joomla, Drupal) have equivalent extensions.
Method 4 — Crawler-based site copiers (HTTrack, wget)
To download an entire website as a browsable static copy — for offline reading, archiving a site before a redesign, or preserving one you don't own — use a site copier. These are essentially polite web crawlers: they fetch a page, find its links, and follow them, rewriting URLs so the copy works locally.
HTTrack (the classic "website copier", free and open source, GUI on Windows or httrack/webhttrack on Linux/macOS):
httrack "https://example.com" -O ./example-backup "+example.com/*" -v
That mirrors the whole site into ./example-backup, staying on the example.com domain.
wget (already on most Linux/macOS systems) does the same from one command:
wget --mirror --convert-links --adjust-extension \
--page-requisites --no-parent \
https://example.com/
--mirror— recursive, with timestamping.--convert-links— rewrite links so the offline copy is navigable.--adjust-extension— save.htmlextensions where needed.--page-requisites— also grab CSS, JS, and images.--no-parent— don't climb above the start path.
The limitation you must understand: copiers save what the server sends. They capture rendered HTML and assets but not your server-side source (PHP), your database, or content that only appears after JavaScript runs. For a modern single-page app, a plain wget mirror will look empty because the content is rendered client-side — you'd need a headless browser to render first (see scraping dynamic content). Use copiers for archiving and offline copies, not as the primary backup of a dynamic site you own.
Method 5 — Put your code in Git
The original pain point behind manual backups was "no version control." In 2026 the answer for anything code-shaped is Git: commit your themes, templates, config, and application code, and push to a free private repo on GitHub, GitLab, or Bitbucket. You get full history, off-site storage, and the ability to roll back any change — for free. Git doesn't back up your database or user uploads (keep those out of the repo and cover them with Methods 2–3), but for the code half of the site it's the best free versioned backup there is.
Method 6 — Automate and schedule it
A backup you have to remember to run is a backup you'll forget. Schedule the file/DB script from Method 2 with cron (or a systemd timer):
# crontab -e — run the backup script every night at 2:30 AM
30 2 * * * /home/user/backup-site.sh >> /home/user/backup.log 2>&1
Keep several dated copies (the date +%F in the dump filename does this) so you can restore to a point before a problem started, not just to last night. Rotate old ones out with a find ... -mtime +30 -delete line to cap disk use. Scheduling on Linux is covered in more depth in the Linux web scraper tips.
Best practices: the 3-2-1 rule
The industry standard, and it's free to follow:
- 3 copies of your data,
- on 2 different media/locations,
- with 1 copy off-site (different provider than your host).
Plus two rules people skip at their peril:
- Test your restores. An untested backup is a guess. Periodically spin the backup up somewhere and confirm the site actually comes back.
- Cover files and database for dynamic sites, every time.
Which method should you use?
| Situation | Best free method |
|---|---|
| Any site, least effort | Host control-panel / managed backups (Method 1) |
| Custom PHP + MySQL app | rsync + mysqldump on cron (Methods 2, 6) |
| WordPress / CMS | UpdraftPlus or Duplicator to cloud (Method 3) |
| Static site | wget/HTTrack mirror, or just Git (Methods 4, 5) |
| Archiving a site you don't own | HTTrack / wget copier (Method 4) |
| Application code + config | Git to a private repo (Method 5) |
Most real sites use two together — for example, a WordPress plugin for files+DB to Drive, plus Git for custom theme code.
FAQ
What's the easiest free way to back up a website? Check your host first — cPanel/Plesk and managed hosts usually include free backups. On WordPress, install UpdraftPlus and schedule backups to Google Drive. Both take about ten minutes.
Does HTTrack or wget fully back up my site? No. They copy the public rendered pages, not your source code, database, or JavaScript-rendered content. They're ideal for offline copies and archiving sites you don't control, but for a site you own, use a real file + database backup.
How do I download an entire website for offline use?
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent https://example.com/, or HTTrack if you prefer a GUI. Note this won't capture content that only appears after JavaScript runs.
How often should I back up? Match the pace of change: daily for an active blog or store, weekly for a rarely-updated site, and always right before a major update or migration. Automate it with cron so it's not up to memory.
Crawler-based copying is really just web scraping pointed at a whole site — and once you're archiving many sites, or need the pages as clean structured data rather than a folder of HTML, the job gets bigger fast. If you need large-scale site archiving or extraction delivered as usable data, scraping.pro runs web scraping as a managed service and handles the crawling, rendering, and structuring for you.