Introduction
When a browser requests a page over HTTP/2, the server can push resources the client will need before the client even asks for them. This proactive delivery reduces round‑trip latency, speeds up the Critical Rendering Path, and can translate into better Core Web Vitals scores—directly impacting search rankings.
1. How HTTP/2 Server Push Works
| Step | What Happens |
|---|---|
1️⃣ Client requests GET /index.html |
The request is multiplexed over a single TCP connection. |
| 2️⃣ Server responds with HTML and pushes resources | Using Link: </style.css>; rel=preload; as=style
headers, the server streams CSS, JS, or fonts immediately. |
| 3️⃣ Browser caches pushed resources | If the client later requests the same asset, it uses the already‑received copy, avoiding another network round‑trip. |
2. When to Use Server Push
- Critical CSS/JS that blocks rendering (e.g., main stylesheet, above‑the‑fold scripts).
- Web fonts needed for first paint.
- Above‑the‑fold images when they are small enough to fit the initial window.
Tip: Don’t push everything. Over‑pushing can waste bandwidth and penalize mobile users.
3. Implementing Server Push on Popular Platforms
3.1 Nginx
server {
listen 443 ssl http2;
# Enable push for CSS and JS
http2_push_preload on;
location = /index.html {
add_header Link "</css/main.css>; rel=preload; as=style";
add_header Link "</js/main.js>; rel=preload; as=script";
}
}
- Reload config:
sudo nginx -s reload. - Verify with Chrome DevTools → Network → Initiator – you’ll see “push” entries.
3.2 Apache (mod_http2)
<IfModule http2_module>
H2Push on
H2PushResource "/css/main.css" as=style
H2PushResource "/js/main.js" as=script
</IfModule>- Enable the
http2module and restart Apache.
3.3 Node.js (Express + spdy)
const express = require('express');
const spdy = require('spdy');
const app = express();
app.get('/', (req, res) => {
res.set('Link', '</css/main.css>; rel=preload; as=style, </js/main.js>; rel=preload; as=script');
res.sendFile('index.html', { root: __dirname });
});
spdy.createServer({ key, cert }, app).listen(443);4. Performance Validation
| Tool | Metric | Expected Improvement |
|---|---|---|
| Lighthouse | First Contentful Paint (FCP) | 100‑200 ms faster |
| WebPageTest | Speed Index | Lower by 0.5‑1.0 s |
| Search Console | Core Web Vitals – Good % | Increase by 5‑10 % |
Run a before‑and‑after test to confirm the push actually reduces
latency. Use the Network tab to see push
status.
5. SEO Checklist for Server Push
6. Common Pitfalls & Mitigations
| Issue | Symptom | Fix |
|---|---|---|
| Over‑pushing large images | Mobile data waste, slower load. | Limit pushes to CSS/JS/fonts; use lazy‑load for images. |
Missing as attribute |
Browser treats resource as generic, may block. | Always specify as=style|script|font|image. |
No crossorigin on fonts |
Font‑display: swap fails, flash of unstyled text. | Add crossorigin on both <link> and
push header. |
Conclusion & Call‑to‑Action
HTTP/2 Server Push is a powerful, low‑maintenance technique to shave precious milliseconds off your page load, directly benefiting SEO and user experience. Ready to enable Server Push on your site? Reach out through the MODRACX portfolio and let’s accelerate your digital presence together.
Kenneth D’Silva – Performance Engineer, MODRACX