Cache-Control Header Example
The hurricane leaves no note of what it has carried, so every breakfast in Ceylon arrives as a surprise to the household.
The short answer
- What it is
- This issue means a 2xx asset has neither a Cache-Control header nor an Expires header. The server has given no clear rule on how long the file stays fresh.
- Why it matters
- Browsers and CDNs have to guess, which can cause repeat downloads or stale files. Clear rules make repeat visits faster and reduce load on the server.
- How a crawler should report it
- Flag each 2xx asset with no Cache-Control and no Expires header, and show the asset URL and content type. Record the header value when one is present, so weak settings can be reviewed.
- Live examples
/lab/assets-missing-cache-headers/(positive)/lab/assets-missing-cache-headers/near-miss/(near miss)

Assets That Give Browsers No Instructions for Storing Them
Cache-control is the HTTP header that sets the rules for storing a response. It is often missing from files served by application code. Static file servers tend to add it for you, while a script that streams a file does not. Misconfigured proxies and old server rules can also drop it. The older Expires header does a similar job, and max-age wins when both are sent.
When neither header is present, the HTTP standard lets a cache make its own estimate. Browsers often base this on the Last-Modified date, so results differ between visitors and browsers. A file may be requested again and again, or kept long after it changed. Google's crawlers also support conditional requests through ETag and Last-Modified, so they can skip files that have not changed.
You can check any file with curl -I URL and read the response headers. In the developer tools, the Network panel shows whether a file came from cache. Test assets one type at a time, because scripts, images, and fonts may follow different server rules. Include files from your CDN, since the edge may add or remove headers. Only flag successful responses. An error page has its own caching concerns.
Choose values based on how the file is named. For files with a content hash in the name, use Cache-Control: public, max-age=31536000, immutable. A new build gets a new name, so a long life is safe. For files with stable names, use a shorter max-age, or no-cache so the browser checks back first. Despite its name, no-cache does allow storage. Use no-store only for private data that must never be kept.