For site owners

BluejayBot

If you found this URL in your server logs, something on your site was saved by someone using Bluejay, and we came back to check the page still works.

How to identify it

Every request carries this user agent, and nothing else uses it:

BluejayBot/1.0 (+https://getbluejay.app/bot)

What it is doing

Bluejay is a bookmarking app. When someone saves a link, we periodically re-check that it still resolves, so we can tell that person if the page has gone. That is the whole job.

BluejayBot is not a crawler. It never follows links, never discovers pages, and never explores a site. It only ever requests the exact URLs that individual people have deliberately saved. If one page of yours is being checked, that is because one person saved that page.

Nothing it fetches is republished. Page titles and descriptions are shown back to the person who saved the link, in their own private collection, and nowhere else.

What it requests

Usual request A single HEAD. No body is transferred at all.
Occasional follow-up A GET with Range: bytes=0-16383, used only when HEAD is refused, or to tell a real page from a "page not found" screen that returns 200. We read at most 16 KB and then hang up rather than draining the response.
Redirects Followed, up to 5 hops.
Never POST, form submissions, logins, or anything behind a paywall or session.

How often

Per saved link, and never more than that: a healthy link is re-checked about once a month for paying users and once a quarter otherwise. A link that fails is checked less often, not more — the gap grows 6 hours, 1 day, 3 days, 1 week, 2 weeks — so a page that stays down is quickly left alone. Someone can also ask for their own collection to be re-checked manually, which is capped per person per day.

If a page returns a permanent error, it is dropped from the schedule entirely and we stop asking.

How to block it

The most reliable way is to refuse the user agent at your edge or web server. Blocking costs you nothing — a blocked check simply tells the person who saved your page that it could not be reached.

Apache:

SetEnvIfNoCase User-Agent "BluejayBot" bad_bot
Deny from env=bad_bot

Nginx:

if ($http_user_agent ~* "BluejayBot") {
    return 403;
}

You can also email hello@keystonedevstudio.com with your domain and we will exclude it at our end. That is a permanent block held on our side, and you do not need to configure anything.

On robots.txt

BluejayBot reads and honours robots.txt. Before checking an address it fetches /robots.txt for that host — once a day, or as often as your Cache-Control says — and follows RFC 9309: a group named BluejayBot takes precedence over *, the longest matching rule wins, and Allow beats Disallow at equal length.

A Disallow is honoured permanently. The saved link is never fetched again, and the person who saved it is told the site asked us not to — not that the page is gone, which it isn't. To stop checks for your whole site:

User-agent: BluejayBot
Disallow: /

The reasoning for the checker at all is that it is not discovering anything: it fetches one specific address a person chose to save, closer to that person opening the page themselves than to a spider indexing a site. We recognise that plenty of site owners take a different view, which is why robots.txt is honoured and an emailed request is honoured too.

Something looks wrong

If BluejayBot is requesting more than you would expect, hitting URLs no one should have saved, or causing you any trouble at all, email hello@keystonedevstudio.com with a few log lines. A real person reads that address and will fix it.