Blog

Blog · RSS

When does WebVitalist reuse a free scan instead of fetching again?

· WebVitalist

WebVitalist reuses a free scan instead of fetching the page again only when a completed scan of the same normalized URL is strictly younger than 6 hours. This note is dated October 21, 2026 and states that rule as the scan form implements it.

The rule

On submit, WebVitalist normalizes the address and looks for a scan whose stored URL equals that string, whose status is completed, and whose createdAt is strictly later than 6 hours ago. If several rows match, the newest one is returned. The page is not fetched again. The same stored score, issues, and platform guess are shown. The result line adds the words “(recent result reused)”.

A scan created exactly 6 hours ago does not match. The comparison is strict, so that scan is fetched again. A failed attempt is stored and is not eligible, so the next submit of that URL fetches again. An address that fails normalization is rejected before any lookup and is not stored.

The reuse is by URL, not by visitor. A later submit of the same normalized URL inside the window receives the same completed scan. Opening the saved permalink later shows that scan, and the permalink does not add “(recent result reused)”. That label is only on the submit that hit the window.

What counts as the same URL

The key is the URL after normalization, not the address after redirects. Normalization trims the input, adds https:// when no http or https scheme is present, and keeps an explicit http:// as http. It allows only http and https. It removes any username, password, and hash. The hostname must be one the scan is allowed to fetch. localhost, a name ending in .localhost, .local, .internal, or .lan, and a loopback, link-local, or private address that check rejects, are not scanned. The stored key is the URL serializer’s string.

These inputs share a key:

  • example.com, https://example.com, and https://example.com/ all become https://example.com/.
  • https://example.com/page#section and https://user:pass@example.com/page both become https://example.com/page.
  • HTTP://Example.COM/Path becomes http://example.com/Path. The hostname is lowercased. The path keeps its case. The scheme stays http because one was provided.

These inputs do not share a key:

  • https://example.com/pricing and https://example.com/pricing/ differ by the trailing slash.
  • http://example.com/ and https://example.com/ differ by the scheme, even when the site redirects one to the other.
  • https://example.com/ and https://www.example.com/ differ by the hostname, even when one redirects to the other.
  • The final URL after redirects is stored on the scan, but it is not the cache key. A second submit is reused only when the normalized submitted URL matches.

What reuse does not do

Reuse returns the completed row. It does not run the 8 second fetch again, so it does not re-run the technical checks and it does not request Lighthouse. A URL with no completed scan inside the window is fetched as a new scan. The window is measured from the scan’s createdAt, not from the last time someone opened the result.