{"name":"Speed test comparison rules","publisher":"SwiftSpeedTest","canonical":"https://swiftspeedtest.com/compare-internet-speed-results","schemaVersion":1,"methodVersion":"1.0","methodology":"https://swiftspeedtest.com/compare-internet-speed-results#methodology","published":"2026-07-24","updated":"2026-07-24","version":"2026.07.24","versionUrl":"https://swiftspeedtest.com/data/speed-test-comparison-rules/2026.07.24.json","license":"CC BY 4.0","licenseUrl":"https://creativecommons.org/licenses/by/4.0/","attribution":"SwiftSpeedTest speed test comparison rules, version 2026.07.24, https://swiftspeedtest.com/compare-internet-speed-results","changeRule":"A metric changes only when its absolute guard passes and, when specified, its relative guard also passes. These are transparent editorial noise guards, not a statistical-significance test.","verdictRules":{"improved":"At least one metric meaningfully improves and none meaningfully regress.","regressed":"At least one metric meaningfully regresses and none meaningfully improve.","mixed":"At least one metric meaningfully improves and at least one meaningfully regresses.","similar":"No measured metric passes its published meaningful-change guards.","retestRequired":"The overall verdict is withheld when a result is shared or duplicated, loaded responsiveness is unavailable, or transfer confidence is missing or degraded."},"comparabilityChecks":["Different speed-test endpoint","Different connection type","Unknown connection type","Different provider label","Different test location label","Different use-case label","Different speed-test method version","More than two hours between tests"],"limitations":["The comparison reports association, not causation. A changed result does not prove that the intentionally changed condition caused it.","Browser HTTP application-probe misses are not ICMP, UDP, RTP, or network-layer packet loss.","A two-run comparison does not estimate natural variance or statistical confidence. Repeat each condition and inspect the full spread for higher-stakes decisions."],"rules":[{"id":"download","label":"Download speed","unit":"Mbps","betterDirection":"higher","minimumAbsoluteChange":2,"minimumRelativeChangePercent":10,"measurement":"Measured browser download throughput"},{"id":"upload","label":"Upload speed","unit":"Mbps","betterDirection":"higher","minimumAbsoluteChange":1,"minimumRelativeChangePercent":10,"measurement":"Measured browser upload throughput"},{"id":"idle-latency","label":"Idle latency","unit":"ms","betterDirection":"lower","minimumAbsoluteChange":5,"minimumRelativeChangePercent":10,"measurement":"Retained median browser HTTP latency before load"},{"id":"idle-jitter","label":"Idle jitter","unit":"ms","betterDirection":"lower","minimumAbsoluteChange":2,"minimumRelativeChangePercent":15,"measurement":"Variation in retained idle browser HTTP latency"},{"id":"loaded-latency","label":"Worse loaded latency","unit":"ms","betterDirection":"lower","minimumAbsoluteChange":5,"minimumRelativeChangePercent":10,"measurement":"Worse retained median from the download-loaded and upload-loaded stages"},{"id":"loaded-jitter","label":"Worse loaded jitter","unit":"ms","betterDirection":"lower","minimumAbsoluteChange":2,"minimumRelativeChangePercent":15,"measurement":"Worse retained jitter from the download-loaded and upload-loaded stages"},{"id":"application-probe-misses","label":"Browser HTTP probe misses","unit":"percentage points","betterDirection":"lower","minimumAbsoluteChange":1,"minimumRelativeChangePercent":null,"measurement":"Difference in failed or timed-out browser HTTP application probes"}],"changelog":[{"version":"2026.07.24","date":"2026-07-24","changes":"Initial public release with seven metric guards, exact aggregate-verdict rules, comparability checks, and explicit causal and statistical limitations."}]}