How to restore a website from the Wayback Machine
A step-by-step guide: find the last healthy snapshot, download the right capture of every URL, and put the site back online without losing a single URL.
Expired domain capture
We find the last snapshot in which the site was really itself, skip the parking pages that came after, and rebuild it as fast static HTML. On top goes the SEO layer Ghost uses: canonical tags, structured data, sitemaps and RSS.
| Year | J | F | M | A | M | J | J | A | S | O | N | D |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2014 | Jan 2014: good | Feb 2014: good | Mar 2014: good | Apr 2014: no capture | May 2014: good | Jun 2014: good | Jul 2014: good | Aug 2014: good | Sep 2014: no capture | Oct 2014: good | Nov 2014: good | Dec 2014: good |
| 2015 | Jan 2015: good | Feb 2015: good | Mar 2015: good | Apr 2015: good | May 2015: no capture | Jun 2015: good | Jul 2015: good | Aug 2015: good | Sep 2015: good | Oct 2015: no capture | Nov 2015: good | Dec 2015: good |
| 2016 | Jan 2016: no capture | Feb 2016: good | Mar 2016: good | Apr 2016: good | May 2016: good | Jun 2016: no capture | Jul 2016: good | Aug 2016: good | Sep 2016: good | Oct 2016: good | Nov 2016: no capture | Dec 2016: good |
| 2017 | Jan 2017: good | Feb 2017: no capture | Mar 2017: good | Apr 2017: good | May 2017: good | Jun 2017: good | Jul 2017: no capture | Aug 2017: good | Sep 2017: good | Oct 2017: weak | Nov 2017: good | Dec 2017: no capture |
| 2018 | Jan 2018: good | Feb 2018: good | Mar 2018: no capture | Apr 2018: good | May 2018: good | Jun 2018: good | Jul 2018: good | Aug 2018: no capture | Sep 2018: good | Oct 2018: good | Nov 2018: good | Dec 2018: good |
| 2019 | Jan 2019: good | Feb 2019: good | Mar 2019: good | Apr 2019: no capture | May 2019: good | Jun 2019: good | Jul 2019: good | Aug 2019: good | Sep 2019: no capture | Oct 2019: good | Nov 2019: good | Dec 2019: good |
| 2020 | Jan 2020: good | Feb 2020: good | Mar 2020: good | Apr 2020: weak | May 2020: no capture | Jun 2020: good | Jul 2020: good | Aug 2020: good | Sep 2020: good | Oct 2020: no capture | Nov 2020: good | Dec 2020: weak |
| 2021 | Jan 2021: bad | Feb 2021: no capture | Mar 2021: bad | Apr 2021: no capture | May 2021: no capture | Jun 2021: bad | Jul 2021: no capture | Aug 2021: bad | Sep 2021: no capture | Oct 2021: no capture | Nov 2021: bad | Dec 2021: no capture |
| 2022 | Jan 2022: no capture | Feb 2022: bad | Mar 2022: no capture | Apr 2022: bad | May 2022: no capture | Jun 2022: no capture | Jul 2022: bad | Aug 2022: no capture | Sep 2022: bad | Oct 2022: no capture | Nov 2022: no capture | Dec 2022: bad |
| 2023 | Jan 2023: no capture | Feb 2023: no capture | Mar 2023: bad | Apr 2023: no capture | May 2023: bad | Jun 2023: no capture | Jul 2023: no capture | Aug 2023: bad | Sep 2023: no capture | Oct 2023: bad | Nov 2023: no capture | Dec 2023: no capture |
Real siteThin or unclearParked, down or taken overNo captureChosen snapshot
Last good snapshot 20201114083015
We score the homepage month by month. Parking pages, suspended hosting, default server pages and spam from a later owner are marked, so you can see when the site was healthy.
The last good snapshot is chosen for you. You can pick any other healthy month. Pages are only taken from the period in which the site was itself.
Every archived page, image, stylesheet and script is downloaded, cleaned of Wayback leftovers and the old owner's tracking code, and converted to UTF-8.
You get a ZIP with the site, an .htaccess for Apache and LiteSpeed, an nginx config and a report. Upload it to any Apache, LiteSpeed or nginx hosting.
An expired domain is worth its backlinks, and backlinks point at exact addresses. So /about.php stays /about.php, query-string pages keep their query string, and a URL without a trailing slash still has none. Static hosting cannot serve some of these by itself, so the included server rules map them to stored files internally. The address in the browser and in Google stays the same.
The only redirects are the ones the original site made, as the archive recorded them.
| Original URL | After restore |
|---|---|
| /about.php | 200 same URL |
| /index.php?page=contact | 200 same URL |
| /blog/2019/05/rye-bread | 200 no slash added |
| /?p=123 | 200 same URL |
| /style.css?ver=1.2 | 200 same URL |
| /old-page.html | 301 as in 2018 |
The healthy version of every page, with its own HTML, images, CSS and JavaScript. The original doctype is kept, so old layouts render the way they did.
Each page gets canonical, description, Open Graph, Twitter card and JSON-LD in one block before </head>, like Ghost's ghost_head.
A sitemap index with pages, posts, tags and authors, an RSS feed of the blog posts, a clean robots.txt and a 404 page.
.htaccess for Apache and LiteSpeed and a config for nginx, which keep every URL. _redirects and _headers for Netlify and Cloudflare Pages, where URLs with a query string do not work and other limits apply.
The previous owner's Analytics, AdSense and pixel scripts are removed, so your traffic is not reported to them.
Which snapshot was used and why, how many pages came back, and which files the archive never had.
A step-by-step guide: find the last healthy snapshot, download the right capture of every URL, and put the site back online without losing a single URL.
Backlinks point at exact addresses. Here is how to keep .php pages, query strings and missing trailing slashes working on modern hosting, without a single redirect.