HTTP2 Test
What is it?
HTTP/2 (and the newer HTTP/3) is the modern transport protocol that powers fast page delivery on today's web, replacing the legacy HTTP/1.1 protocol that handled one request per connection at a time. HTTP/2 introduces multiplexing, header compression, and stream prioritization, which together reduce latency and let the browser load many resources from the same origin far more efficiently. This test checks whether your page and its resources are delivered over HTTP/2 or HTTP/3 rather than HTTP/1.1.
Why HTTP/2 still matters
HTTP/1.1 was designed for a much simpler web. It can only handle one request per connection at a time, which forces browsers to open multiple connections to load a page with many assets, multiplying connection setup overhead. HTTP/2 fixes this by multiplexing many requests over a single connection, dramatically reducing the latency cost of serving a page with many small assets.
The benefits compound on mobile networks where latency dominates throughput. A page that loads in two seconds over HTTP/2 might take three or four seconds over HTTP/1.1, even on the same connection, simply because of the connection-setup overhead per request. Switching to HTTP/2 (or HTTP/3, which is even better) is therefore one of the highest-leverage changes available, and on most platforms it is a one-line configuration change.
Common reasons HTTP/2 is not enabled
- HTTP/2 not turned on in the web server configuration; one or two lines of config typically fix this.
- Load balancer terminating HTTPS but forwarding over HTTP/1.1 to the origin.
- Self-signed or invalid certificate, since browsers require a valid certificate before negotiating HTTP/2.
- Origin not behind a CDN: putting the site behind a modern CDN is often the fastest route to HTTP/2 and HTTP/3 simultaneously.
This test verifies the protocol used to deliver your page. The fix guide below covers enabling HTTP/2 (and HTTP/3) on the major web servers, CDNs, and hosting platforms, plus the protocol-specific best practices that maximize the benefit.
Pass rate:
-
Top 100 websites: 99%This value indicates the percent of top 100 most visited websites in the US that pass this test (in the past 12 months).
-
All websites: 87%This value indicates the percent of all websites analyzed in SEO Site Checkup (500,000+) in the past 12 months.
| 2021 | 92% |
|---|---|
| 2022 | 95% |
| 2023 | 100% |
| 2024 | 99% |
100
75
50
25
0
How do I fix it?
This test fails when the page or its resources are delivered over the legacy HTTP/1.1 protocol rather than HTTP/2 or HTTP/3. HTTP/2 introduces multiplexing, header compression, and stream prioritization, which together reduce latency and let the browser load many resources from the same origin far more efficiently. Fixing this issue is almost always a server or CDN configuration change.
Where to make the change
- Server configuration: enable HTTP/2 in Nginx (
listen 443 ssl http2;), Apache (Protocols h2 h2c http/1.1withmod_http2), or Caddy (HTTP/2 is on by default). - CDN: Cloudflare, Fastly, CloudFront, Bunny.net, and most others enable HTTP/2 (and often HTTP/3) automatically. Confirm in the dashboard.
- Cloud platforms: Netlify, Vercel, and similar serve over HTTP/2 or HTTP/3 by default.
Common causes and how to resolve them
- HTTP/2 not enabled in the web server: turn it on. The server config change is usually one or two lines.
- HTTP/2 disabled at the load balancer: some legacy load balancers terminate HTTPS but only forward over HTTP/1.1. Update the load balancer or move TLS termination to the edge.
- Self-signed or invalid certificate: browsers require a valid certificate before negotiating HTTP/2. Fix the certificate first.
- Origin not behind a CDN: putting the site behind a modern CDN is often the fastest route to HTTP/2 and HTTP/3 simultaneously.
Best practices
- Enable HTTP/3 too: HTTP/3 over QUIC eliminates head-of-line blocking and reduces handshake latency, especially on mobile.
- Drop HTTP/2 push: Chrome removed support; rely on
<link rel="preload">hints instead. - Audit with DevTools: the Network panel's Protocol column shows the protocol used for each request.