|
1 | | -# Return Google Cache |
| 1 | +# Search Restore |
2 | 2 |
|
3 | | -Google removed the Cached link from search results in 2024. This puts a working |
4 | | -one back on every result, pointed at the Wayback Machine and archive.today. |
| 3 | +Search Restore combines two Google Search repairs in one Chrome extension: |
| 4 | +archive links under normal results and a button that loads later result pages |
| 5 | +into the current list. |
5 | 6 |
|
6 | | -[](https://ko-fi.com/jju1s) |
7 | | -[](LICENSE) |
8 | | -[](https://github.com/cig13zs/return-google-cache/actions) |
| 7 | +[](https://ko-fi.com/jju1s) |
| 8 | +[](LICENSE) |
| 9 | +[](https://github.com/cig13zs/search-restore/actions) |
9 | 10 |
|
10 | | -**[cig13zs.github.io/return-google-cache](https://cig13zs.github.io/return-google-cache/)** |
| 11 | +## Features |
11 | 12 |
|
12 | | -For about twenty years every Google result had a Cached link. One click to see |
13 | | -the page as Google last saw it, which was the thing you reached for when a page |
14 | | -was down, paywalled, changed or gone. Google retired it. This adds it back using |
15 | | -the Internet Archive. |
| 13 | +Archive links can open the latest Wayback Machine capture, check archive.today |
| 14 | +or save the live page. The load-more button requests one Google result page per |
| 15 | +click and stops near 100 results. |
16 | 16 |
|
17 | | -Under each result you get a small row: |
| 17 | +Each feature has its own switch. The switches default to on and are stored with |
| 18 | +`chrome.storage.local`. |
18 | 19 |
|
19 | | -``` |
20 | | -↻ Cached · archive.today · save now |
21 | | -``` |
| 20 | +## Install |
22 | 21 |
|
23 | | -Cached is the latest Wayback Machine snapshot, archive.today is its independent |
24 | | -mirror, and save now archives the live page immediately. |
| 22 | +1. Download the release ZIP and extract it. |
| 23 | +2. Open `chrome://extensions` and turn on Developer mode. |
| 24 | +3. Choose Load unpacked and select the extracted folder. |
| 25 | +4. Open a supported Google search page. |
25 | 26 |
|
26 | | -## No server, no tracking |
| 27 | +The ZIP puts `manifest.json` at its root, so the extracted folder is the one to |
| 28 | +select. Chrome, Edge, Brave and Opera can load MV3 extensions this way. |
27 | 29 |
|
28 | | -It reads the result links already rendered on your screen and builds archive |
29 | | -URLs locally. It opens no connection of its own, has no analytics, and declares |
30 | | -no `permissions` key. It runs on Google search pages and can do nothing else. |
| 30 | +## Scope and privacy |
31 | 31 |
|
32 | | -## Install |
| 32 | +The manifest declares only the `storage` permission. It has no |
| 33 | +`host_permissions` key. Its content script is limited to the HTTPS `/search` |
| 34 | +path on the Google domains listed in `manifest.json`, with a second runtime |
| 35 | +check that requires `location.pathname === '/search'`. |
33 | 36 |
|
34 | | -Not on the Chrome Web Store yet, so load it unpacked. Works in Chrome, Edge, |
35 | | -Brave and Opera. |
| 37 | +Chrome may describe that content-script scope as permission to read and change |
| 38 | +data on the listed Google sites. That access is what lets Search Restore inspect |
| 39 | +the visible result links and add controls to the search page; it does not cover |
| 40 | +other sites or other Google paths. |
36 | 41 |
|
37 | | -1. Download the latest zip from [Releases](https://github.com/cig13zs/return-google-cache/releases) and unzip it. |
38 | | -2. Open `chrome://extensions`, turn on Developer mode. |
39 | | -3. Load unpacked, then pick the `extension` folder. |
40 | | -4. Search Google. The Cached links are there. |
| 42 | +There is no analytics or extension server. The two switches stay in local |
| 43 | +extension storage. Google receives a request only when the user presses the |
| 44 | +load-more button. An archive service opens only after the user chooses its link. |
| 45 | +See [PRIVACY.md](PRIVACY.md) for the full policy. |
41 | 46 |
|
42 | | -## Files |
| 47 | +## Build and test |
43 | 48 |
|
44 | | -``` |
45 | | -extension/ |
46 | | - manifest.json MV3, runs only on google search pages |
47 | | - core.js cacheLinks() + enhance(), works in browser and Node |
48 | | - content.js injects styling, runs enhance(), re-runs as results stream in |
49 | | - popup.html toolbar popup |
50 | | - icons/ |
51 | | -core.test.js node core.test.js |
52 | | -``` |
| 49 | +Node and Python are enough for the release checks. |
53 | 50 |
|
54 | | -```bash |
55 | | -node core.test.js |
| 51 | +```text |
| 52 | +node tests/core.test.js |
| 53 | +node tests/content.test.js |
| 54 | +python scripts/package.py |
| 55 | +python tests/site.test.py |
| 56 | +python tests/package.test.py |
56 | 57 | ``` |
57 | 58 |
|
58 | | -The result walk is anchored on each result's `<h3>` title and then its link, |
59 | | -rather than on Google's build-hashed class names, so a redesign doesn't silently |
60 | | -break it. |
61 | | - |
62 | | -## Limits |
| 59 | +`scripts/package.py` writes a sorted ZIP with fixed timestamps, then writes its |
| 60 | +SHA-256 checksum. `tests/package.test.py` builds twice in temporary directories |
| 61 | +and compares the bytes. |
63 | 62 |
|
64 | | -Covers the main Google TLDs (com, co.uk, ca, de, fr, in, br, ph, jp and others). |
65 | | -If your local Google domain isn't in the manifest, add one line and reload. |
| 63 | +## Google markup limits |
66 | 64 |
|
67 | | -Archives don't have every page. If the Wayback Machine never captured a URL its |
68 | | -snapshot page says so, and you can use save now to capture it going forward. |
| 65 | +This extension is a page repair, not an official Google API client. The archive |
| 66 | +feature looks for result title links under `#rso`. Pagination uses the `start` |
| 67 | +query parameter and extracts result blocks from the next page. Google can change |
| 68 | +either behavior without notice. |
69 | 69 |
|
70 | | -Reads organic result links only. Ads, Google's own properties and image |
71 | | -thumbnails are skipped. |
| 70 | +A read-only check on August 23, 2026 found one `#rso` container and seven linked |
| 71 | +`h3` result titles for the query `example`. The same check found no captcha. See |
| 72 | +[MAINTENANCE.md](MAINTENANCE.md) for the selectors and failure cases that need |
| 73 | +watching. |
72 | 74 |
|
73 | | -## More tools |
| 75 | +## Files |
74 | 76 |
|
75 | | -- [Carryover](https://github.com/cig13zs/carryover), AI chat context transfer for ChatGPT, DeepSeek and Grok |
76 | | -- [Invisibles](https://github.com/cig13zs/invisibles), reveal and strip hidden Unicode from text |
77 | | -- [Rinse](https://github.com/cig13zs/rinse), see the GPS in a photo and wash it off |
78 | | -- [Return 100 Results](https://github.com/cig13zs/return-100-results), browse ~100 Google results as one page |
| 77 | +```text |
| 78 | +extension/ Chrome MV3 package source |
| 79 | +scripts/package.py deterministic ZIP and checksum builder |
| 80 | +store-assets/ Chrome Web Store artwork and screenshots |
| 81 | +tests/ core, content, manifest, page and package checks |
| 82 | +``` |
79 | 83 |
|
80 | | -Not affiliated with Google or the Internet Archive. MIT licensed. |
81 | | -[Ko-fi](https://ko-fi.com/jju1s) if you want to. |
| 84 | +Not affiliated with Google, the Internet Archive or archive.today. MIT licensed. |
0 commit comments