Apache mod_pagespeed ile Otomatik Web Optimizasyonu

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.

Yorum yapın