Stack playbook · Snapshot 23 October 2026
Drupal: readiness playbook
What 635 measured sites on this platform or framework get right, where they fall short, and the Drupal-specific steps that close each gap.
- Sites measured
- 635
- Median readiness index
- 66/100
- Profiles on this stack
- 307
detected from homepage HTML and headers
all sites: 64
top-50K sites
Readiness by lane
Enable
80/100
All sites 77
Harden
63/100
All sites 56
Accelerate
61/100
All sites 64
Recover
17/100
All sites 10
The Drupal playbook
Gaps ordered by impact, with the platform-specific step where one exists.
HSTS kept for at least a year
42% observed · all sites 34%
Send Strict-Transport-Security on HTTPS responses. Start with a short max-age (for example 300 seconds), confirm every subdomain works over HTTPS, then raise it in steps to 31536000. Add includeSubDomains only when all subdomains are HTTPS. HSTS preload is optional and hard to undo; hstspreload.org itself does not recommend it by default.
security.txt published
8.4% observed · all sites 7.1%
Publish /.well-known/security.txt with at least Contact and Expires fields, as RFC 9116 requires, and review it before it expires.
Modern image formats in use
42% observed · all sites 40%
Serve WebP or AVIF with a JPEG or PNG fallback, either through an image CDN or by generating both formats at build time.
Guide: AVIF, WebP, JPEG, and PNG: Choose the Right Image Format
CAA records limit who can issue certificates
14% observed · all sites 13%
Publish CAA records naming every CA you actually use, including the CAs your CDN uses for managed certificates. Add an iodef contact if you want reports.
No render-blocking scripts in <head>
33% observed · all sites 48%
Add defer to scripts that need the DOM, async to independent ones such as analytics, or move them to the end of the body.
Guide: Control Third-Party Scripts Before They Control Your Page
HTTP/3 advertised
20% observed · all sites 37%
Turn on HTTP/3 at your CDN. Browsers fall back to HTTP/2 automatically, so the risk is low.
Static files cached for 30 days or more
50% observed · all sites 51%
Give versioned (fingerprinted) CSS, JavaScript, fonts and images Cache-Control: public, max-age=31536000, immutable, and change the file name whenever the content changes.
DMARC policy enforces quarantine or reject
53% observed · all sites 39%
Publish DMARC with p=none and a reporting address first, fix any legitimate senders that fail SPF or DKIM alignment, then move to quarantine and finally reject.
Where Drupal sites lead
- X-Content-Type-Options: nosniff88% observedall sites 48%
- Framing restricted87% observedall sites 51%
- Canonical URL declared91% observedall sites 68%
- robots.txt published94% observedall sites 76%