AgenticWebScore
Scan

Discoverability · Recommended

HTTP caching of the homepage

Cache-Control says how long the homepage may be reused. A validator lets a crawler ask whether it changed, and a 304 answer skips the body.

  • Scored check
  • Web standards
  • Recommended
  • Adopted standard

Standard status Adopted. A ratified standard with real deployment. Standards: RFC 9111 and RFC 9110.

Kind
Scored check
Part of the score
Web standards: 70% of the score. A check in it can hold a level.
Module
Every site
Who reads it today
Googlebot sends If-None-Match and If-Modified-Since. Every HTTP cache reads Cache-Control.
Effect on Google Search
Direct. A documented Google Search feature reads it. This is not a ranking factor.
HTTP caching of the homepage — Property, Value
Property Value
Check idhttp-caching
DimensionDiscoverability
PartWeb standards
TierRecommended. Counts its weight once.
Weight1
MaturityAdopted. A ratified standard with real deployment.
Publishing skillhttp-caching
StandardsRFC 9111, RFC 9110

Sources

What is measured

The scanner reads the Cache-Control, ETag and Last-Modified headers of the homepage response ($home in the probe map). When the homepage sends an ETag or a Last-Modified date, the scanner requests the URL the homepage answered at once more, with If-None-Match set to the ETag and If-Modified-Since set to the date, each when it was sent, and reads at most 16 KB of the answer. A validator longer than 1,024 characters, or with a line break, is not sent. Pass = Cache-Control and a validator, and the conditional request answered 304 Not Modified. Partial = a validator, and the conditional request answered a status other than 304 that is not listed under Not measured; a validator and a 304 with no Cache-Control; or Cache-Control with no validator, and then no conditional request is made. Fail = none of the three headers. Cache-Control: private and no-store are policies like any other, and these rules apply to them: no-store with no validator is partial, because a crawler then requests the whole page each time. Not measured = a homepage that answered a status other than 2xx; a validator the scan did not send; or a conditional request that was not made, got no answer, or answered 401, 403, 407, 429 or a 5xx status, or 406, which refuses the scan's Accept header.

Reproduce it yourself

You do not have to take our word for any of this. Run the same measurement against your own domain:

              HOMEPAGE=https://example.com/
HEADERS=$(curl -sSL -o /dev/null -D - -A 'AgenticWebScore/0.3 (+https://agenticwebscore.com/bot)' -H 'Accept-Language: en' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7' "$HOMEPAGE" | tr -d '\r')
printf '%s\n' "$HEADERS" | grep -iE '^(cache-control|etag|last-modified):'
ETAG=$(printf '%s\n' "$HEADERS" | sed -n 's/^[Ee][Tt][Aa][Gg]: *//p' | tail -1)
DATE=$(printf '%s\n' "$HEADERS" | sed -n 's/^[Ll][Aa][Ss][Tt]-[Mm][Oo][Dd][Ii][Ff][Ii][Ee][Dd]: *//p' | tail -1)
curl -sSL -o /dev/null -w 'status=%{http_code}\n' -A 'AgenticWebScore/0.3 (+https://agenticwebscore.com/bot)' -H 'Accept-Language: en' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7' -H "If-None-Match: $ETAG" -H "If-Modified-Since: $DATE" "$HOMEPAGE"
            

The fix

This is an example written for example.com. Where the scan can build the fix from your own site, the report shows that version instead.

              Cache-Control: <choose: a policy, for example no-cache or max-age=300>
ETag: "<choose: a value that changes when the page changes>"

            

Standards referenced

  • RFC 9111
  • RFC 9110

Related checks

Related checks — Check, Kind, Maturity, Same skill
Check Kind Maturity Same skill
reachable — Readable homepageScored checkAdopted—
sitemap-xml — XML sitemapScored checkAdopted—
llms-txt — /llms.txt published and well-structuredScored checkDraft—
link-headers — Discovery via Link response headersScored checkAdopted—
dns-aid — DNS-AID discovery recordUnscored checkExperimental—
canonical — Canonical URLScored checkAdopted—
indexing-directives — Homepage indexable: no noindex directiveScored checkAdopted—
not-found-status — A real 404 for a missing pageScored checkAdopted—