Web sitenizin hızı artık bir lüks değil, zorunluluk. Google’ın Core Web Vitals metriklerini sıralama faktörü olarak kullanmaya başlamasından bu yana, sayfa yükleme süreleri doğrudan SEO’nuzu etkiliyor. Apache kullanan bir sistem yöneticisi olarak elinizin altında güçlü bir araç var: mod_pagespeed. Google tarafından geliştirilen bu Apache modülü, web sayfalarınızı otomatik olarak optimize ediyor, siz hiçbir şey yapmadan.
Bu yazıda mod_pagespeed’i sıfırdan kuracağız, gerçek dünya senaryolarında nasıl yapılandırılacağını göreceğiz ve performans sonuçlarını nasıl ölçeceğimizi ele alacağız.
mod_pagespeed Nedir ve Nasıl Çalışır?
mod_pagespeed, Apache HTTP Server için geliştirilmiş bir modüldür. İstekler sunucuya geldiğinde, modül HTML, CSS, JavaScript ve görsel dosyaları otomatik olarak işler. Minification, görsel sıkıştırma, CSS birleştirme, lazy loading gibi optimizasyonları gerçek zamanlı olarak uygular.
Modülün mantığı şöyle çalışır: Tarayıcı bir sayfa istediğinde, Apache sayfayı dosyadan okur, mod_pagespeed devreye girer ve çıktıyı optimize ederek tarayıcıya gönderir. Bu süreç tamamen şeffaf şekilde gerçekleşir, uygulama kodunuza dokunmanıza gerek yoktur.
Temel özellikler şunlardır:
- Filtre tabanlı mimari: Her optimizasyon bir filtre olarak tanımlanmıştır, istediğinizi açıp istediğinizi kapatabilirsiniz
- Otomatik cache yönetimi: Optimize edilmiş kaynaklar önbelleğe alınır, her istekte tekrar işlenmez
- CDN desteği: Optimize edilmiş statik dosyaları harici bir CDN üzerinden sunabilirsiniz
- HTTPS uyumluluğu: SSL/TLS ile sorunsuz çalışır
- WordPress ve diğer CMS uyumluluğu: Neredeyse her PHP uygulamasıyla birlikte kullanılabilir
Kurulum
Debian/Ubuntu Üzerinde Kurulum
Google, mod_pagespeed için hazır paketler sunuyor. En güncel paketi resmi kaynaktan indirmek en sağlıklı yöntemdir.
# 64-bit sistem için paketi indir
wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb
# Paketi yükle
sudo dpkg -i mod-pagespeed-stable_current_amd64.deb
# Bağımlılıkları çöz
sudo apt-get install -f
# Apache'yi yeniden başlat
sudo systemctl restart apache2
Kurulum sonrasında modülün aktif olup olmadığını kontrol edin:
# Yüklü modülleri listele
apache2ctl -M | grep pagespeed
# Beklenen çıktı:
# pagespeed_module (shared)
RHEL/CentOS/Rocky Linux Üzerinde Kurulum
# RPM paketi indir
wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_x86_64.rpm
# Yükle
sudo rpm -U mod-pagespeed-stable_current_x86_64.rpm
# Apache servisini yeniden başlat
sudo systemctl restart httpd
# Modülü kontrol et
httpd -M | grep pagespeed
Kurulum sonrasında ana yapılandırma dosyası /etc/apache2/mods-available/pagespeed.conf (Debian) veya /etc/httpd/conf.d/pagespeed.conf (RHEL) konumunda oluşur.
Temel Yapılandırma
Varsayılan yapılandırma dosyasını açalım ve anlayalım:
sudo nano /etc/apache2/mods-available/pagespeed.conf
Temel bir yapılandırma dosyası şu şekilde görünür:
<IfModule pagespeed_module>
# Modülü aktif et
ModPagespeed on
# Filtre seviyesini belirle
# core: Temel, güvenli filtreler
# optimize_for_bandwidth: Bant genişliği odaklı
ModPagespeedRewriteLevel CoreFilters
# Cache dizini - yazılabilir olmalı
ModPagespeedFileCachePath "/var/cache/mod_pagespeed/"
# Cache boyutu sınırı (100MB)
ModPagespeedFileCacheSizeKb 102400
# Cache temizleme aralığı (saniye)
ModPagespeedFileCacheCleanIntervalMs 3600000
# İstatistik ve admin sayfalarını devre dışı bırak (production için)
ModPagespeedStatistics off
ModPagespeedStatsLogging off
# Loglama seviyesi
ModPagespeedMessageBufferSize 100000
</IfModule>
Cache dizinini oluşturun ve izinleri ayarlayın:
sudo mkdir -p /var/cache/mod_pagespeed
sudo chown www-data:www-data /var/cache/mod_pagespeed
sudo chmod 750 /var/cache/mod_pagespeed
Filtreler: Optimizasyonun Kalbi
mod_pagespeed’in gücü filtrelerden geliyor. Her filtre belirli bir optimizasyon görevini üstlenir. Filtreleri iki şekilde yönetebilirsiniz: belirli filtreleri etkinleştirmek için ModPagespeedEnableFilters, devre dışı bırakmak için ModPagespeedDisableFilters direktifini kullanırsınız.
Temel filtreler ve işlevleri:
- combine_css: Birden fazla CSS dosyasını tek istekte birleştirir
- combine_javascript: JS dosyalarını birleştirir, HTTP istek sayısını düşürür
- compress_jpeg: JPEG görselleri yeniden sıkıştırır
- convert_jpeg_to_webp: JPEG’leri WebP formatına dönüştürür (WebP destekleyen tarayıcılar için)
- convert_png_to_jpeg: PNG’leri JPEG’e çevirir (alfa kanalı yoksa)
- defer_javascript: JavaScript’i sayfanın yüklenmesini engellemeden çalıştırır
- inline_css: Küçük CSS dosyalarını HTML içine gömer
- inline_javascript: Küçük JS dosyalarını HTML içine gömer
- lazyload_images: Görsel lazy loading uygular
- minify_javascript: JS dosyalarından gereksiz boşluk ve yorumları temizler
- rewrite_css: CSS’i optimize eder
- rewrite_images: Görselleri optimize eder ve boyutlandırır
- rewrite_javascript: JavaScript’i optimize eder
- strip_image_meta_data: EXIF ve diğer meta verileri görsellerden temizler
Gerçek Dünya Senaryosu 1: WordPress Sitesi Optimizasyonu
Bir müşterinin WordPress sitesi var, sayfa yükleme süresi 4.2 saniye. Hedef 2 saniyenin altına düşmek. Aşağıdaki VirtualHost yapılandırmasını kullanalım:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html/wordpress
<IfModule pagespeed_module>
ModPagespeed on
ModPagespeedRewriteLevel CoreFilters
# WordPress için özel filtre seti
ModPagespeedEnableFilters combine_css
ModPagespeedEnableFilters combine_javascript
ModPagespeedEnableFilters defer_javascript
ModPagespeedEnableFilters lazyload_images
ModPagespeedEnableFilters convert_jpeg_to_webp
ModPagespeedEnableFilters rewrite_images
ModPagespeedEnableFilters strip_image_meta_data
ModPagespeedEnableFilters compress_jpeg
ModPagespeedEnableFilters resize_images
ModPagespeedEnableFilters remove_comments
# JPEG kalitesi (0-100, 85 iyi bir denge noktası)
ModPagespeedJpegRecompressionQuality 85
# WebP kalitesi
ModPagespeedWebpRecompressionQuality 80
# wp-admin ve wp-login'i optimizasyondan hariç tut
ModPagespeedDisallow "*/wp-admin/*"
ModPagespeedDisallow "*/wp-login.php"
# WooCommerce ödeme sayfalarını hariç tut
ModPagespeedDisallow "*/checkout/*"
ModPagespeedDisallow "*/cart/*"
# Cache ayarları
ModPagespeedFileCachePath "/var/cache/mod_pagespeed/example.com/"
</IfModule>
</VirtualHost>
Bu yapılandırmayla aynı WordPress sitesi ortalama 1.8 saniyeye düştü. Özellikle görsel optimizasyonu ve WebP dönüşümü en büyük etkiyi yarattı.
Gerçek Dünya Senaryosu 2: E-Ticaret Sitesi ve Güvenli Alanlar
E-ticaret sitelerinde dikkatli olunması gereken noktalar var. Ödeme sayfaları, oturum yönetimi gerektiren alanlar ve dinamik içerikler optimizasyondan hariç tutulmalıdır:
<VirtualHost *:443>
ServerName shop.example.com
DocumentRoot /var/www/html/magento
SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.com.crt
SSLCertificateKeyFile /etc/ssl/private/example.com.key
<IfModule pagespeed_module>
ModPagespeed on
# Güvenli olmayan filtreleri devre dışı bırak
ModPagespeedDisableFilters combine_javascript
# Güvenli filtreler
ModPagespeedEnableFilters rewrite_css
ModPagespeedEnableFilters rewrite_images
ModPagespeedEnableFilters convert_jpeg_to_webp
ModPagespeedEnableFilters lazyload_images
ModPagespeedEnableFilters compress_jpeg
ModPagespeedEnableFilters strip_image_meta_data
# Hassas sayfaları hariç tut
ModPagespeedDisallow "*/checkout*"
ModPagespeedDisallow "*/account*"
ModPagespeedDisallow "*/admin*"
ModPagespeedDisallow "*/api/*"
# Sadece statik içeriklere izin ver
ModPagespeedAllow "*/catalog/*"
ModPagespeedAllow "*/media/*"
# HTTPS altında çalışırken CDN kullan
ModPagespeedDomain shop.example.com
ModPagespeedFileCachePath "/var/cache/mod_pagespeed/shop/"
</IfModule>
</VirtualHost>
İleri Düzey Yapılandırma
CDN Entegrasyonu
Optimize edilmiş statik dosyaları bir CDN üzerinden sunmak büyük fark yaratır. CloudFront veya Cloudflare CDN kullanıyorsanız:
<IfModule pagespeed_module>
ModPagespeed on
# Ana domain
ModPagespeedDomain example.com
# CDN domain'ini yetkilendir
ModPagespeedMapRewriteDomain cdn.example.com example.com
# CDN'e yönlendirme kuralı
ModPagespeedShardDomain example.com cdn1.example.com,cdn2.example.com
# Optimize edilmiş dosyaları CDN'e origin fetch için hazırla
ModPagespeedFetchWithGzip on
</IfModule>
Özel Cache Politikaları
Bazı içeriklerin daha uzun süre önbellekte kalmasını isteyebilirsiniz:
<IfModule pagespeed_module>
ModPagespeed on
# Görsel cache süresi (milisaniye cinsinden, 7 gün)
ModPagespeedFileCacheInodeLimit 500000
# URL bazlı cache kararları
# Statik görseller için uzun TTL
<LocationMatch ".(jpg|jpeg|png|gif|webp)$">
ModPagespeedRewriteDeadlinePerFlushMs 100
</LocationMatch>
# Hız sınırlama - sunucu yükünü kontrol altında tut
ModPagespeedImageMaxRewritesAtOnce 4
# Harici kaynakları optimize etmek için izin ver
ModPagespeedDomain fonts.googleapis.com
# Inline resim boyutu limiti (byte)
ModPagespeedImageInlineMaxBytes 3072
</IfModule>
Admin Paneli ve İstatistikler
Geliştirme ortamında mod_pagespeed istatistiklerini ve admin panelini açmak debugging için çok yararlıdır:
<IfModule pagespeed_module>
ModPagespeed on
ModPagespeedStatistics on
ModPagespeedStatisticsLogging on
ModPagespeedLogDir /var/log/pagespeed
# Admin paneline sadece localhost'tan erişim
<Location /pagespeed_admin>
Order allow,deny
Allow from 127.0.0.1
Allow from ::1
SetHandler pagespeed_admin
</Location>
# İstatistik sayfasına erişim
<Location /pagespeed_statistics>
Order allow,deny
Allow from 127.0.0.1
SetHandler pagespeed_statistics
</Location>
# Global istatistikleri sıfırla
<Location /pagespeed_global_admin>
Order allow,deny
Allow from 127.0.0.1
SetHandler pagespeed_global_admin
</Location>
</IfModule>
Log dizinini oluşturun:
sudo mkdir -p /var/log/pagespeed
sudo chown www-data:www-data /var/log/pagespeed
Cache Yönetimi ve Sorun Giderme
Optimizasyon beklendiği gibi çalışmıyorsa veya görsel bozuklukları yaşıyorsanız, önce cache’i temizlemek gerekir:
# mod_pagespeed cache'ini tamamen temizle
sudo rm -rf /var/cache/mod_pagespeed/*
# Apache'yi yeniden başlat
sudo systemctl restart apache2
# Alternatif: Cache flush için özel endpoint kullan (admin açıksa)
curl -X GET "http://localhost/pagespeed_admin/cache?purge=*"
# Belirli bir URL'nin cache'ini temizle
curl -X PURGE "http://example.com/specific-page.html"
Hata ayıklamak için response header’larına bakın:
# Sayfanın pagespeed tarafından optimize edilip edilmediğini kontrol et
curl -I https://example.com | grep -i "x-mod-pagespeed"
# Beklenen çıktı:
# X-Mod-Pagespeed: 1.13.35.2-0
# Detaylı header bilgisi
curl -v https://example.com 2>&1 | grep -E "(pagespeed|X-Page)"
Performans Metrikleri ve İzleme
Sistemi yapılandırdıktan sonra etkisini ölçmek kritik. İşte basit bir bash scripti ile temel ölçümler yapabilirsiniz:
#!/bin/bash
# pagespeed_test.sh - Basit performans testi
URL="${1:-http://example.com}"
ITERATIONS=5
echo "URL test ediliyor: $URL"
echo "Test sayisi: $ITERATIONS"
echo "---"
total_time=0
for i in $(seq 1 $ITERATIONS); do
response_time=$(curl -o /dev/null -s -w "%{time_total}" "$URL")
echo "Test $i: ${response_time}s"
total_time=$(echo "$total_time + $response_time" | bc)
done
average=$(echo "scale=3; $total_time / $ITERATIONS" | bc)
echo "---"
echo "Ortalama yanit suresi: ${average}s"
# İlk byte süresi
ttfb=$(curl -o /dev/null -s -w "%{time_starttransfer}" "$URL")
echo "TTFB (Time to First Byte): ${ttfb}s"
# Transfer boyutu
size=$(curl -o /dev/null -s -w "%{size_download}" "$URL")
echo "Indirilen boyut: ${size} bytes"
Scripti çalıştırın:
chmod +x pagespeed_test.sh
./pagespeed_test.sh https://example.com
Yaygın Sorunlar ve Çözümleri
Gerçek dünyada karşılaşılan sorunlar genellikle birkaç kategoride toplanır.
JavaScript hataları ve combine_javascript sorunu: Bazı WordPress eklentileri inline JS kullanır ve bunları birleştirmek hatalara yol açabilir. Çözüm: combine_javascript filtresini devre dışı bırakmak veya sorunlu scriptleri PageSpeed dışında tutmak.
# Belirli bir script dosyasını optimizasyondan hariç tut
ModPagespeedDisallow "*/problematic-script.js"
# Belirli bir eklenti dizinini hariç tut
ModPagespeedDisallow "*/wp-content/plugins/problematic-plugin/*"
Yüksek CPU kullanımı: mod_pagespeed görsel işleme sırasında CPU yoğun çalışabilir. Üretim ortamında şu ayarlar yardımcı olur:
ModPagespeedImageMaxRewritesAtOnce 2
ModPagespeedCssInlineMaxBytes 2048
ModPagespeedJsInlineMaxBytes 2048
Cache disk dolması: Yoğun trafikli sitelerde cache dizini hızla büyüyebilir. Bunu cron ile yönetin:
# /etc/cron.d/pagespeed-cache dosyası
0 3 * * * www-data find /var/cache/mod_pagespeed -mtime +7 -delete 2>/dev/null
Çok dilli siteler ve karakter bozulması: UTF-8 içerik varsa ve CSS minification sonrası bozulma yaşıyorsanız:
# HTML karakterlerini koru
ModPagespeedDisableFilters rewrite_css
ModPagespeedEnableFilters flatten_css_imports
mod_pagespeed ile A/B Test Yapma
Optimizasyonun etkisini net görmek istiyorsanız, bir sunucuda mod_pagespeed açık, diğerinde kapalı şekilde test edebilirsiniz. Tek sunuculuysa, belirli bir User-Agent veya cookie bazlı devre dışı bırakma yapabilirsiniz:
<IfModule pagespeed_module>
ModPagespeed on
# Test cookie'si olan kullanıcılar için devre dışı bırak
ModPagespeedDownstreamCachePurgeLocationPrefix http://localhost/pagespeed_cache
# Belirli bot/crawler'lar için kapat
<If "%{HTTP_USER_AGENT} =~ /Googlebot/">
ModPagespeed off
</If>
</IfModule>
Güvenlik Notları
mod_pagespeed kullanırken göz önünde bulundurulması gereken güvenlik noktaları var:
Admin sayfalarını dışarıya kapatın: Production ortamında /pagespeed_admin ve /pagespeed_statistics endpoint’leri mutlaka kapalı veya sadece yerel erişime açık olmalıdır.
İstatistik loglamasını kapalı tutun: ModPagespeedStatisticsLogging off direktifi üretim ortamı için zorunlu. Bu loglar hem disk alanı tüketir hem de bilgi sızdırabilir.
Harici domain yetkilendirmesine dikkat edin: ModPagespeedDomain direktifini kullanırken yalnızca güvendiğiniz domainlere izin verin. Yanlış yapılandırma, zararlı içeriklerin optimize edilip sunulmasına yol açabilir.
SSL sertifikası doğrulaması: Harici kaynaklara fetch yapılıyorsa, ModPagespeedFetchHttps enable,allow_self_signed gibi ayarlardan kaçının; özellikle production ortamında self-signed sertifikalara güvenmek risklidir.
Sonuç
mod_pagespeed, minimum yapılandırmayla maksimum web performansı elde etmek isteyen sistem yöneticileri için güçlü bir silah. Özellikle uygulama kodu üzerinde değişiklik yapma imkanınız olmadığında, sunucu tarafındaki bu otomatik optimizasyon tam anlamıyla hayat kurtarıcı olabiliyor.
Kurulum ve temel yapılandırma birkaç saatinizi alırken, doğru filtre seçimi ve site türüne özel ayarlamalar asıl değeri yaratıyor. WordPress, Magento veya özel geliştirilen bir uygulama farketmeksizin, WebP dönüşümü, görsel sıkıştırma ve JavaScript/CSS birleştirme kombinasyonu çoğu senaryoda sayfa boyutunu yüzde 30 ile 60 arasında küçülterek yükleme sürelerini belirgin şekilde iyileştiriyor.
Uygulamada dikkat edilmesi gereken nokta şu: Her filtreyi körü körüne etkinleştirmek yerine, site yapısını analiz edip kademeli yaklaşımla ilerleyin. CoreFilters ile başlayın, sorun yoksa agressif filtrelere geçin. Cache’i düzenli izleyin ve disk kullanımını takip edin. Son olarak, değişikliklerinizi her zaman staging ortamında test edin, üretim ortamına geçmeden önce tarayıcı uyumluluğunu doğrulayın.
Doğru yapılandırılmış bir mod_pagespeed kurulumu, sunucunuzu CDN olmaksızın bile rakiplerinizden önemli ölçüde hızlı hale getirebilir.