Why do two reports of the same site differ?

Sometimes two reports run minutes apart show different results. This guide explains the most common causes: caching, dynamic content, A/B tests, and crawl-time variability.

You run a report, fix something, run a fresh report, and the new one shows changes you didn't expect. Or you run two reports back-to-back without changing anything, and they still differ. That's surprisingly common, and almost always explainable by how the modern web works rather than by a bug in the analysis. This article walks through the most likely reasons.

Short version: A website is not a static document. Caches expire, dynamic content rotates, A/B tests pick different variants, third-party scripts come and go. Two reports are two snapshots of a moving target.

1. Caching layers

Caching is by far the most common reason for differences between reports. A typical WordPress site has multiple cache layers stacked on top of each other:

  • Page cache (e.g. WP Rocket, LiteSpeed, W3 Total Cache): Stores fully rendered HTML and serves it for a configurable lifetime. When the lifetime expires, the next visitor triggers a regeneration that may include different ad units, different recommendations or a freshly generated combined-asset filename.
  • Object cache (Redis, Memcached): Caches database query results. Less visible from outside, but it can change which plugins or widgets fire on a given request.
  • CDN edge cache (Cloudflare, BunnyCDN, KeyCDN): The CDN may serve a slightly older or newer version depending on which edge node the request hits.
  • Hoster cache (managed WordPress hosts): Kinsta, WP Engine, SiteGround and others run their own server-side caches with their own invalidation logic.

Two reports run a few minutes apart can easily land on different cache states. That alone explains most differences.

2. Dynamic content

Many sites render parts of the page dynamically on every request. Common examples:

  • „Recent posts“ or „Latest products“ widgets that pull the newest items.
  • „You may also like“ recommendations.
  • Random testimonial rotators.
  • Ad slots that rotate creatives.
  • Personalized greetings based on geo-IP or device.
  • Live counters, stock levels, prices.

Even without any caching change, two requests can produce different HTML, different word counts, different image counts, sometimes different external resources.

3. A/B tests and feature flags

If your site runs an A/B testing tool (VWO, Optimizely, Convert) or feature flags (LaunchDarkly, GrowthBook), each visit can be assigned to a different variant. Variants can mean:

  • Different headlines or images.
  • A different page layout.
  • Different scripts or third-party services loaded.
  • Different cookies set.

From the report's point of view, the same URL legitimately produced two different pages.

4. Third-party scripts and tag managers

Tag managers (Google Tag Manager, Tealium, Matomo Tag Manager) decide on the fly which tags to fire. Conditions can include time of day, visitor location, consent state, sampling rules. A report run today and one run tomorrow may load completely different tracking pixels and analytics scripts even though the website itself didn't change.

5. Cookie consent and the consent banner

Modern consent managers often serve a stripped-down version of the page until consent is given, then load the full set of tracking and personalization scripts. InspectWP visits without consent. If your consent manager changes its default behaviour (default-deny vs. default-accept-in-some-regions), the report changes accordingly.

6. Time-based content

Some sites change with the clock:

  • Promotion banners that go live at a specific time.
  • Seasonal hero images.
  • Stock and price updates.
  • Scheduled blog posts.

A report at 09:00 and one at 09:05 can straddle a scheduled change.

7. Geographic differences

InspectWP always crawls from the same fixed location. If you compare an InspectWP report to what you see in your own browser from a different country, you may legitimately see different content (language, pricing, available products), different fonts (CDN endpoints), different external resources (region-specific Maps providers).

8. Plugin and theme updates

WordPress and many plugins update automatically. Between two reports, a plugin can have updated, changed its asset filenames, removed a feature or added a new external resource. The site looks the same to a human but produces a different fingerprint.

9. Server-side variability

HTTP-version negotiation, compression algorithm choice (gzip vs. brotli), specific HTTP headers and TLS handshake details can all vary depending on which server in a load-balanced cluster handles the request. These differences show up in the Headers and Performance sections.

10. How to compare two reports meaningfully

  1. Run both reports close in time if you want to compare „as-is“ states.
  2. Clear caches before each report if you want to compare the post-cache-rebuild state.
  3. Disable A/B tests temporarily if you specifically want to measure the baseline.
  4. Crawl the same exact URL, including trailing slash and query parameters. https://example.com and https://example.com/ are technically different URLs.
  5. Look at structure, not noise. Differences in „word count“ of a few percent or a single rotating ad unit are usually not meaningful. Differences in plugin lists, security headers, SEO tags or critical-status fields usually are.
Tip: If you run automatic reports, use the report-history view to spot patterns over time instead of staring at single-run differences. A field that flips back and forth on every crawl is dynamic; a field that flipped once and stays flipped is a real change.

11. Frequently asked questions

Almost always no. The plugins are still installed and active, they just stopped emitting a recognizable fingerprint between the two crawls. The most common cause is a fresh asset-combination bundle from a caching plugin. See Why isn't my plugin or theme detected? for details.

12. Related articles