SaveHere for website owners

SaveHere is an iPhone app for saving links. When a person shares a link, the app on their iPhone reads that one page. It isn’t a crawler. Requests come from the person’s iPhone, not from a SaveHere server.

How to recognize SaveHere

User-Agent

SaveHere/<version>

For example SaveHere/0.1.0. No device or browser name.

Sent from
The person’s iPhone. The IP address is theirs, not ours.
Accept
Page requests: text/html,application/xhtml+xml,*/*;q=0.8
Accept-Language
Page requests: the person’s language settings.
robots.txt and pictures
Only the User-Agent above. robots.txt requests also send Accept: text/plain,*/*;q=0.8. Any other headers are the ones iOS adds itself.
Cookies and login
None. SaveHere never sends cookies and never logs in.

When SaveHere sends requests

  • Share: one page request at the moment a person shares a link.
  • Read Again: one page request when the person taps Read Again on that save.
  • Status check: when the person opens a save that has content, one GET to see whether the page is still there. At most once every 24 hours per save.
  • robots.txt: before each page request, including the status check, /robots.txt. Each iPhone keeps it for up to 24 hours.
  • Pictures: the pictures and site icon found on a page, once each. For a link read while sharing, the app downloads them the next time the person opens it.

SaveHere never requests pages on a schedule or in batches. Every page request starts with something the person does: sharing, tapping Read Again, or opening a save.

Each request has a 15-second timeout. SaveHere reads at most 2 MB of HTML per page (6 MB on YouTube) and 20 MB per picture.

What SaveHere doesn’t do

  • Crawl, follow links, or request pages in batches.
  • Log in, or send cookies.
  • Pretend to be a browser or another bot.
  • Solve CAPTCHAs or challenge pages, or use unofficial APIs.
  • Download video or audio files.

How to stop SaveHere

Option 1: robots.txt

Name SaveHere in your robots.txt:

robots.txt
User-agent: SaveHere
Disallow: /

Or block only part of your site:

robots.txt
User-agent: SaveHere
Disallow: /members/
Allow: /members/public/
  • SaveHere follows only groups that name it. Case doesn’t matter, and SaveHere/1.0 also counts.
  • SaveHere ignores User-agent: * groups. It reads one page because a person asked, so it doesn’t treat itself as a crawler.
  • The longest matching rule wins. If an Allow and a Disallow are the same length, Allow wins. * and $ work as in RFC 9309.
  • When a path is disallowed, SaveHere sends no page request and keeps only the link.
  • Changes reach each iPhone within 24 hours. If robots.txt can’t be loaded (network error, 5xx, or slower than 2 seconds), SaveHere reads the page as usual. A 4xx response means no rules.

Option 2: ask us to add your domain

Email aaron@savehere.app with your domain and a way for us to confirm it’s yours. We add it to a list built into the app. For a listed domain and its subdomains, SaveHere sends no requests at all, doesn’t use the page from Safari, doesn’t use LinkPresentation, and keeps only the link.

The list ships inside the app, so it takes effect when people update to the version that includes your domain.

When robots.txt doesn’t apply

  • Pages shared from Safari: if a person shares from Safari, SaveHere can use the page Safari is already showing them, without a new request. robots.txt doesn’t cover this, because the person already has the page. The domain list does.
  • Pictures and site icons: after a page is read, its pictures and site icon are downloaded with the same SaveHere User-Agent. robots.txt isn’t checked again for them.
  • Redirects: SaveHere checks the robots.txt of the shared link’s site. If that link redirects to another site, the other site’s robots.txt isn’t checked.

Contact

Questions, problems or opt-out requests: aaron@savehere.app