<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>mod_pagespeed Blog</title><description>Technical insights on web performance, automatic optimization, and the engineering behind mod_pagespeed.</description><link>https://modpagespeed.com/</link><language>en-us</language><lastBuildDate>Sat, 10 Oct 2026 00:00:00 GMT</lastBuildDate><atom:link href="https://modpagespeed.com/blog/rss.xml" rel="self" type="application/rss+xml"/><item><title>The state of the PageSpeed installed base, 2026</title><link>https://modpagespeed.com/blog/pagespeed-installed-base-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/pagespeed-installed-base-2026/</guid><description>HTTP Archive data on the PageSpeed installed base in 2026: adoption since 2020, versions, servers, networks, and what no longer receives fixes.</description><pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Cyclone as an LLM KV-cache tier: eight rounds to match LMDB</title><link>https://modpagespeed.com/blog/cyclone-kv-cache-tier-vs-lmdb/</link><guid isPermaLink="true">https://modpagespeed.com/blog/cyclone-kv-cache-tier-vs-lmdb/</guid><description>How Cyclone became an LLM KV-cache offload tier: eight rounds against LMDB and file-per-block, from 0.06 GB/s cold reads to ahead of LMDB.</description><pubDate>Thu, 08 Oct 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>mod_pagespeed 2.1: one product again</title><link>https://modpagespeed.com/blog/mod-pagespeed-2-1-one-product-again/</link><guid isPermaLink="true">https://modpagespeed.com/blog/mod-pagespeed-2-1-one-product-again/</guid><description>The mod_pagespeed lineage and the ModPageSpeed 2.0 engine converge into one open-source product: the module you know plus an optimizer worker. Apache-2.0.</description><pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Cyclone vs the file cache: a memory-mapped cache benchmark</title><link>https://modpagespeed.com/blog/cyclone-cache-vs-file-cache-benchmark/</link><guid isPermaLink="true">https://modpagespeed.com/blog/cyclone-cache-vs-file-cache-benchmark/</guid><description>Cache benchmark: Cyclone (memory-mapped, in-process RAM tier) vs the classic file-per-entry cache, across concurrency, traffic, latency tails and eviction.</description><pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>The agentic web hits your origin, not a proxy</title><link>https://modpagespeed.com/blog/agentic-web-at-the-origin/</link><guid isPermaLink="true">https://modpagespeed.com/blog/agentic-web-at-the-origin/</guid><description>The agentic web creates four origin problems: identity, economics, what to serve, provenance. Where to solve them, and why on your own servers.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Pay-per-crawl at the origin: an experimental RSL-CAP gate</title><link>https://modpagespeed.com/blog/pay-per-crawl-at-the-origin/</link><guid isPermaLink="true">https://modpagespeed.com/blog/pay-per-crawl-at-the-origin/</guid><description>mod_pagespeed 2.1 ships an experimental, off-by-default RSL-CAP gate for nginx: check License capability tokens and refuse unauthorized AI crawlers.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Keep C2PA content credentials through image optimization</title><link>https://modpagespeed.com/blog/preserve-content-credentials-c2pa/</link><guid isPermaLink="true">https://modpagespeed.com/blog/preserve-content-credentials-c2pa/</guid><description>mod_pagespeed detects C2PA Content Credentials manifests and keeps image provenance instead of stripping it when optimizing. On by default in both parts.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Serve markdown and llms.txt to AI agents from your origin</title><link>https://modpagespeed.com/blog/serve-markdown-to-ai-agents/</link><guid isPermaLink="true">https://modpagespeed.com/blog/serve-markdown-to-ai-agents/</guid><description>The mod_pagespeed 2.1 worker serves a markdown variant on Accept: text/markdown and builds /llms.txt from your sitemap. Experimental, off by default.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Web Bot Auth: verify AI crawlers at your origin</title><link>https://modpagespeed.com/blog/verify-ai-crawlers-web-bot-auth/</link><guid isPermaLink="true">https://modpagespeed.com/blog/verify-ai-crawlers-web-bot-auth/</guid><description>mod_pagespeed 2.1 ships an nginx Web Bot Auth verifier: it checks RFC 9421 signatures and labels requests in $x_verified_bot. Observe-only, off by default.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>SSRF protection for headless rendering: pinned fetches</title><link>https://modpagespeed.com/blog/air-gapped-headless-fetch-ssrf-pinning/</link><guid isPermaLink="true">https://modpagespeed.com/blog/air-gapped-headless-fetch-ssrf-pinning/</guid><description>SSRF protection for headless rendering: the optimizer worker forces Chrome offline and routes subresources via an IP-pinned fetch, checked per redirect.</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Stop cache fragmentation: strip tracking params from URLs</title><link>https://modpagespeed.com/blog/cache-key-url-normalization-tracking-params/</link><guid isPermaLink="true">https://modpagespeed.com/blog/cache-key-url-normalization-tracking-params/</guid><description>Strip tracking parameters to stop cache fragmentation: mod_pagespeed 2.1 normalizes URLs before keying, drops UTM params, sorts the query, aliases hosts.</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Default cache TTL when the origin sends no Cache-Control</title><link>https://modpagespeed.com/blog/default-cache-ttl-heuristic-freshness/</link><guid isPermaLink="true">https://modpagespeed.com/blog/default-cache-ttl-heuristic-freshness/</guid><description>Default cache TTL with no Cache-Control: per-content-type heuristic TTLs, RFC 9111 Age adjustment and the shared-vs-private split in mod_pagespeed 2.1.</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Headless LCP and CLS measurement to drive optimization</title><link>https://modpagespeed.com/blog/headless-lcp-cls-measurement/</link><guid isPermaLink="true">https://modpagespeed.com/blog/headless-lcp-cls-measurement/</guid><description>Headless LCP and CLS measurement in mod_pagespeed 2.1: the optimizer worker&apos;s PerformanceObservers capture the LCP element and shifts to drive preloads.</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Proactive variant generation: warming the cache for hot URLs</title><link>https://modpagespeed.com/blog/proactive-variant-generation-cache-warmup/</link><guid isPermaLink="true">https://modpagespeed.com/blog/proactive-variant-generation-cache-warmup/</guid><description>How the mod_pagespeed 2.1 worker warms hot URLs: nginx flags a hot URL and the worker pre-builds the whole image variant matrix instead of one per request.</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Remove unused JavaScript with Chrome coverage data</title><link>https://modpagespeed.com/blog/remove-unused-javascript-chrome-coverage/</link><guid isPermaLink="true">https://modpagespeed.com/blog/remove-unused-javascript-chrome-coverage/</guid><description>A headless Chrome V8 coverage pass measures which JavaScript runs before first paint, so the mod_pagespeed 2.1 worker can defer the scripts that never run.</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Safe JavaScript minification: semicolon insertion, fail-safe</title><link>https://modpagespeed.com/blog/safe-javascript-minification-semicolon-insertion/</link><guid isPermaLink="true">https://modpagespeed.com/blog/safe-javascript-minification-semicolon-insertion/</guid><description>Safe JavaScript minification means parsing, not stripping whitespace: semicolon insertion, regex-vs-divide and a fail-safe that ships the original as is.</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Serving markdown to AI crawlers, and synthesizing /llms.txt</title><link>https://modpagespeed.com/blog/serve-markdown-to-ai-crawlers-llms-txt/</link><guid isPermaLink="true">https://modpagespeed.com/blog/serve-markdown-to-ai-crawlers-llms-txt/</guid><description>How to serve markdown to AI crawlers on the same URL via Accept: text/markdown, synthesize /llms.txt from the sitemap, and honor AI opt-out directives.</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Server-injected resource hints: Speculation Rules and more</title><link>https://modpagespeed.com/blog/server-injected-resource-hints-speculation-rules/</link><guid isPermaLink="true">https://modpagespeed.com/blog/server-injected-resource-hints-speculation-rules/</guid><description>How a proxy generates server-injected resource hints: speculation-rules prefetch derived from real traffic, priority-bucketed preconnect, font preload.</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>SSIMULACRA2: how to verify image quality after compression</title><link>https://modpagespeed.com/blog/ssimulacra2-image-quality-verification/</link><guid isPermaLink="true">https://modpagespeed.com/blog/ssimulacra2-image-quality-verification/</guid><description>How mod_pagespeed 2.1 scores encoded images against a SSIMULACRA2 target in the optimizer worker and re-encodes until the result clears tolerance.</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Cache key derivation: host-scoped keys and variant fallback</title><link>https://modpagespeed.com/blog/cache-key-derivation-and-alternate-fallback/</link><guid isPermaLink="true">https://modpagespeed.com/blog/cache-key-derivation-and-alternate-fallback/</guid><description>How cache key derivation in mod_pagespeed 2.1 hashes host plus URL into one key and scores stored variants in one selector pass instead of probing keys.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Cache mode safety: must-revalidate vs aggressive TTLs</title><link>https://modpagespeed.com/blog/cache-mode-safety-must-revalidate-vs-aggressive/</link><guid isPermaLink="true">https://modpagespeed.com/blog/cache-mode-safety-must-revalidate-vs-aggressive/</guid><description>Why must-revalidate, not max-age, is the real safety net in mod_pagespeed 2.1, and when aggressive TTLs with stale-if-error are the right call.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>304 revalidation vs PURGE: which invalidation is cheaper</title><link>https://modpagespeed.com/blog/conditional-revalidation-304-vs-active-purge/</link><guid isPermaLink="true">https://modpagespeed.com/blog/conditional-revalidation-304-vs-active-purge/</guid><description>When a 304 ETag round-trip beats PURGE and keeps optimized AVIF and WebP variants on an HTML-only deploy with no rebuild.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>How critical CSS extraction works: beacons to headless</title><link>https://modpagespeed.com/blog/critical-css-beacon-to-headless-history/</link><guid isPermaLink="true">https://modpagespeed.com/blog/critical-css-beacon-to-headless-history/</guid><description>How critical CSS extraction works without a build step: the original beacon model, why CDNs broke it, and how 2.0 moved to heuristics + headless Chrome.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Chrome&apos;s Coverage API: inlining cached CSS for critical CSS</title><link>https://modpagespeed.com/blog/css-cache-inlining-for-coverage-api/</link><guid isPermaLink="true">https://modpagespeed.com/blog/css-cache-inlining-for-coverage-api/</guid><description>How mod_pagespeed 2.1 feeds the Chrome Coverage API critical CSS: the worker inlines cached stylesheets into a network-blocked sandbox to see real usage.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Fire-and-forget IPC: keep optimization off the request path</title><link>https://modpagespeed.com/blog/fire-and-forget-worker-ipc/</link><guid isPermaLink="true">https://modpagespeed.com/blog/fire-and-forget-worker-ipc/</guid><description>mod_pagespeed 2.1 keeps optimization off the nginx request path: a small notification to the worker, no reply, so a cache miss stays cheap and none waits.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Flattening CSS @imports: harder than concat</title><link>https://modpagespeed.com/blog/flatten-css-imports-edge-cases/</link><guid isPermaLink="true">https://modpagespeed.com/blog/flatten-css-imports-edge-cases/</guid><description>Why flattening CSS @import rules is harder than concatenation: media intersection, @charset aborts, url() rebasing, and the CssFlattenMaxBytes cap.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Classify, denoise, then encode: content-aware image encoding</title><link>https://modpagespeed.com/blog/image-content-classification-and-denoise/</link><guid isPermaLink="true">https://modpagespeed.com/blog/image-content-classification-and-denoise/</guid><description>Content-aware image optimization classifies each image and denoises noisy sources before encoding, so photos, screenshots and logos get the right codec.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>The memory-mapped cache: zero-copy serving from nginx</title><link>https://modpagespeed.com/blog/memory-mapped-cache-zero-copy-serving/</link><guid isPermaLink="true">https://modpagespeed.com/blog/memory-mapped-cache-zero-copy-serving/</guid><description>How mod_pagespeed 2.1 shares one memory-mapped cache between nginx and the worker: large hits zero-copy via sendfile, small ones with a single copy.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>mod_pagespeed and Content-Security-Policy (CSP)</title><link>https://modpagespeed.com/blog/mod-pagespeed-content-security-policy/</link><guid isPermaLink="true">https://modpagespeed.com/blog/mod-pagespeed-content-security-policy/</guid><description>Does mod_pagespeed break a strict Content-Security-Policy? Where rewriting collides with a CSP, feature by feature, and how HonorCsp keeps pages compliant.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Sentinel cache keys: alternate IDs for 103 Early Hints</title><link>https://modpagespeed.com/blog/sentinel-cache-keys-and-103-early-hints/</link><guid isPermaLink="true">https://modpagespeed.com/blog/sentinel-cache-keys-and-103-early-hints/</guid><description>How the mod_pagespeed 2.1 worker precomputes 103 Early Hints preloads that nginx serves from cache, stored under reserved sentinel keys beside each URL.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Cache purge in an optimizing proxy: what one URL touches</title><link>https://modpagespeed.com/blog/single-url-cache-purge-optimizing-proxy/</link><guid isPermaLink="true">https://modpagespeed.com/blog/single-url-cache-purge-optimizing-proxy/</guid><description>Purging one URL in mod_pagespeed 2.1 touches more than one cache entry: the fan-out problem, the 1.x lookup-time design, and why the worker deletes now.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Auto-vectorizing raster images to SVG: one variant for all</title><link>https://modpagespeed.com/blog/svg-auto-vectorization/</link><guid isPermaLink="true">https://modpagespeed.com/blog/svg-auto-vectorization/</guid><description>Raster to SVG auto-vectorization in mod_pagespeed 2.1: the optimizer worker traces logos and icons with VTracer, collapsing the variant matrix into one.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Template hashing: compute critical CSS once, reuse it</title><link>https://modpagespeed.com/blog/template-hashing-critical-css-reuse/</link><guid isPermaLink="true">https://modpagespeed.com/blog/template-hashing-critical-css-reuse/</guid><description>How the mod_pagespeed 2.1 worker hashes a page template so critical CSS is computed once and reused across every URL sharing it, with queue dedup.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Visual-regression gating: reject CSS that changes the pixels</title><link>https://modpagespeed.com/blog/visual-regression-gating-optimizations/</link><guid isPermaLink="true">https://modpagespeed.com/blog/visual-regression-gating-optimizations/</guid><description>The mod_pagespeed 2.1 worker pixel-diffs the rendered above-fold before caching a headless critical-CSS variant; if it looks different, it is discarded.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>A WordPress server-side page cache plugin: control plane</title><link>https://modpagespeed.com/blog/wordpress-server-side-page-cache-plugin/</link><guid isPermaLink="true">https://modpagespeed.com/blog/wordpress-server-side-page-cache-plugin/</guid><description>How a WordPress server-side page cache plugin sets Cache-Control on anonymous pages and purges the mod_pagespeed cache on publish, not caching in PHP.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Search Console&apos;s AI performance report is not about speed</title><link>https://modpagespeed.com/blog/search-console-ai-performance-report-vs-page-speed/</link><guid isPermaLink="true">https://modpagespeed.com/blog/search-console-ai-performance-report-vs-page-speed/</guid><description>The Search Console AI performance report measures your visibility in AI Overviews and AI Mode, not how fast your pages load. The difference, explained.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>AVIF vs WebP in 2026: which to serve, and how to serve both</title><link>https://modpagespeed.com/blog/avif-vs-webp-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/avif-vs-webp-2026/</guid><description>AVIF beats WebP on size but is slower to encode. Serve AVIF, WebP or the original per request off the Accept header instead of one format for everyone.</description><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Learned image quality: a model predicts encoding parameters</title><link>https://modpagespeed.com/blog/learned-quality-prediction/</link><guid isPermaLink="true">https://modpagespeed.com/blog/learned-quality-prediction/</guid><description>One perception-based quality knob: a trained model predicts JPEG, WebP and AVIF encoding parameters per image in microseconds. No per-codec tuning.</description><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>nginx image optimization module: automatic WebP, opt-in AVIF</title><link>https://modpagespeed.com/blog/nginx-image-optimization-module/</link><guid isPermaLink="true">https://modpagespeed.com/blog/nginx-image-optimization-module/</guid><description>A native nginx module that transcodes images to WebP and AVIF on serve, negotiates on Accept and caches the variant. Signed apt/yum packages, no compiling.</description><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>ngx_pagespeed won&apos;t build on modern nginx: cause and fix</title><link>https://modpagespeed.com/blog/ngx-pagespeed-wont-build-modern-nginx/</link><guid isPermaLink="true">https://modpagespeed.com/blog/ngx-pagespeed-wont-build-modern-nginx/</guid><description>Why upstream ngx_pagespeed won&apos;t compile on nginx 1.25+ (sys_siglist, glibc, OpenSSL 3, toolchain drift) — and the prebuilt module to install instead.</description><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>How to reduce TTFB: server-layer wins before a CDN</title><link>https://modpagespeed.com/blog/reduce-ttfb-server-layer-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/reduce-ttfb-server-layer-2026/</guid><description>Reduce TTFB on nginx: split origin compute, network, and cache, then fix keep-alive, HTTP/2 or HTTP/3, TLS resumption, and variant-aware caching.</description><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Self-hosted image optimization vs image SaaS egress</title><link>https://modpagespeed.com/blog/self-hosted-image-optimization/</link><guid isPermaLink="true">https://modpagespeed.com/blog/self-hosted-image-optimization/</guid><description>Image SaaS bills per transformation and per GB of egress. Self-hosted optimization transcodes WebP/AVIF on your servers: no per-transformation cost.</description><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Content-hash URLs: why .pagespeed. URLs carry a hash</title><link>https://modpagespeed.com/blog/content-hash-urls/</link><guid isPermaLink="true">https://modpagespeed.com/blog/content-hash-urls/</guid><description>A content hash in a .pagespeed. URL gives year-long caching with automatic cache busting, years before webpack contenthash. Plus data-pagespeed-url-hash.</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Can AI read your website? We tested the top 1,000 sites</title><link>https://modpagespeed.com/blog/can-ai-read-your-website/</link><guid isPermaLink="true">https://modpagespeed.com/blog/can-ai-read-your-website/</guid><description>40% of the top 1,000 sites serve almost nothing to non-JavaScript AI crawlers: ChatGPT, Perplexity and Claude see an empty page. The data, and the fix.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>ASP.NET Core image optimization in C#: WebP and AVIF</title><link>https://modpagespeed.com/blog/aspnet-core-image-optimization-c-sharp/</link><guid isPermaLink="true">https://modpagespeed.com/blog/aspnet-core-image-optimization-c-sharp/</guid><description>Serve WebP and AVIF from ASP.NET Core with no controller or Razor changes: WeAmp.PageSpeed middleware negotiates on Accept, sizes images, preloads LCP.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Fix INP on ASP.NET Core: Razor vs Blazor</title><link>https://modpagespeed.com/blog/fix-inp-aspnet-core-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/fix-inp-aspnet-core-2026/</guid><description>How to fix INP on ASP.NET Core: Razor + jQuery responds well to bundling and the WeAmp.PageSpeed middleware; Blazor Server INP is architectural (WASM).</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>mod_pagespeed download: dl-ssl.google.com is frozen</title><link>https://modpagespeed.com/blog/google-dl-ssl-mod-pagespeed-download/</link><guid isPermaLink="true">https://modpagespeed.com/blog/google-dl-ssl-mod-pagespeed-download/</guid><description>The dl-ssl.google.com mod_pagespeed .deb is the last stable build, 1.13.35.2 (2018), with years of unpatched CVEs. Get the maintained download instead.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Is mod_pagespeed deprecated? (2026)</title><link>https://modpagespeed.com/blog/mod-pagespeed-deprecated-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/mod-pagespeed-deprecated-2026/</guid><description>Yes, mod_pagespeed 1.13.35.2 is deprecated: the binaries run but have had no security updates in years. What to use on Apache, nginx, IIS and ASP.NET Core.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Run ModPageSpeed 2.0 with Docker Compose</title><link>https://modpagespeed.com/blog/run-with-docker-compose/</link><guid isPermaLink="true">https://modpagespeed.com/blog/run-with-docker-compose/</guid><description>A working docker-compose.yml for ModPageSpeed 2.0 on nginx: worker + interceptor + shared Cyclone cache volume. Verify with curl, done.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Server-side critical CSS for nginx, any backend</title><link>https://modpagespeed.com/blog/server-side-critical-css-nginx/</link><guid isPermaLink="true">https://modpagespeed.com/blog/server-side-critical-css-nginx/</guid><description>Extract and inline critical CSS at the nginx layer for any backend: PHP, Rails, Django, ASP.NET, Go. No WordPress plugin, headless browser or Node build.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Fix CLS on ASP.NET Core: pre-size async holes</title><link>https://modpagespeed.com/blog/fix-cls-aspnet-core-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/fix-cls-aspnet-core-2026/</guid><description>How to fix CLS on ASP.NET Core: pre-size async view components, persist image dimensions, reserve banner space, rewrite img tags via middleware.</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Fix LCP on ASP.NET Core: Razor vs Blazor</title><link>https://modpagespeed.com/blog/fix-lcp-aspnet-core-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/fix-lcp-aspnet-core-2026/</guid><description>Fix LCP on ASP.NET Core: async view components, immutable cache headers, deferred JS and the WeAmp.PageSpeed middleware, for Razor Pages, MVC and Blazor.</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>mod_pagespeed 1.15: what six years of stewardship look like</title><link>https://modpagespeed.com/blog/mod-pagespeed-1-1-release/</link><guid isPermaLink="true">https://modpagespeed.com/blog/mod-pagespeed-1-1-release/</guid><description>mod_pagespeed 1.15 ships 765 merges since 1.13.35.2: image-decoder hardening, a full sanitizer matrix, current dependencies and the IIS port in the tree.</description><pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Fix INP on nginx: a CMS-agnostic plan</title><link>https://modpagespeed.com/blog/fix-inp-nginx-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/fix-inp-nginx-2026/</guid><description>How to fix INP on nginx, CMS-agnostic. Server-layer JS minification helps if your JS is bloated; if your stack is already lean, the wins are upstream.</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Fix CLS on nginx with mod_pagespeed: insert_image_dimensions</title><link>https://modpagespeed.com/blog/fix-cls-nginx-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/fix-cls-nginx-2026/</guid><description>Fix CLS on nginx sites: add width and height to img tags with ngx_pagespeed (mod_pagespeed 2.1), add a CSS aspect-ratio backstop, set sizes at build.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Fix LCP on nginx: transport, not content</title><link>https://modpagespeed.com/blog/fix-lcp-nginx-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/fix-lcp-nginx-2026/</guid><description>How to fix LCP on nginx: HTTP/2, gzip_static, TLS resumption and the mod_pagespeed rewriter. Stack-agnostic LCP fixes that work behind any backend.</description><pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Fix INP on Magento 2: why Hyvä beats a JS rewriter</title><link>https://modpagespeed.com/blog/fix-inp-magento-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/fix-inp-magento-2026/</guid><description>INP on Magento 2 lives in KnockoutJS and RequireJS, so theme architecture (Hyvä) moves it, not a server rewriter. What mod_pagespeed can and cannot do.</description><pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Fix CLS on Magento 2: start with the Fotorama gallery</title><link>https://modpagespeed.com/blog/fix-cls-magento-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/fix-cls-magento-2026/</guid><description>Fix CLS on Magento 2 product pages: stop Fotorama gallery jumps, pre-size the mini-cart and private-content blocks, write img dimensions at the server.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Fix LCP on Magento without breaking RequireJS</title><link>https://modpagespeed.com/blog/fix-lcp-magento-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/fix-lcp-magento-2026/</guid><description>How to fix LCP on Magento: tame the RequireJS waterfall, regenerate catalog images, inline critical CSS at the server. Step-by-step for Magento 2 in 2026.</description><pubDate>Tue, 28 Apr 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Fix INP on WooCommerce: where the cost lives</title><link>https://modpagespeed.com/blog/fix-inp-woocommerce-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/fix-inp-woocommerce-2026/</guid><description>How to fix INP on WooCommerce: server-layer JS minification reduces the parse cost, but cart and variation handlers are architectural.</description><pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Fix CLS on WooCommerce: lock the gallery</title><link>https://modpagespeed.com/blog/fix-cls-woocommerce-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/fix-cls-woocommerce-2026/</guid><description>How to fix CLS on WooCommerce: stop the gallery shift, lock variation swap dimensions, reserve cross-sell space, and rewrite img tags at the server.</description><pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Fix LCP on WooCommerce: shrink the gallery first</title><link>https://modpagespeed.com/blog/fix-lcp-woocommerce-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/fix-lcp-woocommerce-2026/</guid><description>Fix LCP on WooCommerce: shrink the product gallery, drop cart-fragments on non-shop pages, and rewrite catalog images at the server with mod_pagespeed.</description><pubDate>Thu, 16 Apr 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Fix INP on WordPress: plugin discipline</title><link>https://modpagespeed.com/blog/fix-inp-wordpress-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/fix-inp-wordpress-2026/</guid><description>How to fix INP on WordPress: diagnose the responsible interaction, defer non-critical JS at the server layer, then trim plugin handlers and jQuery.</description><pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Fix CLS on WordPress: dimensions at the server</title><link>https://modpagespeed.com/blog/fix-cls-wordpress-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/fix-cls-wordpress-2026/</guid><description>How to fix CLS on WordPress: diagnose the shifts, set width/height on every image at the server layer, lock down fonts, reserve banner space.</description><pubDate>Fri, 10 Apr 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Improve LCP, FCP and TTFB on WordPress at the server (2026)</title><link>https://modpagespeed.com/blog/fix-lcp-wordpress-2026/</link><guid isPermaLink="true">https://modpagespeed.com/blog/fix-lcp-wordpress-2026/</guid><description>How to fix LCP on WordPress: diagnose the hero, inline critical CSS at the server, convert JPEG to WebP, and verify in Search Console. Step-by-step, 2026.</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>mod_pagespeed and ngx_pagespeed alternatives in 2026</title><link>https://modpagespeed.com/blog/mod-pagespeed-alternatives/</link><guid isPermaLink="true">https://modpagespeed.com/blog/mod-pagespeed-alternatives/</guid><description>Google mod_pagespeed and ngx_pagespeed are no longer actively developed. mod_pagespeed 2.1 is the maintained continuation. Here is how the paths compare.</description><pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>mod_pagespeed 2.1 for ASP.NET Core: middleware via NuGet</title><link>https://modpagespeed.com/blog/aspnet-core-middleware/</link><guid isPermaLink="true">https://modpagespeed.com/blog/aspnet-core-middleware/</guid><description>Run the mod_pagespeed 2.1 optimization pipeline as ASP.NET Core middleware from NuGet: image transcoding, critical CSS and cache serving in 2 lines of C#.</description><pubDate>Thu, 12 Feb 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Migrate from mod_pagespeed 1.13 or ngx_pagespeed: 2.0 guide</title><link>https://modpagespeed.com/blog/migrating-from-1x/</link><guid isPermaLink="true">https://modpagespeed.com/blog/migrating-from-1x/</guid><description>Migrating from the archived mod_pagespeed 1.13.x or ngx_pagespeed: directive mapping, image-format checks, a verification checklist, and the 2.1 path.</description><pubDate>Tue, 10 Feb 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Critical CSS without a browser, or with headless Chrome</title><link>https://modpagespeed.com/blog/critical-css-heuristics/</link><guid isPermaLink="true">https://modpagespeed.com/blog/critical-css-heuristics/</guid><description>How the mod_pagespeed 2.1 optimizer worker inlines critical CSS two ways: static heuristics in under 5ms per page, or an optional headless-Chrome path.</description><pubDate>Sun, 08 Feb 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Image CDN cost comparison: Cloudflare, Cloudinary, imgix</title><link>https://modpagespeed.com/blog/economics-of-image-optimization/</link><guid isPermaLink="true">https://modpagespeed.com/blog/economics-of-image-optimization/</guid><description>Image CDNs run $35 to $3,500/mo as traffic grows; self-hosted mod_pagespeed 2.1 stays flat. Break-even is ~100 to 170K requests/mo. The 2026 cost model.</description><pubDate>Sat, 07 Feb 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Save-Data: lighter image variants for bandwidth-aware users</title><link>https://modpagespeed.com/blog/save-data-bandwidth/</link><guid isPermaLink="true">https://modpagespeed.com/blog/save-data-bandwidth/</guid><description>How mod_pagespeed 2.1 reads the Save-Data request header to serve lighter image variants: a 30-50% bandwidth cut on top of format and viewport sizing.</description><pubDate>Fri, 06 Feb 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Benchmarking ModPageSpeed 2.0: real numbers on real sites</title><link>https://modpagespeed.com/blog/benchmarking-real-numbers/</link><guid isPermaLink="true">https://modpagespeed.com/blog/benchmarking-real-numbers/</guid><description>Measured ModPageSpeed 2.0 results on e-commerce, blog, news and portfolio sites: WebP/AVIF savings and LCP, FCP, CLS and Lighthouse gains, 3G to broadband.</description><pubDate>Thu, 05 Feb 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Automatic WebP/AVIF on nginx: one decode, 37 variants</title><link>https://modpagespeed.com/blog/viewport-aware-image-optimization/</link><guid isPermaLink="true">https://modpagespeed.com/blog/viewport-aware-image-optimization/</guid><description>Serve WebP and AVIF automatically on nginx, self-hosted. The mod_pagespeed 2.1 worker decodes each image once and builds up to 37 responsive variants.</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item><item><title>Why I rebuilt mod_pagespeed from scratch</title><link>https://modpagespeed.com/blog/why-i-rebuilt-mod-pagespeed/</link><guid isPermaLink="true">https://modpagespeed.com/blog/why-i-rebuilt-mod-pagespeed/</guid><description>The story behind ModPageSpeed 2.0: why mod_pagespeed stopped being developed, what was kept from PSOL, and how a new architecture replaced RewriteDriver.</description><pubDate>Sun, 01 Feb 2026 00:00:00 GMT</pubDate><dc:creator>Otto van der Schaaf</dc:creator></item></channel></rss>