I wrote the standard for making websites AI-operable. Learn More

OARS Practitioner Course
Level 0 · Step 2 of 5

Course / Level 0 · Reachable / Step 2

Level 0 · Reachable

Availability & performance

Real uptime and Core Web Vitals that hold up under non-browser clients, so agents don't give up mid-request.


14 minBeginnerSome checks + light config

In this lesson

Transport security got you a secure front door. This step makes sure that door is actually open, and quick to answer, when an agent knocks.

  • Understand what “available and fast enough for agents” actually means
  • Set up uptime monitoring so you hear about outages before anyone else does
  • Measure your time-to-first-byte and Core Web Vitals — and improve them
  • Make sure your real content is in the HTML, not hidden behind JavaScript
  • Verify the whole thing the way an agent would

Why agents are less patient than people

A person who hits a slow page waits a second, maybe refreshes. They give you the benefit of the doubt.

An agent doesn’t. It runs on a timeout and a budget. If your server is slow or down at the moment it calls, the agent doesn’t sigh and wait — it records a failure and moves on. Worse, a site that’s repeatedly slow or flaky gets quietly called less often next time.

So Level 0 reachability has two halves: are you up, and are you fast enough. Let’s handle both, plus one gotcha that’s unique to non-browser clients.

Note

“Fast enough for agents” isn’t about a flashy, animated site. It’s the opposite: a plain page that returns real content quickly and reliably beats a beautiful one that takes five seconds to assemble.

Step 1 — Stay up (and know the moment you don’t)

Availability is just the share of time your site is actually answering requests. The common bar is 99%+ — but the real goal is simpler: you should never be the last to know your site is down.

You can’t fix what you can’t see, so put an external monitor in place. It pings the site every minute from outside your network and alerts you the moment it stops responding.

  1. Pick a monitor — UptimeRobot (free tier is fine), Better Uptime, or Pingdom. If the site is on Cloudflare, it has health checks too.
  2. Point it at a real content URL, not just the homepage, and have it check for a 200 response and a word you know should be on the page.
  3. Set alerts to somewhere you’ll actually see them — email plus SMS or Slack.

That second point matters more than it looks. A server can return a cheerful “200 OK” while serving a blank error page. Checking for expected text catches the failures a simple ping misses.

Tip

Set the monitor up once and leave it running — treat it as permanent, not a one-time check. It costs nothing, it catches problems while they’re still small, and being first to know always beats finding out from a frustrated visitor.

Step 2 — Be fast to answer

The single clearest signal of “is the server keeping up” is time to first byte (TTFB) — how long from the request until the server sends back the very first byte of its response. It’s the part of speed an agent feels first, and slow TTFB eats straight into its timeout budget.

You can measure it with one line of curl:

terminalbash
# Time to first byte, plus total time, for one URL
curl -o /dev/null -s -w "TTFB: %{time_starttransfer}s  Total: %{time_total}s\n" https://yourdomain.com

As a rough guide: under 0.8s is good, under 1.8s is acceptable, and anything north of that needs attention. If it’s slow, the usual fixes, in order of impact: cache pages so the server isn’t rebuilding them on every request, put a CDN like Cloudflare in front, trim slow database or API calls, and — last — move off the cheapest tier of shared hosting.

Beyond raw speed, there’s a standard scorecard worth knowing: Core Web Vitals. They’re three numbers Google uses to describe how a page feels, and they double as a clean, shared definition of “this page is genuinely fast and stable”:

  • LCP — Largest Contentful Paint: how fast the main content shows up. Aim for under 2.5s.
  • CLS — Cumulative Layout Shift: how much the page jumps around while loading. Aim for under 0.1.
  • INP — Interaction to Next Paint: how quickly the page reacts to a tap or click. Aim for under 200ms.

Check yours in PageSpeed Insights (free, just paste a URL) or Google Search Console. The highest-leverage fixes are usually the boring ones: compress and right-size images, set explicit width and height on them so nothing jumps, lazy-load anything below the fold, and defer JavaScript that isn’t needed to draw the page.

Note

Core Web Vitals are scored from real visitors over a rolling 28-day window. So a fix won’t show up the same day — don’t panic if the number lags. The lab tools (PageSpeed, Lighthouse) give you an instant estimate to work against in the meantime.

Step 3 — Don’t hide your content behind JavaScript

Here’s the gotcha that’s specific to agents. Many of them — and plenty of crawlers — don’t run JavaScript at all, or run it with tight limits.

If your page is a shell that fills itself in with client-side JavaScript after it loads (a typical single-page app), then a browser sees a full page… and an agent that doesn’t run JS sees almost nothing. You can be up, fast, and still effectively invisible.

Check it the way an agent would — look at the raw HTML the server sends, before any JavaScript runs:

terminalbash
# Does your real content exist before JavaScript runs?
curl -s https://yourdomain.com | grep -i "a phrase from your page"

If the phrase comes back, you’re fine — the content is in the HTML. If it doesn’t, your content is being assembled in the browser, and you’ll want server-side rendering or pre-rendering so the important text ships in the initial response. Frameworks like Next.js, Nuxt, and Astro do this out of the box; classic WordPress and static sites already do.

Watch out

Don’t confuse “View Source” with “Inspect.” Inspect (DevTools) shows the page after JavaScript has run — which is not what an agent sees. View Source, or the curl above, shows the real starting HTML. Always check the right one.

That distinction trips up experienced developers constantly. When in doubt, trust curl.

Verify it worked

Three quick confirmations: your uptime monitor is live and checking for real content; your TTFB is comfortably under ~1.8s from the curl check; and a known phrase from your page shows up in the raw HTML, not just in the browser.

Then let the scanner sanity-check reachability and performance from the outside:

With “up” and “fast” both handled, here’s what to take with you.

Recap

  • Agents run on timeouts — slow or flaky means abandoned, then deprioritized.
  • Monitor uptime externally and check for real content, not just a 200.
  • Keep TTFB low and pass Core Web Vitals (LCP, CLS, INP).
  • Put real content in the server’s HTML so non-JS agents can see it.

Worth bookmarking as you go:

Resources

§Level 0 · Reachable — read the exact requirements

Up and quick. Next, we make sure the response itself looks like it came from a competently-run origin — baseline security headers.

Knowledge check

1. How does an agent react to a slow or down server when it calls?
2. Beyond checking for a 200 response, what else should your uptime monitor verify?
3. What does time to first byte (TTFB) measure?
4. Many agents cannot see content that is filled in by client-side JavaScript. Why?
5. Why is “View Source” the right tool, rather than “Inspect,” to check what an agent sees?